2

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

有没有我可以使用的标志,或者确实有更好的方法来做到这一点,这样这些替换就不会“泄露”?

4

2 回答 2

3

Search patterns from :substitution inside a function indeed do pollute the search history (once for an entire function, not for every :s). You can remedy this by adding this at the end of the function:

:call histdel('search', -1)
于 2013-03-16T16:03:29.717 回答
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
于 2013-03-16T15:03:47.823 回答