zshで完了リストを動的に更新する


13

Tab完了のためのzshの結果リストは非常に便利ですが、その動作を少し調整したいと思います。

それらはTab、初めて追加されたときに表示され、その後、新しい文字が追加されるたびに動的に更新されます。デフォルトの動作では、提案は再評価されたときにのみ再評価されますTab。この繰り返しのキー押下を保存します。(更新:ただし、可能な補完のみをリストします。オプションが1つしか残っていなくても、実際のプロンプト行が自動的に変更されることはありません。)

そのような行動を達成する方法はありますか?


zshの動作をカスタマイズするのに非常に深く取り組むことができます。正確に何が起こるべきですか?現時点では、この質問は、最初のTABの後にキーを押すたびに選択肢をリストしたいようですが、実際には何も完了しません。キーを押すたびに、TABが続いたように動作する必要がありますか?これは、意図しない完了のためにかなりのバックスペースを意味することに留意してください。
ペス

@ user112553最初のオプション:その意味では、実際には繰り返しTABのように動作するべきではありません。提案リストを動的に調整したいだけです。
F30

回答:


2

あなたが望む解決策を提供するかもしれない1つの方法は、incremental-complete-word次のとおりです。

zle -N incremental-complete-word
bindkey '^Xi' incremental-complete-word

これにより、関数がロードされ、Ctrl-にバインドされX iます。今、あなたはそれを試すことができます:

> k^Xi
incremental (complete): -no prefix-

この例では、文字kが入力され、続いてControl-X iが入力されました。

> kil
incremental (complete): kill       

入力ilしましたが、1つの可能な補完がありました(kill)。それを受け入れてEnterキーを押します。

> kill^D
incremental (complete): -no prefix-
- external command -
kill      killall   killall5

次のように入力してCtrl- Dzshの番組補完。

からzshcontrib(1)

incremental-complete-word
これにより、単語の増分補完が可能になります。このコマンドを開始すると、入力するすべての文字の後に補完の選択肢のリストが表示され、^Hまたはで削除できますDEL。returnを押すと、これまでの完了が受け入れられ、通常の編集に戻ります(つまり、コマンドラインはすぐには実行されません)。ヒットTABすると、正常に完了し、 ^G 開始時の状態にアボートして^D、一致するものをリストできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.