我编写了一个位于当前目录中的小 shell 脚本,并像这样调用它:./import <command> <file>
。当我尝试使用 tab 来完成文件名时,zsh
只会发出哔哔声。
ls
但是,我可以使用类似或 的命令完成同一个文件zip
。在下面的示例中,我在输入 后按下 Tab 键../S
:
% ./import capitalone ../S<BEEP>
% ls ../Source\ Docs/ (no issue)
% zip ../Source\ Docs/ (no issue)
我尝试在 Google 上搜索这个问题的答案,但我发现的都是其他类型的制表符补全问题。我还尝试阅读 zsh 补全手册,但发现它非常复杂,而且答案可能是什么并不是一目了然的。
更新:添加了一些请求的调试输出:
% ./import asdf ./
tags in context :completion::complete:import::
options (_arguments _x_arguments _imagemagick)
messages (_message _arguments _x_arguments _imagemagick)
tags in context :completion::complete:import:options:
options (_arguments _x_arguments _imagemagick)
答案1
这嘚补全系统非常强大,因为它不仅可以补全文件名,还可以补全命令的参数。例如,尝试一下ls -<TAB>
。
但是,就你的情况而言,嘚正在尝试完成import
命令的参数,这显然属于图像魔法包,如调试输出所示:
tags in context :completion::complete:import:options:
我认为有三种可能性:
将您的命令重命名为不会触发特殊完成的名称,例如
my_import
。import
使用以下命令禁用完成:compdef -d import
请注意,你需要将其放入你的嘚配置(最有可能
~/.zshrc
)以使其永久化。编写您自己的完成函数,专门针对您的
import
命令......;)