自动补足算法是什么_如何自定义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官方采纳,这是我贡献的第一个开源项目,好高兴!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式Linux安装Python环境,linux环境下安装python 3

说明:在linux环境下,都默认安装python 2的环境,由于python3在python2的基础上升级较大,所以安装python 3环境用于使用最新的python 3的语法。安装过程:1.下载,上传python 3源码包至服务器2.解压缩python 3压…

java接口中多继承的问题

java中支撑多继承吗? 支持-》接口啊 为什么接口支持多继承呢?因为接口中没有方法体!即使可能两个接口中有一样的抽象方法,但是 只会调用子类中覆盖该同样抽象方法的具体方法!不会引起调用的歧义! interface…

图案设计灵感怎么写_平面设计理念怎么写100多字

平面设计求职者在找工作的过程中,有时个人简历起着很重要的作用。下面是由小编整理而成的平面设计简历范文参考,谢谢你的阅读。平面设计简历范文参考(一)xxx一年以上工作经验|男|27岁(3月11日)居住地:杭州电话:151*******(手机)E-mail&#x…

java匿名类和匿名对象及this的其他用法

/* 匿名内部类:就是内部类的简写格式。 必须前提:内部类必须继承或者实现一个类或者接口。 匿名内部类其实就是一个匿名 子类对象。 格式:new 父类对象 or 接口(){子类内容;(覆盖父类的, 而且可以增加自己的…

linux下drcom无法上网,drcom为什么还是不能上网啊!

drcom为什么还是不能上网啊!发布时间:2010-04-28 20:56:56来源:红联作者:hualong[is] 本帖最后由 hualong 于 2010-4-30 16:45 编辑 [/i]主要是因为我搞很久的drcom,还是不能上网啊!!截一个图让前辈们帮忙分析一下。安装了bulid-e…

python集合的加减_python 中对list做减法操作

问题描述:假设我有这样两个list,一个是list1,list1 [1, 2, 3, 4, 5]一个是list2,list2 [1, 4, 5]我们如何得到一个新的list,list3,list3中包括所有不在list2中出现的list1中的元素。即:list3 …

java中Comparable实现对象的比较

/* class A implements Comaprable<A>{ } 那么 A x new A(); 类关系图 Object o A; Object Comparable c A; | Comparable A 实现了 Comparable 接口嘛 …

linux db2 归档,DB2的归档模式设置方法

当做在线备份&#xff0c;即加上online参数后&#xff0c;可以看到如下告警&#xff1a;[db2inst1localhost backup]$ db2 backup db sample online to /dev/nullSQL2413N Online backup is not allowed because the database is not recoverableor a backup pending condition…

css提取页面元素唯一性_下面这个函数,能够获取一个元素的任意 CSS 属性值。...

在对网页进行调试的过程中&#xff0c;经常会用到js来获取元素的CSS样式&#xff0c;方法有很多很多&#xff0c;现在仅把我经常用的方法总结如下&#xff1a;1. obj.style&#xff1a;这个方法只能JS只能获取写在html标签中的写在style属性中的值(style”…”)&#xff0c;而无…

Linux检查依赖库,linux 查看依赖库

readelf -d libsurfaceflinger.so打印出来的数据如下&#xff1a;Dynamic section at offset 0xb4 contains 37 entries:Tag Type Name/Value0x00000001 (NEEDED) Shared library: [liblog.so]0x00000001 (NEEDED) …

java中final注意的问题

public class Test{public static void main(String[] args){Person p new Person();} } /* 4.修饰的变量是一个常量(所有字符都大些 XXX 或者 XXX_XXX)&#xff0c;只能赋值一次!final 固化的都是显示初始化的值(定义并初始化)&#xff08;或者构造函数中的特定初始化的值&am…

android判断点击次数_Android应用统计-使用时长及次数统计(一)

关键字&#xff1a; 应用统计 Android源码 应用使用时长 应用使用次数最近在做有关于应用统计有关的工作&#xff0c;主要是统计系统中客户端应用(非系统自带的那些基础应用&#xff0c;比如DownLoadManager)&#xff0c;在每一天的使用情况&#xff0c;统计内容包括&#xff1…

linux+cp+-rdf,简单构建基于RDF和SPARQL的KBQA(知识图谱问答系统)

本文主要通过python实例讲解基于RDF和SPARQL的KBQA系统的构建。该项目可在python2和python3上运行通过。注&#xff1a;KBQA即是我们通常所说的基于知识图谱的问答系统。这里简单构建的EasyKBQA&#xff0c;数据来源于网络&#xff0c;源码地址看下面补充说明。目录&#xff1a…

java中Object.equals()简单用法

/* equals&#xff08;&#xff09;方法默认的比较两个对象的引用&#xff01; */ class Child {int num;public Child(int x){num x;}//人文的抛出运行时异常的好处是&#xff1a;可以自定义错误信息&#xff01;/*public boolean equals(Object o) throws ClassCastExceptio…

cmd imp导入dmp文件_oracle导入dmp文件的2种方法

使用imp、impdp方式导入数据1.使用imp导入数据打开cmd窗口&#xff0c;然后直接敲入一下命令即可&#xff0c;需要注意的是&#xff0c;要事先把dmp文件放到正确的路径中去imp yx_base/yx_192. file E:\yxb\yx_base.dmp log E:\yxb\yx_base.log full y2.使用impdp导入数据(1…

from server sql 拼接统计两个子查询_[SQL SERVER系列]之嵌套子查询和相关子查询

子查询有两种类型&#xff0c;一种是只返回一个单值的子查询&#xff0c;这时它可以用在一个单值可以使用的地方&#xff0c;这时子查询可以看作是一个拥有返回值的函数&#xff1b;另外一种是返回一列值的子查询&#xff0c;这时子查询可以看作是一个在内存中临时存在的数据表…

java中包容易出现的错误及权限问题

/* 3&#xff0c;权限在不同地方的体现&#xff1a; public protected default private 同一类中&#xff1a; ok ok ok ok 同一包中&#xff1a; ok ok ok 子类中&#xff1a; ok ok …

c语言程序算一元二次方程,如何用C语言来计算一元二次方程

C语言实现一元二次方程的解 源程序#include#includefloat x1,x2,p,q,d;float great_than_zero(float,float);float equql_to_zero(float,float);float smaller_than_zero(float,float);main(){float a,b,c;printf(“Enter a,b,c:”);scanf(“%f%f%f”,&a,&b,&c);db…

cosin等于多少_cos45度等于多少

cos45度√2/2。角A的邻边比斜边叫做角A的余弦&#xff0c;记作cosA(由余弦英文cosine简写得来)&#xff0c;即cosA等于角A的邻边/斜边(直角三角形)。二倍角公式sin2α2sinαcosαtan2α2tanα/(1-tan^2(α))cos2αcos^2(α)-sin^2(α)2cos^2(α)-11-2sin^2(α)积化和差公式sinα…

c语言宏定义比较三个数大小,C语言中两个宏进行大小对比,其中一个没有定义,这种行为如何定义。...

1.C语言中两个宏进行大小对比&#xff0c;其中一个没有定义&#xff0c;这种行为如何定义呢&#xff1f;在学习U-boot的过程中遇到这么一个定义&#xff1a;# if (CONFIG_ENV_ADDR > CONFIG_SYS_MONITOR_BASE) && \(CONFIG_ENV_ADDR CONFIG_ENV_SIZE) < \(CONFI…