自定义 zsh 实现命令自动补全
为提高某些高频操作的操作效率,本文记录我给一个自定义命令添加参数自动补全的方法。
应用场景
以 zsh 命令 gmt
为例,它可以执行以下操作:
- 切换至目标分支
- 拉取最新更新
- 提示是否将当前分支合并入目标分支
本质上,gmt
集成了 git checkout
、git pull
和 git merge
的功能。
优化目标
- 输入
gmt
后按 Tab 键,显示所有本地 Git 分支 - 键入分支名前缀后按 Tab 键,自动补全匹配的分支名
实现方案
在 Zsh 配置文件中添加如下代码:
compdef _git_merge_to_comp git_merge_to
_git_merge_to_comp()
{
local -a git_branches
git_branches=("${(@f)$(git branch --format='%(refname:short)')}")
_describe 'branch' git_branches
}
注:
git_merge_to
为自定义函数,gmt
是其别名。
代码注释:
-
compdef
将_git_merge_to_comp
注册为git_merge_to
的补全函数 -
git_branches
变量使用 Zsh 数组展开语法,存储本地分支列表 -
_describe
生成补全候选项
注意事项
- 确保
git_merge_to
函数已正确定义 - 将补全脚本放置在合适位置(如
.zshrc
或自定义补全目录) - 更改后重新加载 Zsh 配置或重启终端以生效
参考
Enjoy Reading This Article?
Here are some more articles you might like to read next: