默认fish能自动补全的命令已经相当多了,常见的apt-get,rpm等都没问题,但今天却发现没有lsusb的补全规则,查看了下文档,发现规则比bash-completion简单不少,记录下~

简单补全

1. 建立自动补全规则文件

默认自动补全路径由全局变量$fish_complete_path定义

我选取了位置/usr/share/fish/completions,在其中建立lsusb.fish文件

2. 书写补全规则

先查看下lsusb有哪些选项

fish自带complete命令用于定义补全规则

使用方法是:

complete -c 命令 -s 短选项 -l 长选项 --description "描述"

譬如我想有lsusb的-v(–verbose)选项的自动补全,就可以这样写:

complete -c lsusb -s v -l verbose --description "Increase verbosity (show descriptors)"

这里:

-c lsusb 是我希望添加补全的命令 -s 后接短选项,类似-v形式

-l 后接长选项,类似--verbose形式

--description 是选项的解释,可有可无

仿照例子将如下命令添加到lsusb.fish文件中

complete -c lsusb -s v -l verbose --description "Increase verbosity (show descriptors)"

complete -c lsusb -s s --description "Show only devices with specified device and/or bus numbers (in decimal)"

complete -c lsusb -s d --description "Show only devices with the specified vendor and product ID numbers (in hexadecimal)"

complete -c lsusb -s D -l device --description "Selects which device lsusb will examine"

complete -c lsusb -s t -l tree --description "Dump the physical USB device hierarchy as a tree"

complete -c lsusb -s V -l version --description "Show version of program"

complete -c lsusb -s h -l help --description "Show usage and help"

如此输入lsusb -敲tab键就会自动补全了

高级补全

一些命令不光有基于-或–如此形式的选项补全,还有自身特点特定的补全,如mount的挂载点补全,su的用户补全,ssh的主机补全,这是怎么做到的呢? 还以lsusb为例,lsusb -s 001:001 是列出第一个bus的第一个device信息,我希望当输入lsusb -s 时,按下tab会列出当前主机所有bus和device让我选择

complete提供了-x和-a来实现这样的高级补全

complete -x -c lsusb -s s -a '(__fish_complete_usb)' --description "Show only devices with specified device and/or bus numbers (in decimal)"

-x 告诉complete不要用tab默认的文件补全,而是要用-a告诉的参数来补全

-a “参数列表” 是一个列表,里面是complete参数补全的依据,这里我用__fish_complete_usb 来实时生成,而没有写死

函数__fish_complete_usb是由/usr/share/fish/functions/__fish_complete_usb.fish定义的,用来生成设备列表

function __fish_complete_usb

lsusb | awk '{print $2 ":" $4}'| cut -c1-7

end

如此lsusb -s就能基于总线设备号来补全了

补充:lsusb completion已经被fish官方采纳,这是我贡献的第一个开源项目,好高兴!

