阻止vim函数中的替换泄漏到所有替换的历史中

时间:2013-03-16 13:45:32

标签: vim

我在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中的这些替换显示在所有替换的历史中 - 例如,如果我向上滚动我已经手动完成的替换列表,那么它们就是。

是否有一个我可以使用的旗帜,或者确实有更好的方法来做到这一点,以便这些替换不会“泄漏”?

2 个答案:

答案 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