web-dev-qa-db-ja.com

ZSHでの魚のような引数補完検索

私は魚をいじり回していて、この便利な行動に気づきました

入力した場合wget -<tab><tab><tab>、インタラクティブメニューに入れられました。しかし、入力すると、引数自体の説明を検索しました。私はこれをzshで試してみましたが、このメニューを入力しても、インタラクティブなプロンプトに戻るだけでした。 zshで同様の機能を実現する方法はありますか?

8
ollien

これを.zshrcファイルに入れてみてください。

 # load module for list-style selection
 zmodload zsh/complist

 # use the module above for autocomplete selection
 zstyle ':completion:*' menu yes select

 # now we can define keybindings for complist module
 # you want to trigger search on autocomplete items
 # so we'll bind some key to trigger history-incremental-search-forward function
 bindkey -M menuselect '?' history-incremental-search-forward

次に、wget -<tab>と入力すると、オートコンプリート付きのメニューが表示されます。このメニューのキーバインドを定義したので、?を押すと、補完の上部に検索行が表示されます。

davidsykora~%wget --referer
isearch: refe

追加のヒント:

  • 逆検索用にbindkey -M menuselect '/' history-incremental-search-backwardを定義することもできます
  • もう一度検索中に?を押すと、選択すると次の検索結果にジャンプします。前の結果にジャンプするには/を使用します
  • 思い通りに機能させるには多くの調整が必要なので、complistdocumentation を見て、追加の関数とオプションを見つけます
  • 私にとっては、通常、vi-insert complist関数を使用する方がはるかに高速です。入力した内容に基づいて補完をフィルタリングします。
1
David Sýkora

私はこれがあなたが望むことをすると思います:

  zmodload zsh/complist
  setopt menucomplete
  zstyle ':completion:*' menu select=0 search

これにより、タブを押すとリストが表示され、続けて入力すると、説明を含む使用可能なオプションがインクリメンタル検索で検索されます。

同じ設定に興味があるかもしれませんが、検索ではなくインタラクティブです。その場合は、入力時に、これまでに入力したものと一致するものだけに、入力候補をフィルタリングします。

1
Thayne