[英]Can I make tab-completion filter files by extension?
假設myprogram
僅使用*.data
文件作為命令行參數。 在終端,當我們這樣做
$ myprogram <tab>
我們只希望列出*.data
文件以供選項卡自動完成。 這種行為是如何實現的? 正在使用的shell是Bash。
在bash shell中鍵入以下內容
complete -f -X '!*.data' myprogram
-f
選項告訴complete
僅基於文件名而不是目錄完成。 -X
選項允許您指定過濾器模式。
注意:此解決方案是全球性的。 它會影響每個目錄和每個命令的tab-completion(意思是像cd
或rm
這樣的東西,以及myprogram
)。 它的工作原理是允許您指定不會出現在tab-complete中的文件擴展名。 這不完全是您要求的,但如果您的工作目錄中除了*.data
之外沒有多少文件,則排除所有選項不會太麻煩。 由於這兩個原因,這個選項可能不是你想要的,但仍然值得注意。
在~/.bash_profile
文件中添加該行
FIGNORE=".py:.txt:.out:.exe:.c:<etc>"
其語法是創建一個以冒號分隔的要忽略的文件擴展名列表。 保存新的.bash_profile
您必須鍵入. ~/.bash_profile
. ~/.bash_profile
表示您所做的更改生效。
有關完整命令的更多信息,請參閱Bash手冊中的Programmable Completion Builtins 。
更好地使用_filedir
而不是“raw” complete
。
理由
grep _filedir -r $(pkg-config --variable=completionsdir bash-completion) | wc -l
~
)路徑正在擴展 /home/tux/Do<TAB><TAB>
,作為回復獲得的列表將刪除'/ home / tux',因此更加緊湊 MWE
寫一個文件“completions / myprogram”,你可以找到它. completions/myprogram
. completions/myprogram
。 內容:
_myprogram()
{
# init bash-completion's stuff
_init_completion || return
# fill COMPREPLY using bash-completion's routine
_filedir '@(data)'
}
complete -F _myprogram myprogram
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.