2013-03-16 40 views
2

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

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

回答

3

搜索模式的功能里面确实不污染的搜索历史(一次为整个功能,不是每个:s)。您可以通过在该功能的末尾添加以下内容来解决此问题:

:call histdel('search', -1) 
+0

这似乎有帮助 - 谢谢! – kguest 2013-03-18 16:39:06

0

我需要前缀与“沉默”命令替换命令,改变TidyUpFormatting功能:从:substitution

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