Bash
Bash/zsh 選項卡自動完成:給定初始命令,使用自動完成忽略目錄中的某些文件
我要問的有點具體,可能與 Unix Stackexchange 上的其他自動完成問題不同。
假設我有一個看起來像這樣的目錄
-rw-r--r-- 1 hlin117 staff 1.1K Sep 19 13:05 doc.aux -rw-r--r-- 1 hlin117 staff 26K Sep 19 13:05 doc.log -rw-r--r-- 1 hlin117 staff 177K Sep 19 13:05 doc.pdf -rw-r--r-- 1 hlin117 staff 13K Sep 19 13:01 doc.tex
嘗試做沒有什麼意義
vim doc.pdf
,而且在通常情況下,我不會做vim doc.log
orvim doc.aux
。相反,我經常這樣做vim doc.tex
不幸的是,tab-autocomplete 會向我建議所有 4 個文件,而不僅僅是
doc.tex
.有沒有辦法可以輸入
vim \t
,這會忽略我目錄中的某些文件?更一般地說,我可以鍵入 command
X \t
並編寫一些設置,鍵入 commandX
將忽略我目錄中的文件嗎?僅供參考:我使用 zsh。不確定 bash 和 zsh 是否會有類似的解決方案。
在zsh中,使用“新”完成系統(即,如果
compinit
您.zshrc
的.file-patterns
zstyle ':completion:*:*:vim:*' file-patterns '^*.(aux|log|pdf):source-files' '*:all-files'
匹配模式的文件
*.(aux|log|pdf)
只有在vim
沒有完成的情況下才會在命令行上完成。您可以使用命令名稱的模式,特別
*
是匹配所有命令,但明確匹配的命令除外。
添加到這一點是因為我不使用 zsh,而且還有更通用的選項。
.bashrc
只需使用 bash 內置命令放入您的 a 行complete
。例如:complete -f -X '*.@(aux|log|pdf)' -o plusdirs vim
where
-f
將完成文件名,-X
使用 glob 字元串從可能的選擇中過濾掉匹配的模式,然後-o plusdirs
將子目錄添加到列表中。