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