我在vim中设置了一个预缓冲区写挂钩,在将缓冲区的内容保存到文件之前进行了一些小的调整。
if !exists("autocommands_loaded")
let autocommands_loaded = 1
autocmd BufWritePre *.php call TidyUpFormatting()
endif
func! TidyUpFormatting()
let save_cursor = getpos('.')
%s/\s\+$//ge
%s/\($\n\s*\)\+\%$//ge
%s/var_dump /var_dump/ge
%s/){/) {/ge
%s/( /(/ge
%s/if(/if (/ge
%s/while(/while (/ge
call setpos('.', save_cursor)
endfunction
这是在我的ftplugin / php.vim文件中。 我注意到TidyUpFormatting中的这些替换显示在所有替换的历史中 - 例如,如果我向上滚动我已经手动完成的替换列表,那么它们就是。
是否有一个我可以使用的旗帜,或者确实有更好的方法来做到这一点,以便这些替换不会“泄漏”?
答案 0 :(得分:3)
从函数内部的:substitution
搜索模式确实会污染搜索历史记录(一次表示整个函数,而不是每个:s
)。你可以通过在函数末尾添加它来解决这个问题:
:call histdel('search', -1)
答案 1 :(得分:0)
我需要使用“silent”命令为替换命令添加前缀,将TidyUpFormatting函数更改为:
func! TidyUpFormatting()
let save_cursor = getpos('.')
silent! %s/\s\+$//ge
silent! %s/\($\n\s*\)\+\%$//ge
silent! %s/var_dump /var_dump/ge
silent! %s/){/) {/ge
silent! %s/( /(/ge
silent! %s/if(/if (/ge
silent! %s/while(/while (/ge
call setpos('.', save_cursor)
endfunction