Puis-je naviguer dans le menu de complétion des onglets de zsh avec des touches hjkl de type vi?

12

J'utilise la complétion d'onglet basée sur le menu de zsh. J'appuie Tabune fois et une liste des achèvements possibles apparaît. Si j'appuie à Tabnouveau, je peux parcourir cette liste avec les touches fléchées. Cependant, est - il possible de les naviguer avec les vi-comme H, J, K, Lclés au lieu?

J'utilise le mode emacs pour l'entrée en ligne de commande, avec bindkey -ein ~/.zshrc. J'utilise également zim avec zsh. Le cas échéant, les commandes qui spécifient le système de tabulation sont ici .

Sparhawk
la source

Réponses:

15

Oui, vous pouvez en activant 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
la source
+1 Cela fonctionne bien si j'exécute manuellement les bindkeycommandes dans le terminal, mais cela échoue si je les mets à la fin de ~/.zshrc, avec /home/sparhawk/.zshrc:bindkey:186: no such keymap `menuselect'.
Sparhawk
Avez-vous activé les scripts d'achèvement? Voir la commande avant les ellipses ...
jasonwryan
Tu veux dire la zstyleligne? Oui, je l'avais ~/.zshrcaussi.
Sparhawk
Vous devez également l' activer . Voir mon .zshrc comme exemple .
jasonwryan
Ajout autoload -Uz compinitet compinitn'a pas fonctionné, mais je ne suis pas sûr que permettre est le problème, parce que (a) sélectionner le menu fonctionne très bien dans un sens général, et a toujours, et (b) Je peux exécuter manuellement les bindkeylignes plus loin, qui travaux. De plus, je viens de réaliser (b) ne fonctionne que si l' onglet de presse I première , sans doute pour initialiser le système d'achèvement, puis exécutez bindkey…. Sinon, il échoue comme ci-dessus ( bindkey: no such keymap `menuselect').
Sparhawk
3

Le plus proche que j'en ai fait est d'utiliser CTRL- Net CTRL- Ppour avancer et reculer dans la liste des achèvements possibles, au lieu de Tabet Shift- Tab. C'est plus vinavigation -comme.

Dans un .zshfichier de configuration , j'y parviens avec:

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

Et en relation:

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

Voici les documents pour les reliures .

effel
la source
2
c'est super, merci. -M menuselectpeut également être ajouté à la bindkeycommande pour restreindre le mode ici.