TAB キーを押すまで zsh パス補完魔法が発生しないようにするにはどうすればよいですか?

TAB キーを押すまで zsh パス補完魔法が発生しないようにするにはどうすればよいですか?

私は複数のUSBハードドライブを含む趣味のサーバーを持っています。これらのドライブは、必要に応じて素早くアクセスできる基本的なコールドストレージなので、積極的な電源管理と短いスピンアップタイムアウトを有効にしました。そのため、ほとんどはアクセスが必要になるまでAPMの待ち時間の99.9%を消費します。 。

ZSH完成システムはこれに関して私に頭痛を与えます。なぜなら、それが提供するオートコンプリート機能はかなりクールです。TABを押さなくても、シェルコマンドをナビゲートするために矢印を使用しても、自動化されたパスの種類を実行するからです。履歴キー。

たとえば、次のように入力し、rsync上キーを押して前のコマンドのrsync履歴を確認し、魔法が完了したらすぐにそのコマンド内のファイルシステムパスにアクセスして魔法の操作を確認して実行します。これにより、zshがブロックされ、応答しない大規模な一時停止が発生するだけでなく、休止状態ドライブを回転させ、そのスピナーの摩耗を増やします。すべてのネットワークインストールパスは、ネットワークの特性によって遅延が発生する可能性があります。

パスを作成するときにも機能します。文字、スラッシュ、ワイルドカードを入力するだけです。

似たような不満がたくさん見えましたが、このようにしかし、この問題を正確に解決する方法が見つかりませんでした。

上記の投稿にはzsh Completion Systemのドキュメントへのリンクがあり、それを読んでいる間はまだ混乱していました。文書を見ると、構文が何なのかもわからないし、多くのzstyle用語のために混乱している。

基本的に私はzshに次のように言う方法を探しています。 「聞いて、私はあなたがすることが好きですが、あなたのすべての魔法を使い、私がTABキーを押すまで待つことができますか?」

ベストアンサー1

Zshは、「一般」構成でTabキーを押さない限り、いかなる種類の完了魔法も実行しません。可能ですが、いくつかの深刻な拡張が必要です。

zsh構成フレームワークを使用している場合は、おそらくこの機能が標準で提供されます。無効にする方法を見つけるには、zsh自体のドキュメントではなく、そのフレームワークのドキュメントを見つける必要があります。

この機能の説明に基づいてラインエディタ何らかの方法でカスタマイズされたでしょう。この動作を実行するためにどこかにフックを定義できるのか、それとも自己挿入をオーバーライドする必要があるのか​​わかりません。主な入札リストを作成bindkeyし、目立つものがあることを確認してください。たぶんあなたが得るものと比較することができます(これは他の設定ファイルをzsh -f読み取らずにzshを起動します)。.zshrc

何が起こっているのか混乱している場合は、実行されているすべてのコマンドをファイルに書き込むように指示できます。 (set -x端末には単純なログがありますが、実際に使用するには多すぎるようです。)

exec 2>zsh.log; set -x

キャンセル:

set +x; exec 2>/dev/tty

完了プロセスを追跡するには(完了していないシーンで完了などのアクションをトリガーするのではなく)、次のコマンドを実行できます。_complete_debug^X?デフォルトではバインドされています)を押すのではなくTab

zsh文書は読みにくいです。実行したい操作に近い例を見つけて、必要なコマンド/変数/関数/...を見つけたら、ドキュメントを調べることをお勧めします。これzstyleドキュメントはどのように機能するかを説明しますが、完成システムで使用される方法を理解するには理解する必要があります。使用された zstyle コンテキストの完成構文、それがどこで使用されているかを知るには、それを使用する関数のドキュメントを見つけるか、時々ソースコードを読む必要があります。とにかく、問題を解決するためにzstyleについて何も知る必要はありません。完了設定だけでは、完了外の自動動作をトリガーできません(おそらく、自動動作は完了を模倣し、その設定を再利用できますが、まったくそうではありません)。行エディタは少し、おそらくいくつかのカスタムキーバインディングを設定する必要があります。

おすすめ記事