conclusão zsh - mostra mais opções do que apenas o alias

conclusão zsh - mostra mais opções do que apenas o alias

Estou tentando modificar o comportamento da conclusão do zsh e seus menus. Estou preso e li tanta documentação que minha cabeça está girando.

O seguinte é apenas um exemplo; Eu preferiria respostas que não sejam específicas para cd.

Eu configurei o zsh para mostrar apenas o menu de seleção se a conclusão for inequívoca ( zstyle ':completion:*:*:*:*:*' menu select=2).

Eu tenho um apelido alias cd='nocorrect cd'. Quando o faço cd<TAB>(sem espaço), zsh pensa que não é ambíguo e completa o alias. zsh acha que é inequívoco - na verdade, quando o faço cd<^D>, mostra apenas a única conclusão possível. Na minha opinião, deveria mostrar outras opções de conclusão como cdiff. Na verdade, quando faço isso cd<^Xn>, vejo essas outras opções. Esse também é o comportamento demonstrado noGuia do usuário ZSH, seção 6.5.2.

Eu meio que vejo o que está acontecendo. Tenho meus completadores configurados como zstyle ':completion:*' completer _expand _expand_alias _complete _ignored _match _correct _approximate _prefix, então posso entender por que ele acha que expandir esse alias é a primeira prioridade. Eu simplesmente não consigo entender por que é oapenasopção.

Eu acho que tem algo a ver com tag-order, como no segundo exemplo do guia do usuárioseção 6.4.2. No entanto, não tenho nada parecido configurado para este contexto ( :completion::complete:-command-::) ou qualquer outra coisa da qual ele possa herdar.

Todas as minhas configurações relacionadas à conclusão estão emeste arquivo no Github. Subindo a partir daí, você pode ver minha configuração zsh na íntegra; no entanto, não tenho nada configurado :completion:fora deste arquivo, inclusive no meu .zshrc, então duvido que algo o substitua.

Então, alguém pode me explicar o que fazer para obter o comportamento que desejo?

Para sua informação, estou usando o zsh com a estrutura Prezto, o que acredito ser irrelevante, pois o problema está inteiramente relacionado aos recursos e módulos integrados do zsh.


Alguma saída:

cd<TAB>: apenas muda cdpara nocorrect cd, sem menu.

$ 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 

Responder1

Resposta de @Iluanão funcionou, mas me deu algumas ideias sobre o que procurar e resolvi o problema.

O estilo que eu precisava era regular. De 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. 

Eu usei zstyle ':completion:*' regular 'false'e funciona perfeitamente.

Responder2

Acho que você está procurando o accept-exactestilo que deseja definir como falso.

homem 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).

informação relacionada