2012-01-14 3 views

risposta

0

Perché non filtrare i file prima di richiamare vimdiff?

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

Ciò non consente la modifica diretta. In generale lo scopo sarebbe quello di modificare direttamente file2, ad eccezione delle righe ignorate. – ralfoide

6

Al fine di raggiungere questo obiettivo, si potrebbe aggiungere il seguente al vostro .vimrc (una semplice modifica di mente dall'esempio trovato eseguendo :h diffexpr da vim):

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 

E 'interessante notare che il la funzionalità fornita dallo switch -I (o --ignore-matching-lines=) per diff ignorerà SOLO le righe modificate in cui la riga in BOTH (o tutti) i file corrisponde a questa espressione.

Vedere man diff per ulteriori dettagli sull'interruttore --ignore-matching-lines=RE e :h diffexpr all'interno di Vim per ulteriori dettagli su questo.

MODIFICA: aggiunta la variabile opzionale g:diffignore per controllare quale modello utilizzare. Utilizzato anche function! per forzare la sostituzione sulla definizione.

+0

Speravo che qualcun altro avesse questa idea. Grazie per avermi salvato il bisogno di hackerare il mio .vimrc da solo. Lo condivido a volte, quindi ti ho dato il dovuto credito. ;-) –

+0

Grazie per la modifica @Greg – sanmiguel

+0

Per aiutare un novizio VIM relativo, come impostare 'g: diffignore'? Qual è il prefisso 'g'? – drevicko