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/bin
ZSHを再起動すると、突然スクリプトを認識し、完了が再び動作を開始することです。これで私の内部でもgrepできます。.zcompdump
今、なぜ何なのかわかりません。特に、同じディレクトリでrustup
完了が正常に機能するため、さらにそうです。cargo
私のドットファイルですべてのカスタムコンプリートを実行する方が便利なので、あまりにも多くの手動設定なしで他のコンピュータで使用できます。もちろん、私の内部に完了割り当てをハードコーディングできることを知っていますが、zshrc
これは一般的に移植性が低いです。fpath
これはおそらく私が見逃した小さな側面かもしれませんが、誰かが解決策を知っていることを願っています。
私のスクリプトコードのせいではないので、多くのコードを提供することはできません。 JFYI:私はManjaro Linuxを実行しています(事前定義されたZSH設定で確認しました)。
答え1
まあ、確かに私のせいです。
neovimで編集しzshrc
てポイントファイルへのパスを保持する変数を作成すると、neovimオートコンプリートは/
文字列の末尾に私が認識しない追加のスラッシュを追加します。この変数を部分文字列として使用して、完成スクリプトが格納されるディレクトリを追加し、fpath
不要な二重スラッシュを追加します。したがって、ZSHは間違ったディレクトリを検索しています。
唯一の奇妙なことは、forを完了しましたが、rustup
まだcargo
間違ったパスを使用していることです。しかし、それは問題ではありません...