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

3

Estou tentando modificar o comportamento da conclusão do zsh e seus menus. Eu estou preso, e eu li muita documentação, isso está fazendo minha cabeça girar.

O seguinte é apenas um exemplo; Eu prefiro respostas que não são específicas de 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 alias alias cd='nocorrect cd' . Quando eu faço cd<TAB> (sem espaço), o zsh acha que não é ambíguo e completa o alias. O zsh acha que não é ambíguo - na verdade, quando eu faço cd<^D> , ele mostra apenas uma conclusão possível. Na minha opinião, deve mostrar outras opções de conclusão, como cdiff . De fato, quando eu faço cd<^Xn> , vejo essas outras opções. Esse também é o comportamento demonstrado no Guia do usuário do ZSH, seção 6.5.2 .

Eu meio que vejo o que está acontecendo. Eu tenho meus conclutores configurados como zstyle ':completion:*' completer _expand _expand_alias _complete _ignored _match _correct _approximate _prefix , então posso entender por que a expansão desse alias é a primeira prioridade. Eu simplesmente não consigo entender porque é a opção somente .

Eu acho que é algo a ver com tag-order , como no segundo exemplo na seção seção 6.4 do guia do usuário .2 . No entanto, não tenho nada parecido configurado para esse contexto ( :completion::complete:-command-:: ) ou qualquer outra coisa da qual possa herdar.

Todas as minhas configurações relacionadas à conclusão estão em este arquivo no Github . Subindo de lá, você pode ver minha configuração zsh em sua totalidade; no entanto, eu não tenho nada configurado para :completion: fora desse arquivo, inclusive no meu .zshrc , então duvido que qualquer coisa esteja substituindo isso.

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

FYI, estou usando o zsh com o framework Prezto, que, acredito, é irrelevante, já que o problema é totalmente relacionado a recursos e módulos zsh integrados.

Alguma saída:

cd<TAB> : altera apenas cd para 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 
    
por skittleys 25.06.2014 / 19:39

2 respostas

1

@ A resposta de Ilua não funcionou, mas me deu algumas ideias sobre o que pesquisar e Eu 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.

    
por 26.06.2014 / 12:08
0

Acho que você está procurando o estilo accept-exact , que deseja definir como falso.

man 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).
    
por 26.06.2014 / 04:29