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