2012-01-14 38 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