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