Posso navegar no menu de preenchimento de guias do zsh com as teclas hjkl do tipo vi?

12

Eu uso a conclusão da guia baseada em menu do zsh. Pressiono Tabuma vez e uma lista de possíveis conclusões é exibida. Se pressionar Tabnovamente, posso navegar nesta lista com as teclas de seta. No entanto, é possível navegar-los com os vi-como H, J, K, Lchaves em vez?

Eu uso o modo emacs para entrada da linha de comando, com bindkey -ein ~/.zshrc. Eu também uso zim com zsh. Se relevante, os comandos que especificam o sistema de preenchimento de guias estão aqui .

Sparhawk
fonte

Respostas:

15

Sim, você pode habilitando menu select:

zstyle ':completion:*' menu select
zmodload zsh/complist
...
# use the vi navigation keys in menu completion
bindkey -M menuselect 'h' vi-backward-char
bindkey -M menuselect 'k' vi-up-line-or-history
bindkey -M menuselect 'l' vi-forward-char
bindkey -M menuselect 'j' vi-down-line-or-history
jasonwryan
fonte
+1 Isso funciona bem se eu executar manualmente os bindkeycomandos no terminal, mas falhará se eu os colocar no final de ~/.zshrc, com /home/sparhawk/.zshrc:bindkey:186: no such keymap `menuselect'.
Sparhawk
Você ativou os scripts de conclusão? Veja o comando antes das elipses ...
jasonwryan
Você quer dizer a zstylelinha? Sim, eu também tive isso ~/.zshrc.
Sparhawk
Você precisa habilitá-lo também . Veja meu .zshrc como um exemplo .
jasonwryan
Adicionar autoload -Uz compinite compinitnão funcionou, mas não tenho certeza se a habilitação é o problema, porque (a) a seleção do menu funciona bem em um sentido geral e sempre funcionou e (b) posso executar as bindkeylinhas manualmente mais tarde, o que trabalho. Além disso, acabei de perceber que (b) só funciona se eu pressionar a tecla primeiro , presumivelmente para inicializar o sistema de conclusão e depois executar bindkey…. Caso contrário, ele falhará como acima ( bindkey: no such keymap `menuselect').
Sparhawk
3

O mais próximo que cheguei disso é usando CTRL- Ne CTRL- Ppara avançar e retroceder na lista de possíveis conclusões, em vez de Tabe Shift- Tab. Esta é mais vinavegação -como.

Em um .zsharquivo de configuração, eu consigo isso com:

bindkey '^n' expand-or-complete
bindkey '^p' reverse-menu-complete

E relacionado:

bindkey '^k' up-history
bindkey '^j' down-history
bindkey '^h' backward-delete-char
bindkey '^w' backward-kill-word
bindkey '^r' history-incremental-search-backward

Aqui estão os documentos para as ligações .

effel
fonte
2
está ótimo, obrigado. Além disso, -M menuselectpode ser adicionado ao bindkeycomando para restringir o modo aqui.