在vim中禁用特定于项目的autocmd
我已经给出了在vim中删除尾随空格的配置在vim中禁用特定于项目的autocmd,vim,macvim,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 问题 我有一个项目,其中有多个开发人员在工作,这是一个大项目。我不想通过删除此项目中现有的尾随空
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
首先,您可以通过一个自动命令完成所有这些:
au BufWritePre *.{rb,html,js,jsx,json} %s/\s\+$//e
augroup SpecialProject
autocmd!
autocmd BufNewFile,BufRead ~/work/projectA/**/* autocmd! TrailingSpaces
augroup END
其次,你应该把它放在一个适当的“augroup”中:
第三,您可以使用另一个(可能有点笨手笨脚的)自动命令为特定项目禁用该组:
au BufWritePre *.{rb,html,js,jsx,json} %s/\s\+$//e
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()
首先,您可以通过一个自动命令完成所有这些操作:
au BufWritePre *.{rb,html,js,jsx,json} %s/\s\+$//e
augroup SpecialProject
autocmd!
autocmd BufNewFile,BufRead ~/work/projectA/**/* autocmd! TrailingSpaces
augroup END
其次,你应该把它放在一个适当的“augroup”中:
第三,您可以使用另一个(可能有点笨手笨脚的)自动命令为特定项目禁用该组:
au BufWritePre *.{rb,html,js,jsx,json} %s/\s\+$//e
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()
您还可以修复映射以检查配置变量。然后,可以在.editorconfig
文件中使用a设置该变量,甚至可以使用自动命令(我不建议这样做)
对于intance,我的自动命令(对于vim)执行一个测试,该测试在执行替换之前是将b:vim\u maintenant.remove\u training
还是g:vim\u maintenant.remove\u training
设置为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
文件。您还可以修复映射以检查配置变量。然后,可以在.editorconfig
文件中使用a设置该变量,甚至可以使用自动命令(我不建议这样做)
对于intance,我的自动命令(对于vim)执行一个测试,该测试在执行替换之前是将b:vim\u maintenant.remove\u training
还是g:vim\u maintenant.remove\u training
设置为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
文件。我认为最好的配置方法是使用
全局配置
添加全局~/.editorconfig
以设置全局editorconfig
[*]
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
项目特定配置
~/work/projectA/.editorconfig
[*]
trim_trailing_whitespace = true
没有破坏任何东西。并从.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
对于配置列表:我认为最好的配置方法是使用 全局配置 添加全局
~/.editorconfig
以设置全局editorconfig
[*]
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
项目特定配置
~/work/projectA/.editorconfig
[*]
trim_trailing_whitespace = true
没有破坏任何东西。并从.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
对于配置列表:只需将另一个插件解决方案扔到环中即可:
My提供了一个健壮的解决方案(不存在上述更改视图、破坏搜索模式等问题)。(插件页面有指向其他插件的链接。)
我的插件可以通过b:DeleteTrailingWhitespace
标志关闭某些缓冲区。您可以使用其他答案提供的:autocmd
为该特定项目创建异常,或者(如果您希望将异常本地化到项目本身,以便在文件系统移动或版本控制克隆后仍然存在)使用本地vimrc插件(例如(尤其是使用),它甚至允许本地文件类型特定的配置)。有了它,您可以将:让b:DeleteTrailingWhitespace=0
命令放入该项目根目录中的.lvimrc
,就是这样。只需将另一个插件解决方案放入环中:
My提供了一个健壮的解决方案(不存在上述更改视图、破坏搜索模式等问题)。(插件页面有指向其他插件的链接。)
我的插件可以通过
b:DeleteTrailingWhitespace
标志关闭某些缓冲区。您可以使用其他答案提供的:autocmd
为该特定项目创建异常,或者(如果您希望将异常本地化到项目本身,以便在文件系统移动或版本控制克隆后仍然存在)使用本地vimrc插件(例如(尤其是使用),它甚至允许本地文件类型特定的配置)。有了它,您可以将:let b:DeleteTrailingWhitespace=0
命令放入该项目根目录中的.lvimrc
,就是它。正是我要搜索的。我试着使用augroup,但它不起作用。查看您的代码时,我发现缺少递归目录/***
。非常感谢,如果打开projectA
中的文件,这不是会清除TrailingSpaces
组吗?从而停止TrailingSpaces
在projectA
文件之后的非projectA
目录中工作。可以改为设置一个缓冲区局部变量,如let b:no_strip=1
,然后向TrailingSpaces
autocmd添加一个条件。e、 如果!得到(b:,“不”