Bash

Bash/zsh 選項卡自動完成:給定初始命令,使用自動完成忽略目錄中的某些文件

  • July 8, 2020

我要問的有點具體,可能與 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.logor vim doc.aux。相反,我經常這樣做

vim doc.tex

不幸的是,tab-autocomplete 會向我建議所有 4 個文件,而不僅僅是doc.tex.

有沒有辦法可以輸入vim \t,這會忽略我目錄中的某些文件?

更一般地說,我可以鍵入 commandX \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將子目錄添加到列表中。

引用自:https://unix.stackexchange.com/questions/230742