zsh
で補完をmenu-complete
にすると補完候補が多い場合に候補選択が面倒ですが、設定次第で候補をインタラクティブに絞り込めるようになります。
※ 使用したのはzsh 5.0.2
メニュー補完絞り込み設定例
autoload -Uz compinit && compinit -u
zstyle ':completion:*' menu select interactive
setopt menu_complete
zshrc
などに上記の設定を追加すると、補完開始と同時に絞り込み機能が有効になり、以下のようにFunctions/Zle/
というパスをF/Zl/
というキー入力で絞り込むことが出来るようになります。
※setopt menu_complete
を設定しない場合は補完開始直後に絞り込みが開始されず、再度補完開始のキーを叩いた時に絞り込みが開始になります。
メニュー補完のキーバインドを設定して使い易くする
絞り込み機能を有効にすると、設定次第ではメニュー補完での候補移動が出来なくなってしまう場合があります。
自分の場合は^f
,^b
,^n
,^p
で候補を移動してキー入力で絞り込みを行う事を両立させたかったので、以下のような設定にしてあります。
zmodload zsh/complist # "bindkey -M menuselect"設定できるようにするためのモジュールロード
bindkey -v '^a' beginning-of-line # 行頭へ(menuselectでは補完候補の先頭へ)
bindkey -v '^b' backward-char # 1文字左へ(menuselectでは補完候補1つ左へ)
bindkey -v '^e' end-of-line # 行末へ(menuselectでは補完候補の最後尾へ)
bindkey -v '^f' forward-char # 1文字右へ(menuselectでは補完候補1つ右へ)
bindkey -v '^h' backward-delete-char # 1文字削除(menuselectでは絞り込みの1文字削除)
bindkey -v '^i' expand-or-complete # 補完開始
bindkey -M menuselect '^g' .send-break # send-break2回分の効果
bindkey -M menuselect '^i' forward-char # 補完候補1つ右へ
bindkey -M menuselect '^j' .accept-line # accept-line2回分の効果
bindkey -M menuselect '^k' accept-and-infer-next-history # 次の補完メニューを表示する
bindkey -M menuselect '^n' down-line-or-history # 補完候補1つ下へ
bindkey -M menuselect '^p' up-line-or-history # 補完候補1つ上へ
bindkey -M menuselect '^r' history-incremental-search-forward # 補完候補内インクリメンタルサーチ
この中で一番重宝しているのはaccept-and-infer-next-history
です。
これを設定したキーを叩くと選択した補完候補がディレクトリの場合に候補を決定し、更にそのディレクトリ内で直ぐメニュー補完を開始してくれるのでキータイプをかなり減らすことが出来ます。
これで候補が多い場合でもメニュー補完を快適に使えるようになりました。