viのようなhjklキーでzshのタブ補完メニューをナビゲートできますか?


12

zshのメニューベースのタブ補完を使用します。Tab一度押すと、可能な補完のリストが表示されます。Tabもう一度押すと、矢印キーでこのリストをナビゲートできます。しかし、それはそれらをナビゲートすることが可能となるviHJKL代わりにキー?

コマンドライン入力には、bindkey -ein を使用してemacsモードを使用し~/.zshrcます。また、zshでzimを使用しています。関連する場合、タブ補完システムを指定するコマンドはこちらです。

回答:


15

はい、有効にすることでできます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これbindkeyは、端末でコマンドを手動で実行した場合はうまく機能しますが、の最後にコマンドを追加すると失敗~/.zshrc/home/sparhawk/.zshrc:bindkey:186: no such keymap `menuselect'ます。
スパラフーク

完了スクリプトを有効にしましたか?省略記号の前のコマンドを参照してください
...-jasonwryan

zstyle行を意味するのですか?はい、私もそれを持っていました~/.zshrc
スパラフーク

同様有効にする必要があります。例として私の.zshrcを参照してください。
-jasonwryan

追加autoload -Uz compinitcompinitても機能しませんでしたが、有効にすることが問題かどうかはわかりません。なぜなら、(a)メニュー選択は一般的な意味で正常に機能し、常に機能し、(b)bindkey後で手動で行を実行できるからです。動作します。また、(b)タブを最初に押して、おそらく完了システムを初期化してからを実行した場合にのみ機能することに気付きましたbindkey…。それ以外の場合、上記のように失敗します(bindkey: no such keymap `menuselect')。
スパラフーク

3

これに最も近いのは、-の代わりにCTRL- NCTRL- Pを使用して、可能な補完のリストを前後に移動することです。これは、よりナビゲーションに似ています。TabShiftTabvi

構成.zshファイルで私はこれを達成します:

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

そして関連して:

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

バインディングのドキュメントは次のとおりです。


2
それは素晴らしい、ありがとう。また、コマンドに-M menuselect追加してbindkey、ここでモードを制限することもできます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.