禁用vim中特定的autocmd项目

时间:2017-10-26 03:40:59

标签: 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

问题

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

预期

我想仅为该特定项目禁用此配置。让我说我的项目在~/work/projectA

4 个答案:

答案 0 :(得分:4)

首先,你可以用一个自动命令完成所有这些:

au BufWritePre *.{rb,html,js,jsx,json} %s/\s\+$//e

其次,你应该把它放在一个适当的" augroup":

augroup TrailingSpaces
    autocmd!
    autocmd BufWritePre *.{rb,html,js,jsx,json} %s/\s\+$//e
augroup END

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

augroup SpecialProject
    autocmd!
    autocmd BufNewFile,BufRead ~/work/projectA/**/* autocmd! TrailingSpaces
augroup END

第四,在:%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

请参阅:help winsaveview()

答案 1 :(得分:1)

您还可以修复映射以检查配置变量。然后可以在local vimrcs中设置该变量,或者在hook I've implemented in lh-vim-lib.editorconfig文件中设置该变量,或者甚至使用自动命令(我不推荐)

对于intance,我的自动命令(对于vim)执行function,在进行替换之前测试b:vim_maintain.remove_trailingp:vim_maintain.remove_trailingg:vim_maintain.remove_trailing是否设置为1。

function! lh#vim#maintain#_save_pre_hook() abort
  let pos = getpos('.')
  let cleanup = lh#on#exit()
        \.register('call setpos(".", '.string(pos).')')
  try
    if lh#option#get('vim_maintain.remove_trailing', 1)
      :silent! %s/\s\+$//
    endif
    if s:must_update_time_stamp()
      ......
     endif
  finally
    call cleanup.finalize()
  endtry
endfunction

说到编辑器配置,更简单地说,它可以选择是否删除尾随空格。对于与其他人分享的项目来说,这将非常棒,但是,您必须修补所有个人项目以添加.editorconfig文件。

答案 2 :(得分:1)

我认为配置此功能的最佳方法是使用https://github.com/editorconfig/editorconfig-vim

全局配置

添加全局~/.editorconfig以设置全局编辑器配置

[*]
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false

项目特定配置

~/work/projectA/.editorconfig

[*]
trim_trailing_whitespace = true

不破坏任何东西。并从trim trailing whitespace

中删除.vimrc代码
  " 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

配置列表:http://editorconfig.org/

答案 3 :(得分:0)

只需将另一个插件解决方案投入到响铃中:

我的DeleteTrailingWhitespace plugin提供了一个强大的解决方案(它没有提到改变视图,破坏搜索模式等所提到的问题)。 (插件页面包含指向其他插件的链接。)

我的插件可以通过b:DeleteTrailingWhitespace标志关闭某些缓冲区。您可以使用其他答案提供的:autocmd为该特定项目设置例外,或者(如果您希望将项目本身的例外本地化,以便它可以在文件系统移动中存活,甚至是版本控制克隆)使用本地vimrc 插件(例如localrc plugin(特别是my own enhancements),它甚至允许本地文件类型特定的配置)。有了这个,您可以将:let b:DeleteTrailingWhitespace = 0命令放入该项目根目录中的.lvimrc,即可。{/ p>