更改默认的 Zsh 完成功能
Changing a default Zsh completion function
我注意到 Zsh 中 source
命令的制表符补全会尝试补全大量文件。也许一切都在 $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 完成的知识有点缺乏,到目前为止我所做的搜索并没有让我找到答案。
Maybe everything in $PATH?
是的,没错。它提供了这些,因为 source
将搜索您当前的目录 和 您的 $PATH
以查找您传递给它的任何文件名。
要在不修改原始文件的情况下应用您的更改,请将此添加到您的 .zshrc
文件 after 调用 compinit
:
compdef '
if [[ CURRENT -ge 3 ]]; then
compset -n 2
_normal
else
_files
fi
' source
这告诉完成系统使用您为命令指定的内联函数source
(而不是默认函数)。
或者,要仅查看当前目录的文件补全,您可以键入
$ source ./<TAB>
我注意到 Zsh 中 source
命令的制表符补全会尝试补全大量文件。也许一切都在 $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 完成的知识有点缺乏,到目前为止我所做的搜索并没有让我找到答案。
Maybe everything in $PATH?
是的,没错。它提供了这些,因为 source
将搜索您当前的目录 和 您的 $PATH
以查找您传递给它的任何文件名。
要在不修改原始文件的情况下应用您的更改,请将此添加到您的 .zshrc
文件 after 调用 compinit
:
compdef '
if [[ CURRENT -ge 3 ]]; then
compset -n 2
_normal
else
_files
fi
' source
这告诉完成系统使用您为命令指定的内联函数source
(而不是默认函数)。
或者,要仅查看当前目录的文件补全,您可以键入
$ source ./<TAB>