Czy mogę poruszać się po menu uzupełniania kart w Zsh za pomocą klawiszy hjkl typu vi?

13

Korzystam z uzupełniania tabulatorów w menu zsh. Naciskam Tabraz, a pojawia się lista możliwych uzupełnień. Po Tabponownym naciśnięciu mogę poruszać się po tej liście za pomocą klawiszy strzałek. Jednakże, jest to możliwe, aby poruszać je z vi-like H, J, K, Lklawisze zamiast tego?

Używam trybu emacs do wprowadzania z wiersza poleceń, z bindkey -ein ~/.zshrc. Używam również zim z zsh. W stosownych przypadkach, polecenia, które określają system zakładka uzupełniania są tutaj .

Krogulec
źródło

Odpowiedzi:

16

Tak, możesz, włączając 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
źródło
+1 Działa to dobrze, jeśli ręcznie uruchomię bindkeypolecenia w terminalu, ale nie powiedzie się, jeśli wstawię je na końcu ~/.zshrc, przy pomocy /home/sparhawk/.zshrc:bindkey:186: no such keymap `menuselect'.
Sparhawk
Czy włączyłeś skrypty wypełniania? Zobacz polecenie przed elipsami ...
jasonwryan
Masz na myśli zstylelinię? Tak, też to miałem ~/.zshrc.
Sparhawk
Musisz także to włączyć . Zobacz mój .zshrc jako przykład .
jasonwryan
Dodawanie autoload -Uz compiniti compinitnie działało, ale nie jestem pewien, czy włączenie tego jest problemem, ponieważ (a) wybór menu działa ogólnie w sensie ogólnym i zawsze tak jest, i (b) mogę ręcznie uruchomić bindkeywiersze później, co Pracuje. Poza tym właśnie zdałem sobie sprawę, że (b) działa tylko wtedy, gdy najpierw nacisnę klawisz Tab , prawdopodobnie w celu zainicjowania systemu uzupełniania, a następnie uruchomienia bindkey…. W przeciwnym razie zawiedzie jak wyżej ( bindkey: no such keymap `menuselect').
Sparhawk
4

Najbliżej tego doszedłem, używając CTRL- Ni CTRL- Pdo poruszania się do przodu i do tyłu po liście możliwych uzupełnień, zamiast Tabi Shift- Tab. To jest bardziej vi-jak nawigacji.

W .zshpliku konfiguracyjnym osiągam to za pomocą:

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

I powiązane:

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

Oto dokumenty dla powiązań .

effel
źródło
2
to jest świetne, dzięki. Ponadto, -M menuselectmożna dodać do bindkeypolecenia, aby ograniczyć tryb tutaj.