我尝试运行的程序采用表单program_name --arg=/some/path/goes/here
,但当它位于参数标志中时,zsh 无法在该路径上执行制表符完成。我最终不得不输入progra<TAB> /so<TAB>/pa<TAB>...
以完成路径,然后返回添加--arg=
命令的一部分。有没有更有效的方法来做到这一点?
问问题
220 次
1 回答
0
在您的情况下,zsh 可能仍在尝试完成文件完成,它只是考虑将--arg=
其作为文件名的初始部分,导致它找不到任何匹配项。由于对于命令如何解释它们的参数没有任何通用规则,因此最安全的选择是 shell 不对这些参数做出任何假设。
如果您使用空格而不是符号,许多使用该类型语法的命令的工作方式相同=
,例如program_name --arg /some/path/goes/here
. 由于这将是一个单独的参数,因此 shell 应该能够毫无问题地完成文件。
根据您配置 zsh 的方式,它也可以使用setopt MAGIC_EQUAL_SUBST
. 我通常设置了该选项并获得您正在寻找的行为,但是如果我取消设置该选项,则会获得您当前遇到的行为。但是,如果我使用zsh -f
跳过加载我的配置仅启用该选项是不够的,那么我的配置中显然还有其他必要的东西,可能只是启用您可能已经完成的完成系统。在某些情况下,这会导致不良行为,但多年来我一直在使用带有该选项集的 zsh 并没有遇到任何情况。
一个更复杂的选项是为该命令编写一个完成函数,告诉 zsh 该选项将文件名作为参数。
于 2013-05-31T19:57:32.117 回答