调试zsh补全方法

调试zsh补全方法

我正在尝试调试完成方法。此方法应该显示这三个文件夹中的所有目录。我验证 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单独在脚本中是毫无意义的。)除此之外,您的代码对我来说看起来很合理。

相关内容