我有一个Vim autocmd,它可以在写入之前删除文件中的尾随空格。我希望这几乎100%的时间,但有一些文件类型,我希望它禁用。传统的做法是在逗号分隔的列表中列出您希望autocmd运行的文件类型,例如:
autocmd BufWritePre *.rb, *.js, *.pl
但在这种情况下,这将是繁重的。
是否有一种方法可以将autocmd模式与除与模式匹配的文件以外的所有文件进行匹配?我在文档中找不到与NOT matcher等同的东西。
发布于 2012-05-02 16:58:30
单行方式的另一种选择:
let blacklist = ['rb', 'js', 'pl']
autocmd BufWritePre * if index(blacklist, &ft) < 0 | do somthing you like
然后,您可以对除黑名单中的文件类型以外的所有文件类型执行您喜欢的操作。
发布于 2011-06-28 02:13:15
一个不错的方法是将一个文件类型的局部变量设置为true。然后,如果该变量为false (如果为其他所有内容设置),或者如果该变量根本不存在(不需要预先设置),则设置自动命令。
autocmd BufWritePre *.foo let b:foo=true
if !exists("b:foo")
autocmd ...
endif
基于注释更改了变量前缀
发布于 2021-05-10 07:38:05
您可以在相同的regexp上执行except:
autocmd BufWritePre *\(.out\|.diffs\)\@<! <your_command>
这将对除.out
或.diffs
之外的所有文件扩展名执行<your_command>
。
https://stackoverflow.com/questions/6496778
复制相似问题