osx bash completion 补全

在 linux 下补全的配置一般发行版都给默认配了,原本以为在 OSX 下用 brew 装个 bash-completion 包,再在 bashrc 下贴两行配置也就搞定了,没想到不行,OSX 下 bash-completion 包有两个,另一个是 bash-completion@2,这两个包分别对应 bash 的两个版本,具体可以用 brew info bash-completion@2 来看。

而且 bash-completion@2bash-completion 相比还要多一行配置,总之就是需要下面两行配置才行,原因是大多软件包都只提供了旧版本的 completion 文件,新版的没有提供支持,所以下面的第一行就是声明要兼容下旧的补全文件:

1
2
export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"

除此之外还有个问题,我自己设置了很多别名 alias,但是这些自定义的别名默认是不支持参数补全的,想要如丝般顺滑就要用另一个项目:https://github.com/cykerway/complete-alias,具体的使用方法就不赘述了,可以去项目里看看怎么配置。

经过实践发现这个项目也不支持旧版的 bash-completion 包,会提示 _completion_loader 找不到的错误,改装 bash-completion@2 就好了。