hli*_*117 10 bash zsh autocomplete
我要问的有点具体,可能与 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
Run Code Online (Sandbox Code Playgroud)
尝试做没有什么意义vim doc.pdf
,在常见情况下,我不会做vim doc.log
或vim doc.aux
。相反,我经常这样做
vim doc.tex
Run Code Online (Sandbox Code Playgroud)
不幸的是,tab-autocomplete 会向我建议所有 4 个文件,而不仅仅是doc.tex
.
有没有办法可以输入vim \t
,而这会忽略我目录中的某些文件?
更一般地说,我可以输入 command X \t
,并写一些设置,其中输入 commandX
将忽略我目录中的文件吗?
仅供参考:我使用 zsh。不确定 bash 和 zsh 是否会有类似的解决方案。
Gil*_*il' 10
在zsh中,用“新”完成系统(即,如果你有compinit
你的.zshrc
),使用file-patterns
风格。
zstyle ':completion:*:*:vim:*' file-patterns '^*.(aux|log|pdf):source-files' '*:all-files'
Run Code Online (Sandbox Code Playgroud)
如果没有完成,则匹配模式的文件*.(aux|log|pdf)
将仅在vim
命令行上完成。
您可以为命令名称使用模式,特别*
是匹配除明确匹配的命令之外的所有命令。
添加到这一点是因为我不使用 zsh,并且有更多的通用选项。
只需.bashrc
使用 bash 内置命令将其放入一行即可complete
。例如:
complete -f -X '*.@(aux|log|pdf)' -o plusdirs vim
Run Code Online (Sandbox Code Playgroud)
其中,-f
将完成的文件名,-X
筛选出有水珠字符串匹配从可能的选择模式,-o plusdirs
将后来添加子目录到列表中。