gpt4 book ai didi

Vim 对所有文件类型运行 autocmd,除了

转载 作者:行者123 更新时间:2023-12-03 05:22:48 29 4
gpt4 key购买 nike

我有一个 Vim 自动命令,可以在写入之前删除文件中的尾随空格。我几乎 100% 都希望这样做,但有一些文件类型我希望禁用它。传统的做法是在逗号分隔的列表中列出您希望 autocmd 运行的文件类型,例如:

autocmd BufWritePre *.rb, *.js, *.pl

但在这种情况下,这将是繁重的。

有没有办法将自动命令模式与除与该模式匹配的文件之外的所有文件进行匹配?我在文档中找不到与 NOT 匹配器等效的内容。

最佳答案

*.rb 不是文件类型。这是一个文件模式。 ruby 是文件类型,甚至可以在没有 .rb 扩展名的文件上设置。因此,您最可能想要的是 autocmd 调用的函数,以检查不应执行操作的文件类型并删除空格。

fun! StripTrailingWhitespace()
" Don't strip on these filetypes
if &ft =~ 'ruby\|javascript\|perl'
return
endif
%s/\s\+$//e
endfun

autocmd BufWritePre * call StripTrailingWhitespace()
<小时/>

根据埃文的答案,您可以检查缓冲区局部变量并确定是否使用该变量进行剥离。如果您决定不想删除通常会删除的文件类型的缓冲区,这还允许您一次性禁用。

fun! StripTrailingWhitespace()
" Only strip if the b:noStripeWhitespace variable isn't set
if exists('b:noStripWhitespace')
return
endif
%s/\s\+$//e
endfun

autocmd BufWritePre * call StripTrailingWhitespace()
autocmd FileType ruby,javascript,perl let b:noStripWhitespace=1

关于Vim 对所有文件类型运行 autocmd,除了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6496778/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com