Bash/zsh 选项卡自动完成:给定初始命令,使用自动完成功能忽略目录中的某些文件

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.logvim doc.aux。相反,我经常这样做

vim doc.tex

不幸的是,tab-autocomplete 会向我建议所有 4 个文件,而不是仅建议doc.tex.

有没有一种方法可以让我输入vim \t,并且这会忽略目录中的某些某些文件?

更一般地说,我可以输入 command X \t,并编写一些设置,在其中输入 commandX将忽略目录中的文件吗?

仅供参考:我使用 zsh。不确定 bash 和 zsh 是否会有类似的解决方案。

答案1

在 zsh 中,使用“新”补全系统(即,如果您compinit的 中有.zshrc),请使用file-patterns风格

zstyle ':completion:*:*:vim:*' file-patterns '^*.(aux|log|pdf):source-files' '*:all-files'

如果没有完成,则*.(aux|log|pdf)仅在命令行上完成与模式匹配的文件。vim

您可以使用命令名称的模式,特别*是匹配除显式匹配的命令之外的所有命令。

答案2

添加到此是因为我不使用 zsh,并且还有更多通用选项。

.bashrc只需使用 bash 内置命令放入一行即可complete。例如:

complete -f -X '*.@(aux|log|pdf)' -o plusdirs vim

where-f将完成文件名,-X使用 glob 字符串从可能的选择中过滤掉匹配模式,-o plusdirs并将之后将子目录添加到列表中。

相关内容