bash、zsh、Fishの完成ファイルを生成するツールがあります。私は通常zshを使用していますが、この完成ファイルをzshで操作することはできません。だから私はテストでfishをインストールし、fishの完成ファイルを作成しました。そして私は仕事に行くことができません。他のすべての完成はzshとFishでうまく機能するため、ツールが破損した完成ファイルを生成すると疑われます。完成ファイルで構文エラーを確認する方法はありますか?
答え1
私の答えには、zsh(「新しい」完成システムの使用、つまり呼び出し後compinit
)とbashが含まれています。魚については参照NotTheDr01dsの答え。
完成ファイルに構文エラーがある場合、完成コードが読み込まれるとエラーメッセージが表示されます。 Bashでは、/etc/bash_completion
ロード時にこれが発生します。 zshでは、完成関数が最初に呼び出されたときにこれが発生します。しかし、通事論エラーはほとんど発生しません。ほとんどのエラーは構文エラーではなく、完成関数を呼び出す以外に有効であることを確認する方法はありません。
完了の生成中に実際のエラーが発生すると、端末にエラーメッセージが表示されます。ただし、コードがエラーをトリガーしないが必要な完了を生成しない場合、エラーは表示されません。
最初にチェックする必要があるのは、目的の完成関数が実際に呼び出されるかどうかです。 zshの場合は確認してください。
echo $_comps[foo]
foo
オプション/引数を完了するコマンドはどこにありますか? bashの場合は確認してください。
complete -p foo
カスタム補完機能がロードされない場合は、次を参照してください。カスタムコマンドの動的zshオートコンプリートまたはカスタムbashタブの完了。
完了コードをデバッグするには、zshで実行する代わりに^X?
()を押します。Ctrl+X ?Tab_complete_debug
。これにより、完成したコードのトレースがをタップして表示できるファイルに書き込まれますUp Enter。
答え2
おそらく私が知らない技術があるかもしれませんが、これについては次fish
から始めます。
complete -c <appname>
...これまでにロードされた完成オプションを表示します。完了した項目がない場合は、現在空の状態になる可能性があります。
それから続けてください。
fish --debug=complete
stdoutで出力を表示できない場合(完了中にポップアップメッセージに問題がある可能性がある)、ログのファイル名を指定できます。
fish --debug='complete' --debug-output=/tmp/fish.log
<toolname>.fish
そして、完成関数はどこで生成されるのか知っていますか?それしなければならない私は信じています/usr/share/fish/vendor_completions.d/
。しかし、一部その他の場所検索完了機能。
この機能がある場合は、次のことを試すことができます<toolname>.fish
。
fish_trace=1 source /path/to/<toolname>.fish
答え3
完成ファイルで構文エラーを確認する方法はありますか?
ファイルの構文エラーを確認するには、そのファイルを実行できますfish --no-execute
。例えば
fish --no-execute /path/to/file.fish
しかし、これはcomplete
ドアの内部を見ていません。例えば
complete -c mycommand --condition 'banana; && rama' --short f
&& rama
後で要求が完了すると、評価される文字列内にあるため、文句はありません。
偽のコマンドラインを使用して完成を実行する方法は次のとおりですcomplete --do-complete
。例えば
complete --do-complete="mycommand someoption"
これにより、コマンドラインに対してフィッシュが生成した完成候補が印刷されますmycommand someoption
。