我无法找到一种方法来搜索此内容并查看互联网上是否已经对此进行了解释。
我在命令行中有以下内容,我想<TAB>
在末尾点击以开始文件完成:
mycmd process file=data/old/1/
当我使用 Bash 时,该 TAB 会向我显示文件夹中的文件1/
,但使用 Zsh 时,除非我在符号后输入空格,否则不会发生这种情况=
。我可以重新配置 Zsh 来做到这一点吗?
答案1
setopt magic_equal_subst
这适用于旧式和新式完成,即带或不带compinit
.
之后的文件名完成=
是一个模糊且未记录的副作用magic_equal_subst
选项。该选项的记录效果是启用文件名扩展后=
。
大多数时候,如果您注意到此选项的效果,那么这是一个理想的效果,例如
somecommand --option=~/file
将主目录下的路径传递给somecommand
,而不是名为 的目录中的路径~
。然而,这也会产生通常不希望的效果,即参数==
触发文件名扩展:
somecommand foo==bar
如果在at中找到foo=/bin/bar
该命令,则通过。如果你想按字面意思传递给命令,至少需要引用一个等号,例如bar
$PATH
/bin/bar
==
somecommand foo=\=bar
somecommand foo\==bar
在新型完成系统中,这是在内部处理的_default
。如果您想在=
不启用后获得文件名补全magic_equal_subst
,则需要覆盖或环绕_default
以获得相同的效果。例如:
autoload +X -U _default
functions[_default]="setopt local_options magic_equal_subst; $functions[_default]"