跳到正文
未明观测
返回

Bash 和 Zsh Completion 脚本的最佳实践

编辑此页

命令行工具越来越多之后,自动补全几乎就是基础设施。如果补全脚本放得不对,最常见的问题不是“不能用”,而是 shell 启动越来越慢。

这篇文章只讲一个核心问题:在 Bash 和 Zsh 里,补全脚本到底该放哪。

Bash 的推荐位置

用户级最标准的位置是:

~/.local/share/bash-completion/completions/

这里的规则很严格:

例如程序名是 zeroclaw,那文件名就应该直接叫:

~/.local/share/bash-completion/completions/zeroclaw

生成方式通常像这样:

mkdir -p ~/.local/share/bash-completion/completions
zeroclaw completions bash > ~/.local/share/bash-completion/completions/zeroclaw

为什么不推荐 source <(...)>

很多工具都会给你一个“快速启用”的写法:

source <(tool completions bash)

它能用,但更像临时测试方案。原因很简单:

而放到 bash-completion 的标准目录里,通常是按需加载,启动成本更低。

Bash 怎样立即生效

最简单的方法就是重新打开一个终端。如果想在当前 shell 里手动生效:

. /usr/share/bash-completion/bash_completion

验证时可以直接按两次 Tab 看结果:

zeroclaw <Tab><Tab>
zeroclaw completions <Tab>

Zsh 的推荐位置

Zsh 和 Bash 的命名习惯不一样。标准文件名通常是“下划线 + 命令名”:

~/.local/share/zsh/site-functions/_zeroclaw

也可以放到自定义目录,比如:

~/.zsh/completions/_zeroclaw

但前提是你要把这个目录加进 fpath

Zsh 的基础配置

~/.zshrc 中加入:

fpath=(~/.local/share/zsh/site-functions $fpath)
autoload -Uz compinit
compinit

然后生成补全文件:

mkdir -p ~/.local/share/zsh/site-functions
zeroclaw completions zsh > ~/.local/share/zsh/site-functions/_zeroclaw

重新打开终端或执行 exec zsh,通常就能生效。

命名规则别混

这部分最容易出错:

不要把 Bash 的命名方式拿去给 Zsh 用,也不要反过来。

一套够用的判断标准

如果你只是想判断“我现在这套做法是否合理”,可以用这几条:

只要这几项都满足,这套补全安装方式通常就已经够稳了。

一句话总结

补全脚本的最佳实践不是“能跑就行”,而是“长期用下来不添启动负担”。对 Bash 和 Zsh 来说,把脚本放到它们默认理解的位置,通常就是最省心的解法。


编辑此页
Share this post on:

Previous Post
Git Fork + Rebase 操作流程
Next Post
Linux 持久化挂载磁盘