我已经给出配置来删除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
。
答案 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_trailing
,p:vim_maintain.remove_trailing
或g: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
答案 3 :(得分:0)
只需将另一个插件解决方案投入到响铃中:
我的DeleteTrailingWhitespace plugin提供了一个强大的解决方案(它没有提到改变视图,破坏搜索模式等所提到的问题)。 (插件页面包含指向其他插件的链接。)
我的插件可以通过b:DeleteTrailingWhitespace
标志关闭某些缓冲区。您可以使用其他答案提供的:autocmd
为该特定项目设置例外,或者(如果您希望将项目本身的例外本地化,以便它可以在文件系统移动中存活,甚至是版本控制克隆)使用本地vimrc 插件(例如localrc plugin(特别是my own enhancements),它甚至允许本地文件类型特定的配置)。有了这个,您可以将:let b:DeleteTrailingWhitespace = 0
命令放入该项目根目录中的.lvimrc
,即可。{/ p>