2012-01-14 20 views

Respuesta

0

¿Por qué no filtrar los archivos antes de invocar vimdiff?

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

Esto no permite la edición directa. El objetivo general sería editar el archivo2 directamente en su lugar, a excepción de las líneas ignoradas. – ralfoide

6

Para lograr esto, se podía añadir lo siguiente a su .vimrc (una modificación simple-mente a partir del ejemplo se encuentra ejecutando :h diffexpr dentro de 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 

Es de destacar que la la funcionalidad provista por el interruptor -I (o --ignore-matching-lines=) para diff SÓLO ignorará las líneas cambiadas donde la línea en AMBOS (o todos) archivos coincida con esta expresión.

Consulte man diff para obtener más información sobre el interruptor --ignore-matching-lines=RE y :h diffexpr dentro de vim para obtener más detalles al respecto.

EDITAR: Agregó la variable opcional g:diffignore para controlar qué patrón usar. También se usó function! para forzar el reemplazo en la definición.

+0

Esperaba que alguien más tuviera esta idea. Gracias por salvarme al necesitar hackear mi .vimrc yo mismo. Lo comparto algunas veces, así que le he dado el debido crédito. ;-) –

+0

Gracias por la edición @Greg – sanmiguel

+0

Para ayudar a un novato VIM relativo, ¿cómo puedo configurar 'g: diffignore'? ¿Cuál es el prefijo 'g'? – drevicko

Cuestiones relacionadas