Zsh如何限制FILE文件补全仅匹配当前目录(对齐Bash补全行为)
Zsh source命令补全对齐Bash的配置方案
ls与source补全逻辑差异
Zsh的补全系统采用命令维度的规则绑定机制,不同命令默认匹配的检索范围完全不同:
- 对
ls这类通用文件操作命令,默认绑定普通文件补全规则_files:仅检索用户输入路径对应的目录,无路径前缀时仅匹配当前工作目录下的文件,因此输入ls co按Tab只会补全当前目录的common.sh,行为和Bash一致。 - 对
source(以及等效的.命令),Zsh默认绑定的是命令/可执行脚本补全规则:除当前目录外,还会遍历$PATH环境变量下的所有路径,匹配所有前缀符合的可执行文件、脚本,因此会弹出大量非当前目录的匹配结果。
对齐Bash补全行为的配置方法
要让source补全时仅检索当前目录(及手动输入的路径对应位置),只需手动覆盖source和.命令的补全规则即可,步骤如下:
- 编辑Zsh用户配置文件:
vim ~/.zshrc
- 在文件末尾添加以下两行配置,将两个命令的补全规则绑定为普通文件补全:
compdef '_files' source compdef '_files' .
- 保存退出后,重载配置生效:
source ~/.zshrc
配置完成后测试:当前目录仅存在common.sh时,输入source co按Tab会直接补全为source common.sh,不会再返回$PATH下的其他无关匹配项,和Bash补全行为完全一致。
内容的提问来源于stack exchange,提问作者JL Peyret
相关产品推荐
相关产品推荐

