如何为oh-my-zsh插件添加额外的自定义自动补全功能
oh-my-zsh 自定义Tab补全实现方案
zsh原生的补全框架完全支持在现有补全能力上追加自定义项,和alias机制完全无关,不存在别名无法适配带空格命令场景的问题,也不会覆盖oh-my-zsh默认插件提供的原有补全规则,具体实现步骤如下:
前置准备
oh-my-zsh默认预留了自定义补全的加载目录,先执行命令创建目录(如果已存在可以跳过):mkdir -p ~/.oh-my-zsh/custom/completions
编写补全脚本
zsh的补全脚本遵循固定命名规则:文件名格式为_<对应命令名>,存放在上述目录中就会被自动识别加载。
针对你要给mvn命令新增build补全项的需求,在目录下新建_mvn文件,写入以下内容:
#compdef mvn # 先加载mvn原有的补全逻辑,不覆盖默认能力 if (( $+functions[_mvn] == 0 )); then _completion_loader mvn fi # 自定义新增的补全项,格式为「补全内容:补全提示说明」 local -a custom_ops custom_ops=( 'build:执行项目全量构建流程' # 后续要新增其他补全项,直接按格式往这个数组追加即可 ) # 匹配命令输入状态,合并原有补全和自定义补全 _arguments -C '1: :->cmd' '*::arg:->rest' case $state in cmd) _mvn 2>/dev/null _describe 'custom mvn commands' custom_ops ;; rest) _mvn 2>/dev/null ;; esac
生效配置
执行以下命令将自定义补全目录加入zsh的函数搜索路径,清除缓存后重新加载补全规则:
# 将补全目录加入函数搜索路径,写入配置永久生效 echo 'fpath=(~/.oh-my-zsh/custom/completions $fpath)' >> ~/.zshrc # 清除旧的补全缓存 rm -f ~/.zcompdump* # 重新加载zsh配置 source ~/.zshrc
验证效果
配置完成后,在终端输入mvn (末尾带空格)按下Tab键,就能在补全列表中看到新增的build选项,选中即可自动完成补全,原有mvn的补全项不会受任何影响。
扩展说明:如果需要给其他命令新增自定义补全,只需要在
~/.oh-my-zsh/custom/completions目录下新建对应命名的补全脚本,按照相同逻辑追加补全项即可;如果需要给自定义子命令配置参数补全,也可以在脚本的case分支中扩展对应规则。
内容的提问来源于stack exchange,提问作者Venu
相关产品推荐
相关产品推荐

