zshの完了方法のデバッグ

zshの完了方法のデバッグ

完了方法をデバッグしようとしています。この方法では、3つのフォルダ内のすべてのディレクトリが表示されます。 compinitが正しくロードされたことを確認しました。追跡しようとしましたが、ほとんどを復号化できませんでした。

これは私の完成機能です

#compdef c

_files -W $PROJECT/repos -/
_files -W $PROJECT/helm -/
_files -W ~/Code -/

そして関数自体、c

#!/bin/zsh

cd "$PROJECTS/$1"

私は何も得られません。 _filesに最初に何が含まれているかを調べるためにこれをデバッグする方法がわかりません。

答え1

実行の代わりに^X?()を押します。Ctrl+X ?Tab_complete_debug。これにより、完成したコードのトレースがをタップして表示できるファイルに書き込まれますUp Enter


または、デバッグ中に特定の関数のトレースを生成するには、関数の先頭に以下を追加して実行トレースを取得します。

setopt local_options xtrace

トレースは非常に冗長なので、端末ではなくファイルに保存する方が良いかもしれません。これを行うには、コードをヘルパー関数に入れて、その関数のstderrをリダイレクトします。

#compdef c

function _c_do_complete {
  _files -W $PROJECT/repos -/
  _files -W $PROJECT/helm -/
  _files -W ~/Code -/
}

function _c {
  setopt local_options xtrace
  _c_do_complete 2>|~/_c.trace
}

_c "$@"

$PROJECT完了コードにはありますが、関数にあります$PROJECTS(実際にはスクリプトなので、スクリプトにのみあることは意味がありません。何もしませんcd)。それ以外はコードが非常に合理的に見えます。

関連情報