我有一个Vim autocmd,可以在写入之前删除文件中的尾随空格。我几乎需要100%的时间,但是有一些文件类型我希望将其禁用。常规做法是在逗号分隔的列表中列出要让autocmd运行的文件类型,例如:
autocmd BufWritePre *.rb, *.js, *.pl
但是在这种情况下,那将是繁重的。
除了那些匹配模式的文件,是否有办法将autocmd模式与所有文件匹配?我在文档中找不到等效于NOT匹配项的内容。
Answers:
*.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()
在evan的答案的基础上,您可以检查是否存在局部缓冲区变量,并确定是否使用该变量进行剥离。如果您决定不想剥离通常是要剥离的文件类型的缓冲区,这也可以一次性禁用。
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
let b:noStripWhitespace
到文件类型插件部分的文件中。Fx禁用git commit的尾随空格删除,将行添加到~/.vim/ftplugin/gitcommit.vim
。