更改默认的Zsh完成函数

更改默认的Zsh完成函数,zsh,zsh-completion,Zsh,Zsh Completion,我注意到Zsh中source命令的tab completion试图完成许多文件。也许是$PATH中的所有内容?我尝试使用一个空白的.zshrc文件来确保里面没有任何东西 ubuntu% source d zsh: do you wish to see all 109 possibilities (16 lines)? 我确实发现这个文件似乎控制着它:/usr/share/zsh/functions/Completion/zsh/\u source #compdef源代码。 如果[[当前-ge

我注意到Zsh中
source
命令的tab completion试图完成许多文件。也许是$PATH中的所有内容?我尝试使用一个空白的
.zshrc
文件来确保里面没有任何东西

ubuntu% source d
zsh: do you wish to see all 109 possibilities (16 lines)?
我确实发现这个文件似乎控制着它:
/usr/share/zsh/functions/Completion/zsh/\u source

#compdef源代码。
如果[[当前-ge 3]];然后
compset-n2
_正常的
其他的
如果[[-prefix*/&&!-o pathdirs]];然后
_档案
elif[$service=.]];然后
_文件-W路径
其他的
_文件-W“(.$path)”
fi
fi
如果我将最后一个“else”语句中的行从
\u files-W”(.$path)
更改为
\u files
,它将按照我希望的方式工作。“完成”选项卡仅查看当前目录中的文件和目录

看来修改这个文件不是最好的办法。我宁愿更改
.zshrc
文件中的某些内容。但是我对Zsh补全的知识有点缺乏,我到目前为止所做的搜索还没有找到答案

也许是$PATH中的所有内容

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

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

compdef'
如果[[当前-ge 3]];然后
compset-n2
_正常的
其他的
_档案
fi
"来源:
这告诉完成系统使用您为命令
指定的内联函数(而不是默认函数)

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

$source/

看起来我根本没有在
.zshrc
文件中调用
compinit
。那该怎么称呼呢?啊,没关系。我只是把
compinit
放在那个块之前,它就工作了。非常感谢。例如,如果您使用的是Oh My Zsh或Ubuntu,则
compinit
将自动调用,您不需要手动调用。我使用的似乎也是自动调用的。我不这么认为: