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

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

魚をいじっていたら、この便利な動作に気づきました

と入力するとwget -<tab><tab><tab>、対話型メニューが表示されます。ただし、 と入力すると、引数自体の説明が検索されます。これを zsh で試してみましたが、このメニューに入力すると対話型プロンプトに戻るだけのようでした。zsh で同様の機能を実現する方法はありますか?

答え1

これをファイルに入れてみます.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後方検索を定義することもできます
  • ?検索中にもう一度押すと、次の検索結果にジャンプします。/前の検索結果にジャンプするには、これを使用します。
  • 希望通りに動作させるには多くの調整が必要なので、complist ドキュメンテーション追加の機能とオプションを見つけるには
  • 私の場合は、vi-insert入力内容に基づいて補完をフィルタリングする complist 関数を使用する方が通常ははるかに速くなります。

答え2

これがあなたの望みを実現すると思います:

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

これにより、Tab キーを押すとリストが表示され、入力を続けると、説明を含む利用可能なオプションが増分検索で検索されます。

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

関連情報