13

vimdiff を取得する 2 つの大きなファイルがあります。vimdiff の出力で、diff を示す行を無視したいのですが、特定の単語があります。

たとえば、私の場合WARNING: 、ファイル内のプレフィックスを持つすべての行の diff を無視したいと考えています。

ありがとう、

4

3 に答える 3

8

これを実現するために、.vimrcに以下を追加することができます(:h diffexprvim内で実行することで見つかった例からの単純な変更):

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、両方(またはすべて)のファイルの行がこの式に一致する変更された行のみを無視することに注意してください。

スイッチの詳細とvim内man diffの詳細については、を参照してください。--ignore-matching-lines=RE:h diffexpr

g:diffignore編集:使用するパターンを制御するためのオプションの変数を追加しました。function!定義時に強制的に置換するためにも使用されます。

于 2012-04-03T13:30:40.833 に答える
2

vimdiff を呼び出す前にファイルをフィルタリングしないのはなぜですか?

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

Bashまたはzshを使用している場合は、1 つのコマンドで実行できます。

vimdiff <(grep -v "^WARNING" file1) <(grep -v "^WARNING" file2)
于 2012-01-14T11:38:01.823 に答える