zsh-дополнение - показать больше опций, чем просто псевдоним

zsh-дополнение - показать больше опций, чем просто псевдоним

Я пытаюсь изменить поведение автодополнения zsh и его меню. Я застрял, и я прочитал так много документации, что у меня голова идет кругом.

Ниже приведен только пример; я бы предпочел ответы, не относящиеся конкретно к cd.

Я настроил zsh так, чтобы отображалось меню выбора только в том случае, если завершение однозначно ( zstyle ':completion:*:*:*:*:*' menu select=2).

У меня есть псевдоним alias cd='nocorrect cd'. Когда я делаю cd<TAB>(без пробела), zsh думает, что это однозначно, и дополняет псевдоним. zsh думает, что это однозначно — действительно, когда я делаю cd<^D>, он показывает только одно возможное завершение. По моему мнению, он должен показывать другие варианты завершения, например cdiff. Действительно, когда я делаю cd<^Xn>, я вижу эти другие варианты. Это также демонстрируется вРуководство пользователя ZSH, раздел 6.5.2.

Я вроде как вижу, что происходит. У меня есть мои комплементы, настроенные как zstyle ':completion:*' completer _expand _expand_alias _complete _ignored _match _correct _approximate _prefix, поэтому я могу понять, почему он считает, что расширение этого псевдонима является первым приоритетом. Я просто не могу понять, почему этотольковариант.

Я думаю, это как-то связано с tag-order, как во втором примере в руководстве пользователяраздел 6.4.2. Однако у меня нет ничего подобного, настроенного для этого контекста ( :completion::complete:-command-::), или чего-либо еще, от чего он мог бы наследоваться.

Все мои настройки, связанные с завершением, находятся вэтот файл на Github. Поднимаясь оттуда, вы можете увидеть мою конфигурацию zsh в полном объеме; однако у меня нет никаких настроек за :completion:пределами этого файла, включая мой .zshrc, поэтому я сомневаюсь, что что-либо переопределяет его.

Итак, может ли кто-нибудь объяснить мне, что делать, чтобы добиться желаемого мной поведения?

К вашему сведению, я использую zsh с фреймворком Prezto, который, по моему мнению, не имеет значения, поскольку проблема целиком и полностью связана со встроенными функциями и модулями zsh.


Некоторые выводы:

cd<TAB>: просто меняется cdна nocorrect cd, без меню.

$ cd<^D>
-- alias --
nocorrect cd

$ cd<^Xn>
 -- external command --
cdbs-edit-patch    cd-fix-profile     cdiff                               
cd-create-profile  cd-iccdump                                           
 -- builtin command --
cd
 -- shell function --
cdls
 -- alias --
cd
 -- parameter --
CDPATH                                cdpath 

решение1

@Ilua's ответне сработало, но это дало мне некоторые идеи относительно того, что искать, и я решил проблему.

Стиль, который мне был нужен, был regular. От man zshcompsys:

regular
   This style is used by the _expand_alias completer and bindable command. 
   If set to ‘true’ (the default), regular aliases will be expanded but only in command position. 
   If it is set to ‘false’, regular aliases will never be expanded.
   If it is set to ‘always’, regular aliases will be expanded even if not in command position. 

Я использовал zstyle ':completion:*' regular 'false', и он работает отлично.

решение2

Я думаю, вы ищете accept-exactстиль, который хотите установить на false.

человек zshcompsys

accept-exact
              This  is  tested for the default tag in addition to the tags valid for the current context.  If it is set to `true' and any of the trial matches is the same as the string on the command line, this match will immediately
              be accepted (even if it would otherwise be considered ambiguous).

Связанный контент