禁用特定于 vim 的 autocmd 项目

prz*_*adu 1 vim macvim

我已经给出了在 vim 中删除尾随空格的配置

  au BufWritePre *.rb :%s/\s\+$//e
  au BufWritePre *.html :%s/\s\+$//e
  au BufWritePre *.js :%s/\s\+$//e
  au BufWritePre *.jsx :%s/\s\+$//e
  au BufWritePre *.json :%s/\s\+$//e
Run Code Online (Sandbox Code Playgroud)

问题

我有一个有多个开发人员在工作的项目,这是一个很大的项目。我不想通过删除此项目中现有的尾随空格而引起大量冲突。

预期的

我只想为该特定项目禁用此配置。假设我的项目在~/work/projectA.

rom*_*inl 7

首先,您可以使用单个自动命令完成所有这些操作:

au BufWritePre *.{rb,html,js,jsx,json} %s/\s\+$//e
Run Code Online (Sandbox Code Playgroud)

其次,你应该把它放在一个合适的“augroup”中:

augroup TrailingSpaces
    autocmd!
    autocmd BufWritePre *.{rb,html,js,jsx,json} %s/\s\+$//e
augroup END
Run Code Online (Sandbox Code Playgroud)

第三,您可以使用另一个(可能有点笨手笨脚的)自动命令为该特定项目禁用该组:

augroup SpecialProject
    autocmd!
    autocmd BufNewFile,BufRead ~/work/projectA/**/* autocmd! TrailingSpaces
augroup END
Run Code Online (Sandbox Code Playgroud)

第四,在之后失去光标位置:%s/\s\+$//e并不好玩。如果我是你,我会做这样的事情:

augroup TrailingSpaces
    autocmd!
    autocmd BufWritePre *.{rb,html,js,jsx,json} let w:wv = winsaveview() | %s/\s\+$//e | call winrestview(w:wv)
augroup END
Run Code Online (Sandbox Code Playgroud)

:help winsaveview()