2012-01-14 57 views
11

我有2个大文件需要vimdiff。在vimdiff输出中,我想忽略显示diff但具有特定单词的行。在vimdiff输出中忽略带特定单词的行

例如在我的情况下,我想忽略在我的文件中前缀为WARNING:的所有行的差异。

感谢,

回答

0

你为什么不过滤调用方面Vimdiff前的文件吗?

grep -v "^WARNING" file1 > file1_w; 
grep -v "^WARNING" file2 > file2_w; 
vimdiff file1_w file2_w 
+1

这不允许直接编辑。一般来说,目的是直接编辑file2,除了忽略的行。 – ralfoide 2013-12-16 23:14:43

6

为了实现这一点,你可以添加以下到您的.vimrc(从例如一个头脑简单的修改的Vim内运行:h diffexpr找到):

set diffexpr=MyDiff() 
function! MyDiff() 
    let opt = "" 
    if exists("g:diffignore") && g:diffignore != "" 
     let opt = "-I " . g:diffignore . " " 
    endif 
    if &diffopt =~ "icase" 
     let opt = opt . "-i " 
    endif 
    if &diffopt =~ "iwhite" 
     let opt = opt . "-b " 
    endif 
    silent execute "!diff -a --binary " . opt . v:fname_in . " " . 
     \ v:fname_new . " > " . v:fname_out 
endfunction 

这是值得注意的是,由-I(或--ignore-matching-lines=)开关为diff提供的功能将只会忽略BOTH(或全部)文件中的行与此表达式匹配的任何已更改的行。

man diff--ignore-matching-lines=RE交换机上更多的细节和:h diffexpr VIM内对更多细节。

编辑:添加可选变量g:diffignore来控制要使用的模式。还用function!强制更换定义。

+0

我希望别人有这个想法。感谢您保存我需要自己破解我的.vimrc文件。我有时会分享它,所以我给了你应有的信用。 ;-) – 2014-03-20 22:02:17

+0

感谢编辑@Greg – sanmiguel 2014-04-15 09:17:25

+0

为了帮助相关的VIM新手,我如何设置'g:diffignore'?什么是'g'前缀? – drevicko 2016-04-08 09:00:30