自动补足算法是什么_如何自定义Shell(Fish版)的自动补全规则?相关推荐

  1. 自动补足算法是什么_数据、算法岗的几点经验分享!

    learners |  作者Datawhale |  来源目录 有哪些好的秋招经验分享? 机器学习中常用的最优化方法有哪些? 想通过数据竞赛来提升实践能力,作为小白有什么入门经验?(今日问题) 有哪些 ...

  2. mysql密码自动被改_每日一shell(十一)mysql强制自动修改密码

    导读 正文 如果不记得MysqL的root密码,那么就只能强制修改密码了,使用shell轻松自动修改密码: #!/bin/bash #Author Aiker PATH=/bin:/sbin:/usr ...

  3. python代码命令行tab补齐_超简python命令行tab一键补全方法

    玩转Linux的朋友们,还在为python默认的无tab补全而烦恼吗? 下面是在下的一个解决方法,希望能帮助到新入学python的学者. 第一步:编写一键补全脚本tab.py [root@localh ...

  4. 【算法千题案例】每日LeetCode打卡——92.最短补全词

  5. 自动驾驶算法详解(8):特斯拉Tesla决策规划算法Planning解析下

    前言: 本文将介绍特斯拉Tesla 在AI Day 上提到的决策规划模块Planner. 同人类驾驶员一样,Planner在接收到经过视觉神经网络处理过的3D Vector Space后,将会在该Sp ...

  6. qlineedit文本改变时_行文本编辑框QLineEdit及自动补全

    导读 行文本输入框在用于界面的文本输入,在WEB登录表单中应用广泛.一般行文本编辑框可定制性较高,既可以当作密码输入框,又可以作为文本过滤器.QLineEdit本身使用方法也很简单,无需过多的设置就能 ...

  7. 学习TeXworks编辑器(二)TAB补全详解与自定义补全命令总结

    文章目录 写在前面 内置补全命令及记忆 希腊字母的补全 规则 对应表 小写希腊字母 大写希腊字母 作为变量的希腊字母 常用数学命令(字体)的补全 常用环境的补全 自定义补全命令 结语 参考文献 写在前 ...

  8. Vim 自定义补全利器 Snippet

    Vim Snippet 设置 本人是 vim 用户,可以说能不用 IDE 就不用 IDE. Snippet 是一种支持用户自定义补全的需求,在 vim 中,可以使用 UltiSnips 和 Vim-S ...

  9. ES 7.X 做类百度搜索,进行搜索自动补全和热搜词及拼音功能实现

    文章目录 前言 一.如何使用ES做类似百度的检索? 二.全文检索自动补齐 1.创建索引 2.添加数据 3.高级检索 三 热搜词 1.思路 2.DSL语句 3.java代码实现 四 拼音补全 1.DSL ...

最新文章

  1. SpringBoot+SpringSecurity前后端分离+Jwt的权限认证(改造记录)
  2. 根据status信息对MySQL服务器进行优化-1
  3. TX Pattern Generator功能块
  4. 首届世界CSS设计大赛结果揭晓
  5. 在python中嵌入c/c++
  6. (马世龙)Linux下CACTI完全搭建技术文档二
  7. java正则表达式 ppt_Java正则表达式演示
  8. 数据模型和数据库系统的模型结构
  9. python可见图算法_基于自适应显着性的图像分割(源码开放)
  10. DHCP技术原理详解
  11. C#把汉字转换成16进制(HEX)并向串口发送数据
  12. PHP电子合同对接流程,电子合同订立程序步骤
  13. 用Latex写学术论文:作者(Author)摘要(Abstract)
  14. 论文分享——Dynamic graph attention for referring expression comprehension
  15. Rainbow Fart安装及设置其他语音包
  16. Excel区间数据拆分
  17. ajaxSubmit来上传文件
  18. 论文阅读——Multi-Task Learning Framework for Extracting Emoton Cause Span and Entailment in Conversations
  19. 如何通过fiddler来进行接口数据mock测试
  20. Pj Immediate Decodability

热门文章

  1. Vue文件在VsCode工具中红色波浪线的问题解决方法
  2. python find方法的复杂度_python内置的方法的时间复杂度
  3. 主进程中发生javascript错误_你知道 JavaScript 中的错误对象有哪些类型吗?
  4. 秒后面的单位是什么_单位与国际单位制是如何由来的?
  5. java dateutils_Java DateUtils java时间工具类 kaki的博客
  6. qt编译实现简单的文本编译器有粘贴复制_qmake 时复制文件(自动在编译前做一些操作,且写在.pro文件里)...
  7. java中怎么把生成文件到项目根目录_[SpringBoot2.X] 02- 项目结构介绍
  8. 猫眼java开发暑期实习_校招|猫眼 Android日常实习一面面经
  9. pipelines mysql_Scrapy爬取豆瓣图书数据并写入MySQL
  10. QGraphicsView加入到布局,所在的窗口变大,视图和场景都变大,使场景中的矩形也变大