Posso navigare nel menu di completamento delle schede di zsh con i tasti hjkl simili a vi?


12

Uso il completamento della scheda basato sul menu di zsh. Premo Tabuna volta e viene visualizzato un elenco di possibili completamenti. Se premo di Tabnuovo, posso navigare in questo elenco con i tasti freccia. Tuttavia, è possibile navigare loro i vi-come H, J, K, Lchiavi invece?

Uso la modalità emacs per l'input da riga di comando, con bindkey -ein ~/.zshrc. Uso anche zim con zsh. Se pertinente, i comandi che specificano il sistema di completamento della scheda sono qui .

Risposte:


15

Sì, puoi abilitando 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

+1 Funziona bene se eseguo manualmente i bindkeycomandi nel terminale, ma fallisce se li inserisco alla fine di ~/.zshrc, con /home/sparhawk/.zshrc:bindkey:186: no such keymap `menuselect'.
Sparhawk,

Hai abilitato gli script dei completamenti? Vedi il comando prima delle ellissi ...
Jasonwryan,

Intendi la zstylelinea? Sì, l'ho avuto anche io ~/.zshrc.
Sparhawk,

Devi anche abilitarlo . Vedi il mio .zshrc come esempio .
Jasonwryan,

Aggiungendo autoload -Uz compinite compinitnon ha funzionato, ma non sono sicuro se abilitarlo sia il problema, perché (a) selezionare il menu funziona bene in senso generale, e ha sempre, e (b) posso eseguire manualmente le bindkeylinee in seguito, che lavori. Inoltre, ho appena realizzato che (b) funziona solo se premo prima tab , presumibilmente per inizializzare il sistema di completamento, quindi eseguirlo bindkey…. Altrimenti fallisce come sopra ( bindkey: no such keymap `menuselect').
Sparhawk,

3

Il più vicino a cui sono arrivato è usare CTRL- Ne CTRL- Pper spostarsi avanti e indietro nell'elenco dei possibili completamenti, anziché Tabe Shift- Tab. Questa è una vinavigazione più simile.

In un .zshfile di configurazione ottengo questo con:

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

E in relazione:

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

Ecco i documenti per gli attacchi .


2
è fantastico, grazie. inoltre, -M menuselectpuò essere aggiunto al bindkeycomando per limitare la modalità qui.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.