Kann ich mit vi-ähnlichen hjkl-Tasten im Tab-Vervollständigungsmenü von zsh navigieren?

12

Ich verwende die menübasierte Tab-Vervollständigung von zsh. Ich drücke Tabeinmal, und eine Liste der möglichen Abschlüsse wird angezeigt. Wenn ich Taberneut drücke , kann ich mit den Pfeiltasten in dieser Liste navigieren. Allerdings ist es möglich , navigieren sie mit den vi-like H, J, K, LTasten statt?

Ich benutze den Emacs-Modus für die Eingabe über die Befehlszeile, mit bindkey -ein ~/.zshrc. Ich benutze auch zim mit zsh. Falls relevant, dass die Befehle , um das Tab-Vervollständigung System angeben sind hier .

Sparhawk
quelle

Antworten:

15

Ja, Sie können Folgendes aktivieren 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
quelle
+1 Das funktioniert gut, wenn ich die bindkeyBefehle manuell im Terminal ausführe, aber es schlägt fehl, wenn ich sie am Ende von ~/.zshrcmit setze /home/sparhawk/.zshrc:bindkey:186: no such keymap `menuselect'.
Sparhawk
Haben Sie die Vervollständigungsskripte aktiviert? Siehe den Befehl vor den Ellipsen ...
Jasonwryan
Meinen Sie die zstyleLinie? Ja, das hatte ich ~/.zshrcauch.
Sparhawk
Sie müssen es auch aktivieren . Siehe mein .zshrc als Beispiel .
Jasonwryan
Hinzufügen autoload -Uz compinitund compinitnicht funktioniert, aber ich bin nicht sicher, ob das Aktivieren das Problem ist, weil (a) Menüauswahl im Allgemeinen gut funktioniert und immer funktioniert und (b) ich die bindkeyZeilen später manuell ausführen kann , was funktioniert. Auch ich habe gerade (b) funktioniert nur , wenn ich die Tabulatortaste drücken , ersten , vermutlich das Komplettierungssystem zu initialisieren, dann laufen bindkey…. Ansonsten schlägt es wie oben ( bindkey: no such keymap `menuselect') fehl .
Sparhawk
3

Am nächsten komme ich damit, dass ich CTRL- Nund CTRL- verwende P, um vorwärts und rückwärts durch die Liste der möglichen Abschlüsse zu blättern, anstatt Tabund Shift- Tab. Dies ist eher eine viNavigation.

In einer Konfigurationsdatei .zsherreiche ich dies mit:

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

Und damit verbunden:

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

Hier sind die Dokumente für die Bindungen .

effel
quelle
2
Es ist großartig, danke. Außerdem -M menuselectkann der bindkeyBefehl hinzugefügt werden, um den Modus hier einzuschränken.