我注意到 Zsh 中 source
命令的 Tab 补全试图补全很多文件。也许 $PATH 中的所有内容?我尝试使用一个空白的 .zshrc
文件以确保其中没有任何内容。
ubuntu% source d
zsh: do you wish to see all 109 possibilities (16 lines)?
我确实找到了这个似乎控制它的文件:/usr/share/zsh/functions/Completion/Zsh/_source
#compdef source .
if [[ CURRENT -ge 3 ]]; then
compset -n 2
_normal
else
if [[ -prefix */ && ! -o pathdirs ]]; then
_files
elif [[ $service = . ]]; then
_files -W path
else
_files -W "(. $path)"
fi
fi
如果我将最后一个“else”语句中的行从 _files -W "(. $path)"
更改为 _files
,它会按照我希望的方式工作。 Tab 补全只查看当前目录中的文件和目录。
似乎改变这个文件并不是最好的方法。我宁愿更改我的 .zshrc
文件中的某些内容。但是我对 Zsh 补全的了解有点缺乏,到目前为止我所做的搜索并没有让我找到答案。
答案 0 :(得分:1)
也许 $PATH 中的所有内容?
是的,没错。它提供这些,因为 source
将搜索您的当前目录 和您的 $PATH
以查找您传递的任何文件名。
要在不修改原始文件的情况下应用您的更改,请在调用 .zshrc
之后将其添加到您的 compinit
文件中:
compdef '
if [[ CURRENT -ge 3 ]]; then
compset -n 2
_normal
else
_files
fi
' source
这告诉完成系统使用您为命令 source
指定的内联函数(而不是默认函数)。
或者,要仅查看当前目录的文件完成情况,您可以输入
$ source ./<TAB>