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


8

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

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


私は長い間これを行う方法を知りたいと思っていました。標準のキーワード補完(オプションではない)に関しては、vimは補完を構成してラインバッファーにフォーカスを維持できるようにします。そのため、補完リストが長すぎる場合は、入力を続けるだけで、リストは自然にフィルターで絞り込まれます。しかし、zshはすぐにフォーカスをメニュー選択ウィジェットに切り替えます
the_velour_fog 2017年

あなたが説明している行動が理解できません。これは、オプション名ではなくオプションの説明を検索することですか?それとも、選択肢をナビゲートする方法についてですか?どのメニューを参照していますか(zshには補完のためのさまざまな設定があります)?
Gilles 'SO-悪をやめる'

@Gillesええ、それを使用してオプションの説明、またはオプション名自体を検索できます。私が参照しているメニューは、コマンドとダッシュを入力してから、Tabキーを2回押すと表示されます。たとえば、入力ls -<tab><tab>するとメニューに入り、さまざまなオプションを上下にスクロールできます。魚では、入力することができます。これにより、これらのオプションとその説明が検索されます。私はzshで同様の機能を実現したいと思っています。
オリエン

私はまだあなたが正確に何を意味するのかわからない。あなたが望むのはインタラクティブでしょうか?つまり、矢印と強調表示オプションを使用してリストから選択できますか?In fish, I'm able to type, which will then search these options and their descriptions.zshで「これらのオプションとその説明を検索」できると言います。たとえばls --h<tab>、で始まるオプションを検索し、--h4つの一致をリストします。
Sparhawk 2017年

このスクリーンショットを見てください。入力するls -size<tab>と、zshのオプションとしてls --block-sizeとls --sizeが表示されます。ただし、fishは--size、-tabsize、-k、-S、-block-size、および--human-readableを推奨しています。私はzshで同様の機能を実現したいと思っていました。コマンド名だけでなく、説明も検索します
ollien

回答:


1

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

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

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

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


うーん... wget -<tab>no入力しても補完リストはフィルターされません。これ--accept-regex=は、完了リストの最初のオプションであるの後、ターミナルに「no」と入力し続けるだけです。
オリエン

1
ええと、それは私のために起こっていることではありません。しかし、実際には検索オプションに適していません。可能性のあるものを介してインクリメンタル検索を実行するだけです
Thayne

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-insertcomplist関数を使用する方がはるかに高速です。入力した内容に基づいて補完をフィルター処理します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.