码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 给 zsh 自定义命令添加参数自动补全


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

    场景

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

    它具体完成以下工作:

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

    也就是用一条命令完成一个 git checkout b2、git pull origin b2、git 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,有需要可以参考下。

    效果演示

    参考

    • Completion System
    • How to properly collect an array of lines in zsh
  • 相关阅读:
    秒杀的时候怎么使用Redis?
    力扣第73题
    在达梦数据库上使用密码设备上的国密算法详细操作指南
    在Linux上安装Oracle相关产品,常用文件的默认路径
    利用HFSS-API设计指数渐变传输线
    快速幂 c++
    中间件安全:Apache Tomcat 弱口令.(反弹 shell 拿到服务器的最高控制权.)
    Spring之IoC
    探索进军元宇宙的代表性企业
    电流检测放大器
  • 原文地址:https://www.cnblogs.com/mazhuang/p/15887706.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号