新しいソフトウェアをインストールした後、zshで開かれた端末は新しいコマンドを知らず、そのコマンドに対してオートコンプリートを生成することはできません。明らかに新しい端末を開くと問題は解決しますが、オートコンプリート機能が既存の端末で機能するようにインデックス(または何と呼ばれる)を再構築できますか?
私は試しましたが役に立ちcompinit
ませんでした。また、シェルに依存しない方法はありますか?答えを確認する方法があれば良いでしょう(何かを削除して再インストールすることを除く)。
私は、コマンド名のいくつかの文字を入力してからキーを押してから、残りを実行してフルネームをTab抽出zsh
する必要があるということです。
答え1
実行可能なコマンドのキャッシュを書き換えるには、rehash
またはを使用しますhash -rf
。
このオプションを設定解除しないでくださいhash_list_all
。これにより、ディスクアクセスの回数が減りますが、キャッシュの更新頻度が低くなります。
コマンドを入力したくない場合は、~/.zshrc
zshに次の行を入れて、操作が完了したときにキャッシュを信頼しないように指示できます。
zstyle ":completion:*:commands" rehash 1
パフォーマンスのコストはありますが、今日の一般的なデスクトップ設定では無視してもかまいません。 ($PATH
NFSまたは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
変更を完了します。