zsh カスタム完了ファイルソースが無効です。

zsh カスタム完了ファイルソースが無効です。

ZSHでカスタムスクリプトを完了すると奇妙な動作が発生し、いくつかのアイデア、何が間違っているか、回避策が必要です。

私はいくつかのカスタムスクリプトを作成し、対応するmyscript完成スクリプトを作成しました_myscript。後者はいつものように次の行で始まります。 (#compdef myscriptまた#compdef _myscript myscript同じ結果で試みた)。始めるには、私のディレクトリにこれらの2つのファイルがありまし~/.local/bin$PATH$fpath

今まではそんなに良くなった。コマンドが完了すると、すべてがうまく機能しますmyscript。しかし、私はこれら2つのファイルを私のフォルダに移動しました。.dot ファイルそのGitリポジトリを介して共有してください。マイドットファイルには、完了スクリプト用のフォルダが含まれています$fpath。このフォルダもマイドットファイルのサブディレクトリに移動すると、完了操作が停止します。

.zcompdump更新完了の割り当てを削除し、別の構文をテストして私のディレクトリを追加しましたが、私は役に立ちません$fpathでした。また、すべての割り当てが実行された後に呼び出されることを確認するために、削除後に手動compinitで呼び出します。.zcompdump

rustup最初の奇妙なことは、dotfileディレクトリ内の他の完了スクリプトがmyおよびコマンドの完了スクリプトも含むため、ZSH完了システムで認識されることですcargo。別の手順を試した後にgrepを実行すると、.zcompdump常に2つのコマンドの割り当てが表示されますがmyscript

2番目の奇妙な動作は、完了スクリプトをディレクトリに戻して~/.local/binZSHを再起動すると、突然スクリプトを認識し、完了が再び動作を開始することです。これで私の内部でもgrepできます。.zcompdump

今、なぜ何なのかわかりません。特に、同じディレクトリでrustup完了が正常に機能するため、さらにそうです。cargo私のドットファイルですべてのカスタムコンプリートを実行する方が便利なので、あまりにも多くの手動設定なしで他のコンピュータで使用できます。もちろん、私の内部に完了割り当てをハードコーディングできることを知っていますが、zshrcこれは一般的に移植性が低いです。fpathこれはおそらく私が見逃した小さな側面かもしれませんが、誰かが解決策を知っていることを願っています。

私のスクリプトコードのせいではないので、多くのコードを提供することはできません。 JFYI:私はManjaro Linuxを実行しています(事前定義されたZSH設定で確認しました)。

答え1

まあ、確かに私のせいです。

neovimで編集しzshrcてポイントファイルへのパスを保持する変数を作成すると、neovimオートコンプリートは/文字列の末尾に私が認識しない追加のスラッシュを追加します。この変数を部分文字列として使用して、完成スクリプトが格納されるディレクトリを追加し、fpath不要な二重スラッシュを追加します。したがって、ZSHは間違ったディレクトリを検索しています。

唯一の奇妙なことは、forを完了しましたが、rustupまだcargo間違ったパスを使用していることです。しかし、それは問題ではありません...

関連情報