前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >给 zsh 自定义命令添加参数自动补全

给 zsh 自定义命令添加参数自动补全

作者头像
mzlogin
发布2023-10-23 10:16:36
2860
发布2023-10-23 10:16:36
举报
文章被收录于专栏:闷骚的程序员闷骚的程序员

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

场景

我自定义了一个 zsh 命令 gmt,执行 gmt <b2>,可以将当前所在的 git 分支 merge 到 <b2> 这个分支。

它具体完成以下工作:

  1. 切换到 git 分支 <b2>
  2. <b2> 分支更新到最新;
  3. 询问是否合并,输入 y 则进行分支合并。

也就是用一条命令完成一个 git checkout b2git pull origin b2git merge b1 这样的组合操作。

用了一段时间,可以省一些事,美中不足的就是有时候分支名称比较长,只能手动输入,没有自动补全。

期望效果

  1. 输入 gmt ,然后按 tab,自动提示本地的所有 git 分支名称;
  2. 输入 gmt fe,然后按 tab,自动补全以 fe 开头的 git 分支名称;

实现方法

在 zsh 配置文件中添加如下代码:

代码语言:javascript
复制
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 'command' git_branches
}

注:__git_merge_to 是一个自定义的函数,__gmt 是这个函数的 alias。

这段代码的意思就是使用 _git_merge_to_comp 这个函数来给 git_merge_to 命令做自动补全,自动补全的候选列表是当前项目的所有本地 git 分支名称。

其中:

compdef_describe 等的用法,可以参考 zsh 的官方文档 Completion System

git_branches=("

我的 zsh 配置都上传到了 https://github.com/mzlogin/config-files,有需要可以参考下。

效果演示

参考

文档信息

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022/02/12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 场景
  • 期望效果
  • 实现方法
  • 效果演示
  • 参考
    • 文档信息
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档