禁用 vim 中特定的 autocmd 项目
Disable autocmd project specific in vim
我已给出配置以删除 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
.
首先,您可以使用一个自动命令完成所有这些操作:
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()
。
您还可以修复映射以检查配置变量。然后可以在 local vimrcs, or in an .editorconfig
file with the a hook I've implemented in lh-vim-lib 中设置该变量,甚至可以使用自动命令(我不推荐)
例如,我的自动命令(针对 vim)执行 function that tests whether 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
文件。
我认为最好的配置方法是使用 https://github.com/editorconfig/editorconfig-vim。
全局配置
添加全局~/.editorconfig
以设置全局编辑器配置
[*]
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
项目特定配置
~/work/projectA/.editorconfig
[*]
trim_trailing_whitespace = true
没有破坏任何东西。并从 .vimrc
中删除 trim trailing whitespace
代码
" 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
只是把另一个插件解决方案扔进戒指:
我的 DeleteTrailingWhitespace plugin 提供了一个可靠的解决方案(没有提到的更改视图、破坏搜索模式等问题)。 (插件页面有指向其他插件的链接。)
可以通过 b:DeleteTrailingWhitespace
标志为某些缓冲区关闭我的插件。您可以使用其他答案提供的 :autocmd
为该特定项目创建一个例外,或者(如果您想将例外本地化到项目本身,以便它在文件系统移动甚至版本控制克隆中幸存下来)使用 local vimrc 插件(例如 localrc plugin (especially with my own enhancements),它甚至允许本地特定文件类型的配置)。这样,您可以将 :let b:DeleteTrailingWhitespace = 0
命令放入该项目根目录中的 .lvimrc
中,仅此而已。
我已给出配置以删除 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
.
首先,您可以使用一个自动命令完成所有这些操作:
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()
。
您还可以修复映射以检查配置变量。然后可以在 local vimrcs, or in an .editorconfig
file with the a hook I've implemented in lh-vim-lib 中设置该变量,甚至可以使用自动命令(我不推荐)
例如,我的自动命令(针对 vim)执行 function that tests whether 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
文件。
我认为最好的配置方法是使用 https://github.com/editorconfig/editorconfig-vim。
全局配置
添加全局~/.editorconfig
以设置全局编辑器配置
[*]
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
项目特定配置
~/work/projectA/.editorconfig
[*]
trim_trailing_whitespace = true
没有破坏任何东西。并从 .vimrc
trim trailing whitespace
代码
" 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
只是把另一个插件解决方案扔进戒指:
我的 DeleteTrailingWhitespace plugin 提供了一个可靠的解决方案(没有提到的更改视图、破坏搜索模式等问题)。 (插件页面有指向其他插件的链接。)
可以通过 b:DeleteTrailingWhitespace
标志为某些缓冲区关闭我的插件。您可以使用其他答案提供的 :autocmd
为该特定项目创建一个例外,或者(如果您想将例外本地化到项目本身,以便它在文件系统移动甚至版本控制克隆中幸存下来)使用 local vimrc 插件(例如 localrc plugin (especially with my own enhancements),它甚至允许本地特定文件类型的配置)。这样,您可以将 :let b:DeleteTrailingWhitespace = 0
命令放入该项目根目录中的 .lvimrc
中,仅此而已。