跟我一起寫shell補全指令碼(開篇)

2021-09-19 23:20:27 字數 1035 閱讀 7709

如果你是乙個重度shell使用者,一定會關注所用的shell的補全功能。某款shell的補全強弱,也許就是決定你的偏好的第一要素。

shell裡面補全的影子無處不在,輸入命令的時候可以有補全,敲打選項的時候可以有補全,選擇檔案的時候可以有補全。有些shell甚至支援通過補全來切換版本控制的分支。由於shell裡面可以執行的程式千差萬別,shell一般不會內建針特定對某個工具的補全功能。與之相對的,shell提供了一些補全用的api,交由使用者編寫對應的補全指令碼。

在這裡,我想向大家介紹如何利用提供的api,來編寫乙個shell補全指令碼。由於需要覆蓋的內容較多,所以分為bash和zsh兩篇。也許有fish使用者會抱怨,fish又一次被忽略了:d。之所以只有bash和zsh的內容,是因為:1. 這兩種shell的使用者佔了shell使用者的絕大多數。2. 我沒有用過fish,所以對這方面也不了解。希望有人能夠錦上添花,寫乙個fish版本的補全指令碼教程。

既然想要寫乙個shell補全指令碼,那麼接下來要決定待補全的物件了。這裡我選擇pandoc作為目標。pandoc是文件轉換器中的瑞士軍刀,支援主流的各種標記語言,甚至對於pdf和ms word也有一定程度上的支援。pandoc支援的選項琳琅滿目,如果都要實現確實很花時間。所以這裡就只實現general options,reader options,general writer options大部分的內容。不管怎麼說,這將會是乙個「既不至於簡單到讓人喪失興趣,又不至於困難到讓人喪失信心」的任務。

安裝pandoc的方式見官網上的說明,這裡就不贅述了。安裝完了之後,man pandoc就能看到各個選項的說明。大體上我們需要實現以下幾個目標:

支援主選項(general options)

支援子選項(reader options/general writer options)

支援給選項提供引數值**。比如在敲pandoc -f之後,能夠補全format的內容。

好,讓我們開始給pandoc寫補全指令碼吧!

跟我一起寫 Makefile

概述 什麼是makefile?或許很多winodws的程式設計師都不知道這個東西,因為那些windows的ide都為你做了這個工作,但我覺得要作乙個好的和professional的程式設計師,makefile還是要懂。這就好像現在有這麼多的html的編輯器,但如果你想成為乙個專業人士,你還是要了解h...

跟我一起寫 Makefile

概述 什麼是makefile?或許很多winodws的程式設計師都不知道這個東西,因為那些windows的ide都為你做了這個工作,但我覺得要作乙個好的和professional的程式設計師,makefile還是要懂。這就好像現在有這麼多的html的編輯器,但如果你想成為乙個專業人士,你還是要了解h...

跟我一起寫 Makefile

跟我一起寫 makefile 陳皓 概述 什麼是makefile?或許很多winodws的程式設計師都不知道這個東西,因為那些windows的ide都為你做了這個工作,但我覺得要作乙個好的和professional的程式設計師,makefile還是要懂。這就好像現在有這麼多的html的編輯器,但如果...