如何不修改系统文件自定义Zsh中source命令的默认补全规则
解决方法
你不需要修改系统级的补全配置,只需要在~/.zshrc中自定义source命令的补全逻辑,覆盖系统自带的规则即可:
- 打开
~/.zshrc文件,在compinit命令执行前,加入如下配置:
# 自定义source命令补全规则,仅匹配当前目录下的文件/目录 _source() { if [[ CURRENT -ge 3 ]]; then compset -n 2 _normal else if [[ -prefix */ && ! -o pathdirs ]]; then _files elif [[ $service = . ]]; then # 如果希望.命令(source的简写)也仅补全当前目录,可将下行改为 _files _files -W path else _files fi fi } # 绑定补全规则到source和.命令 compdef _source source .
- 保存文件后执行
source ~/.zshrc即可生效。
原理解释
zsh的补全规则优先级为:用户自定义的compdef绑定 > 系统自带的补全函数。你自己定义的_source函数会完全覆盖系统路径下/usr/share/zsh/functions/Completion/Zsh/_source的逻辑,既不需要修改系统文件,也不会受zsh版本更新影响。
如果后续你想恢复默认补全逻辑,只需要删除上面添加的配置,重新加载zsh即可。
内容的提问来源于stack exchange,提问作者Andrew Lamarra
相关产品推荐
相关产品推荐

