自動補足算法是什么_如何自定義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.pswp.cn/news/531921.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531921.shtml
英文地址,請注明出處:http://en.pswp.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…