更改默认的 Zsh 完成功能

时间:2021-06-01 14:44:06

标签: zsh zsh-completion

我注意到 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 补全的了解有点缺乏,到目前为止我所做的搜索并没有让我找到答案。

1 个答案:

答案 0 :(得分:1)

<块引用>

也许 $PATH 中的所有内容?

是的,没错。它提供这些,因为 source 将搜索您的当前目录 您的 $PATH 以查找您传递的任何文件名。

要在不修改原始文件的情况下应用您的更改,请在调用 .zshrc 之后将其添加到您的 compinit 文件中

compdef '
if [[ CURRENT -ge 3 ]]; then
  compset -n 2
  _normal
else
  _files
fi
' source

这告诉完成系统使用您为命令 source 指定的内联函数(而不是默认函数)。

或者,要仅查看当前目录的文件完成情况,您可以输入

$ source ./<TAB>
相关问题