自动补足算法是什么_如何自定义Shell(Fish版)的自动补全规则?
默认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版)的自动补全规则?相关推荐
- 自动补足算法是什么_数据、算法岗的几点经验分享!
learners | 作者Datawhale | 来源目录 有哪些好的秋招经验分享? 机器学习中常用的最优化方法有哪些? 想通过数据竞赛来提升实践能力,作为小白有什么入门经验?(今日问题) 有哪些 ...
- mysql密码自动被改_每日一shell(十一)mysql强制自动修改密码
导读 正文 如果不记得MysqL的root密码,那么就只能强制修改密码了,使用shell轻松自动修改密码: #!/bin/bash #Author Aiker PATH=/bin:/sbin:/usr ...
- python代码命令行tab补齐_超简python命令行tab一键补全方法
玩转Linux的朋友们,还在为python默认的无tab补全而烦恼吗? 下面是在下的一个解决方法,希望能帮助到新入学python的学者. 第一步:编写一键补全脚本tab.py [root@localh ...
- 【算法千题案例】每日LeetCode打卡——92.最短补全词
- 自动驾驶算法详解(8):特斯拉Tesla决策规划算法Planning解析下
前言: 本文将介绍特斯拉Tesla 在AI Day 上提到的决策规划模块Planner. 同人类驾驶员一样,Planner在接收到经过视觉神经网络处理过的3D Vector Space后,将会在该Sp ...
- qlineedit文本改变时_行文本编辑框QLineEdit及自动补全
导读 行文本输入框在用于界面的文本输入,在WEB登录表单中应用广泛.一般行文本编辑框可定制性较高,既可以当作密码输入框,又可以作为文本过滤器.QLineEdit本身使用方法也很简单,无需过多的设置就能 ...
- 学习TeXworks编辑器(二)TAB补全详解与自定义补全命令总结
文章目录 写在前面 内置补全命令及记忆 希腊字母的补全 规则 对应表 小写希腊字母 大写希腊字母 作为变量的希腊字母 常用数学命令(字体)的补全 常用环境的补全 自定义补全命令 结语 参考文献 写在前 ...
- Vim 自定义补全利器 Snippet
Vim Snippet 设置 本人是 vim 用户,可以说能不用 IDE 就不用 IDE. Snippet 是一种支持用户自定义补全的需求,在 vim 中,可以使用 UltiSnips 和 Vim-S ...
- ES 7.X 做类百度搜索,进行搜索自动补全和热搜词及拼音功能实现
文章目录 前言 一.如何使用ES做类似百度的检索? 二.全文检索自动补齐 1.创建索引 2.添加数据 3.高级检索 三 热搜词 1.思路 2.DSL语句 3.java代码实现 四 拼音补全 1.DSL ...
最新文章
- SpringBoot+SpringSecurity前后端分离+Jwt的权限认证(改造记录)
- 根据status信息对MySQL服务器进行优化-1
- TX Pattern Generator功能块
- 首届世界CSS设计大赛结果揭晓
- 在python中嵌入c/c++
- (马世龙)Linux下CACTI完全搭建技术文档二
- java正则表达式 ppt_Java正则表达式演示
- 数据模型和数据库系统的模型结构
- python可见图算法_基于自适应显着性的图像分割(源码开放)
- DHCP技术原理详解
- C#把汉字转换成16进制(HEX)并向串口发送数据
- PHP电子合同对接流程,电子合同订立程序步骤
- 用Latex写学术论文:作者(Author)摘要(Abstract)
- 论文分享——Dynamic graph attention for referring expression comprehension
- Rainbow Fart安装及设置其他语音包
- Excel区间数据拆分
- ajaxSubmit来上传文件
- 论文阅读——Multi-Task Learning Framework for Extracting Emoton Cause Span and Entailment in Conversations
- 如何通过fiddler来进行接口数据mock测试
- Pj Immediate Decodability
热门文章
- Vue文件在VsCode工具中红色波浪线的问题解决方法
- python find方法的复杂度_python内置的方法的时间复杂度
- 主进程中发生javascript错误_你知道 JavaScript 中的错误对象有哪些类型吗?
- 秒后面的单位是什么_单位与国际单位制是如何由来的?
- java dateutils_Java DateUtils java时间工具类 kaki的博客
- qt编译实现简单的文本编译器有粘贴复制_qmake 时复制文件(自动在编译前做一些操作,且写在.pro文件里)...
- java中怎么把生成文件到项目根目录_[SpringBoot2.X] 02- 项目结构介绍
- 猫眼java开发暑期实习_校招|猫眼 Android日常实习一面面经
- pipelines mysql_Scrapy爬取豆瓣图书数据并写入MySQL
- QGraphicsView加入到布局,所在的窗口变大,视图和场景都变大,使场景中的矩形也变大