zshの$ PATHキャッシュからオートコンプリートインデックス(または何と呼ばれる)とバイナリを再構築します。

zshの$ PATHキャッシュからオートコンプリートインデックス(または何と呼ばれる)とバイナリを再構築します。

新しいソフトウェアをインストールした後、zshで開かれた端末は新しいコマンドを知らず、そのコマンドに対してオートコンプリートを生成することはできません。明らかに新しい端末を開くと問題は解決しますが、オートコンプリート機能が既存の端末で機能するようにインデックス(または何と呼ばれる)を再構築できますか?

私は試しましたが役に立ちcompinitませんでした。また、シェルに依存しない方法はありますか?答えを確認する方法があれば良いでしょう(何かを削除して再インストールすることを除く)。

私は、コマンド名のいくつかの文字を入力してからキーを押してから、残りを実行してフルネームをTab抽出zshする必要があるということです。

答え1

実行可能なコマンドのキャッシュを書き換えるには、rehashまたはを使用しますhash -rf

このオプションを設定解除しないでくださいhash_list_all。これにより、ディスクアクセスの回数が減りますが、キャッシュの更新頻度が低くなります。

コマンドを入力したくない場合は、~/.zshrczshに次の行を入れて、操作が完了したときにキャッシュを信頼しないように指示できます。

zstyle ":completion:*:commands" rehash 1

パフォーマンスのコストはありますが、今日の一般的なデスクトップ設定では無視してもかまいません。 ($PATHNFSまたはRAMが不足しているシステムを使用している場合はそうではありません。)

コマンド自体はマニュアルページzstyleに文書化されています。zshmoduleスタイル値は、zshcompsysおよびzshcompwidマニュアルページに文書化されているか、ソースコードを読み取ることができます(_command_namesここでは関数のソースコード)。読むことができる文書が必要な場合は...見つけたら教えてください!

¹zsh≥4.3.3が必要です。ありがとうございます。クリス・ジョンソン

答え2

新しいコマンドの「引数の完了」操作に問題がある場合編むこれは必要なコマンドかもしれませんが、キャッシュメカニズムによって問題が発生する可能性があります。

私のバージョン(4.3.10)のドキュメントによると編む後続の呼び出しを高速化するために、キャッシュされた「ダンプファイル」を使用して.zcompdumpコンパイル完了機能を保存します。完了したファイル(またはで始まる要素ファイル)の数が変更された場合にのみfpathダンプファイルを無効にします。おそらく新しいソフトウェアをインストールすると、完成したファイルの数が変わります(他のソフトウェアもインストールすると仮定します)。#compdef …#autoload …扱いにくいcompinitオートコンプリートファイルが正しい場所にあります)簡単なことがうまくいくことを願っています。動作しない状況が発生した場合は、ダンプファイルをバイパスするか、ダンプファイルを手動で無効にする必要があります。

ダンプファイルの使用をスキップするにはを使用しますcompinit -D。これは現在のシェルにのみ影響します。

ダンプファイルを再設定するには、そのファイルを削除してもう一度実行してくださいcompinit

rm -i ${ZDOTDIR:-${HOME:?No ZDOTDIR or HOME}}/.zcompdump &&
compinit

これは、現在のシェル、プレーンを実行している既存のシェル、compinitおよび将来のすべてのシェルに影響します。

答え3

ファイルに存在する完成を処理/開発するときは、#compdef _foo fooすべての編集に以下を使用する必要があることがわかりました。

unfunction _foo && compinit

更新項目の表示コマンドを使用して、更新されたfoo変更を完了します。

関連情報