有时我会自定义一些 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 配置文件中添加如下代码:

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=("${(@f)$(git branch --format='%(refname:short)')}") 的意思是,将 git branch --format='%(refname:short)' 命令的输出按行分割后形成一个字符串数组,赋值给 git_branches 变量,这部分可以参考 How to properly collect an array of lines in zsh

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

效果演示

参考

给 zsh 自定义命令添加参数自动补全的更多相关文章

  1. [ovs] openvswitch ovs ovs-vsctl ovs-appctl 命令行参数自动补全 bash bash-completion

    1, 安装bash_completion: [root@vrouter1 ~]# yum install bash-completio 2,  找到你的ovs的补全脚本装在了哪里 [root@vrou ...

  2. TCL函数“参数自动补全” 与 “help 信息显示”

    tcl 函数参数自动补全和 help 信息显示 在EDA tool 中使用命令时,命令的参数可以通过 tab 键自动补全,而且可以使用 -help 显示帮助信息,使用起来很方便: 那么我们自己编写的 ...

  3. sublime3添加verilog自动补全代码段

    前言 sublime默认的verilog自动补全十分垃圾,不过提供了代码段这个功能,你可以自己写个重用率高的代码段减轻工作量.写个模板当tb也很爽啦. 流程 1.打开user文件夹,创建verilog ...

  4. vim 添加php自动补全 并格式化代码

    自动补全,修改/etc/vimrc的配置 vim /etc/vimrc 添加: filetype plugin on autocmd FileType php set omnifunc=phpcomp ...

  5. Mysql命令行tab自动补全方法

    在mysql命令行有时为了方便想要按tbl键自动补全命令,以便节约时间. 具体方法如下: 第一步:修改my.cnf vi mysql/etc/my.cnf 将下图红框的代码注释,修改成如下代码: #d ...

  6. 在Jupyter Notebook添加代码自动补全功能

    在使用Jupyter notebook时发现没有代码补全功能,于是在网上查找了一些资料,最后总结了以下内容. 1 安装显示目录功能: pip install jupyter_contrib_nbext ...

  7. IDEA添加yaml自动补全语法插件

    问题:编写yml文件的时候,系统不能给自动补全 解决办法:File---->Settings---->Plugins---->搜索Spring Assistant x 项目效果预览

  8. jquery mutilselect 插件添加中英文自动补全

    jquery mutilselect默认只能根据设置的option来进行自动提示 $.each(availableTags, function(key, value) { $('#channels') ...

  9. 第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索的自动补全功能

    第三百六十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—用Django实现搜索的自动补全功能 elasticsearch(搜索引擎)提供了自动补全接口 官方说明:https://www.e ...

随机推荐

  1. springboot 开启事务回滚

    在数据库操作时如果发生异常,回滚的方法 在方法上添加注解@Transactional,作用域是方法级的 参考资料: https://www.cnblogs.com/c2g5201314/p/13163 ...

  2. android studio 配置 Lombok 插件 -具体步骤

    1.前言 idea 用惯了 Lombok 插件了,好用的很,可是开发安卓 却没有,即便在 android studio 安装了插件,但是仍然无法使用 因为需要配置 2.解决 (1)进入设置,找到插件设 ...

  3. 解决spring boot 无法访问静态文件夹的附件或图片

    1.需要在配置文件重新执行静态文件夹位置即可 # 指定静态文件位置 resources: static-locations: classpath:/static/,classpath:/static/ ...

  4. c# - 一个.cs类文件里如何建多个类

    方法类可以使用 internal 修饰符,意为接口类, 主函数建议添加私有修饰符 private   控制台打印

  5. Centos7 查看文件命令总结

    ls命令 ls -d --文件或者目录是否存在 ls -l 或者ll --显示详细信息 ls -lt --文件按时间顺序排序(升序) ls -ltr --按时间倒叙排序 ls -i --显示索引节点 ...

  6. ON UPDATE CURRENT_TIMESTAMP请慎用

    大家好,我是架构摆渡人.这是实践经验系列的第七篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果有收获,还请分享给更多的朋友. 今天给大家分享一个容易忽略的问题,正是因为容易忽略,所以才要重 ...

  7. Windows系统上搭建Clickhouse开发环境

    Windows系统上搭建Clickhouse开发环境 总体思路 微软的开发IDE是很棒的,有两种:Visual Studio 和 VS Code,一个重量级,一个轻量级.近年来VS Code越来越受欢 ...

  8. http://dl-ssl.google.com/android上不去解决方案

    转:https://blog.csdn.net/j04110414/article/details/44149653/ 一. 更新sdk,遇到了更新下载失败问题: Fetching https://d ...

  9. [源码分析] Facebook如何训练超大模型---(1)

    [源码分析] Facebook如何训练超大模型---(1) 目录 [源码分析] Facebook如何训练超大模型---(1) 0x00 摘要 0x01 简介 1.1 FAIR & FSDP 1 ...

  10. 微信小程序云开发指南

    一.初识云开发 官方文档 小程序·云开发是微信团队联合腾讯云推出的专业的小程序开发服务. 开发者可以使用云开发快速开发小程序.小游戏.公众号网页等,并且原生打通微信开放能力. 开发者无需搭建服务器,可 ...