有没有办法验证完成文件?

Ton*_*sen 2 zsh autocomplete fish

我有一个工具可以为 bash、zsh 和 Fish 创建完成文件。我通常使用 zsh,但我无法让这个完成文件在 zsh 上工作。因此,作为测试,我安装了fish并为fish创建了完成文件。还有那个我无法上班。所有其他补全在 zsh 和 Fish 中都工作正常,因此我怀疑该工具创建了损坏的补全文件。有没有办法检查完成文件的语法是否有错误?

Gil*_*il' 6

我的答案涉及 zsh (使用 \xe2\x80\x9cnew\xe2\x80\x9d 完成系统,即调用后compinit)和 bash。对于鱼,请参阅NotTheDr01ds的回答

\n

如果完成文件中存在语法错误,则在加载完成代码时您将看到一条错误消息。在 bash 中,这种情况发生在/etc/bash_completion加载时。在 zsh 中,这是第一次调用完成函数时发生的。但语法错误很少见。大多数错误都不是语法错误,除了调用补全函数之外,没有其他方法可以检查它是否有效。

\n

如果在生成补全时发生实际错误,您将在终端上看到一条错误消息。但是,如果代码没有触发错误,但没有生成所需的完成,则不会显示错误。

\n

首先要检查的是您想要的完成函数是否实际被调用。对于 zsh,请检查

\n
echo $_comps[foo]\n
Run Code Online (Sandbox Code Playgroud)\n

其中foo是要完成其选项/参数的命令。对于 bash,请检查

\n
complete -p foo\n
Run Code Online (Sandbox Code Playgroud)\n

如果您的自定义完成功能未加载,请参阅自定义命令的动态 zsh 自动完成或自定义 bash 选项卡完成

\n

如果要调试完成代码,请在 zsh 中按^X?( Ctrl+X ?) 而不是Tab运行_complete_debug。这会将完成代码的跟踪记录到一个文件中,您可以通过按 查看该文件Up Enter

\n