自定义 zsh 实现命令自动补全

为提高某些高频操作的操作效率,本文记录我给一个自定义命令添加参数自动补全的方法。

应用场景

以 zsh 命令 gmt 为例,它可以执行以下操作:

  1. 切换至目标分支
  2. 拉取最新更新
  3. 提示是否将当前分支合并入目标分支

本质上,gmt 集成了 git checkoutgit pullgit merge 的功能。

优化目标

  1. 输入 gmt 后按 Tab 键,显示所有本地 Git 分支
  2. 键入分支名前缀后按 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 生成补全候选项

注意事项

  1. 确保 git_merge_to 函数已正确定义
  2. 将补全脚本放置在合适位置(如 .zshrc 或自定义补全目录)
  3. 更改后重新加载 Zsh 配置或重启终端以生效

参考




    Enjoy Reading This Article?

    Here are some more articles you might like to read next:

  • Linux 实用配置记录
  • 我的常用工具
  • 一份简明的 Markdown 笔记与教程
  • 我的表达欲在递减
  • 滑坡谬误(Slippery Slope)在网络讨论中的显现