Comparación más detallada dentro de una línea.

17

Yo uso vimdiffpara inspeccionar las diferencias entre los archivos, y algunas veces se echa de menos un poco. por ejemplo, si tengo los siguientes dos archivos:

//a.c
printf("Hello\n");

y:

//b.c
int i = printf("hello\n") + 3;

mostrándolos en vimdiffda:

ingrese la descripción de la imagen aquí

Lo que querré ver es que en bc hno está en mayúscula.

¿Hay alguna manera de decirle a vimdiff que compare (en esa línea) solo una parte (es decir, ignore el int i =y el + 3)?

elyashiv
fuente
44
El plugin diffchar es probablemente lo que necesita, pero no tengo experiencia con él. Quizás alguien con experiencia en usarlo pueda dar una respuesta buena y detallada (o tal vez una alternativa).
tokoyami

Respuestas:

15

No creo que esto lo pueda hacer Vim. De :h view-diffs(énfasis mío):

hl-DiffText DiffText Texto modificado dentro de una línea modificada.  Empuje
                                encuentra el primer personaje que es diferente,
                                y el último personaje que es diferente
                                (buscando desde el final de la línea).   los
                                el texto intermedio está resaltado.  Esto significa
                                que partes en el medio que siguen siendo el
                                igual se resaltan de todos modos.   Sólo "iwhite" de
                                'diffopt' se usa aquí.

La sugerencia de Tokoyami nos lleva un paso más cerca. Instalar diffchar( enlace de Github para aquellos que usan un cargador automático de complementos). Desde v4.7, con el complemento habilitado, Vim muestra automáticamente diferencias más exactas:

ingrese la descripción de la imagen aquí

  • Puede presionar F7(el mapa de teclas predeterminado) para alternar entre el habitual y el complemento. Reasignar con:

    nmap <silent> <key> <Plug>ToggleDiffCharAllLines
    

    reemplazando <key>con un código clave apropiado.

  • Puedes usar más colores:

    let g:DiffColors=100
    
muru
fuente
+1 pero "un paso más cerca" me parece demasiado conservador. Diffchar resuelve totalmente este problema de la OMI.
Sparhawk
@Sparhawk bien, no ignora los elementos comunes en una línea (OP quiere solo los cambios resaltados)
muru
No estoy seguro de entenderlo. ¿No se ignoran los elementos comunes en este ejemplo (por ejemplo, printfy ello)?
Sparhawk
1
@Sparhawk en este ejemplo, sí. Pero con cambios más complejos, rápidamente se vuelve desordenado.
muru
Ah, está bien, entonces es un poco defectuoso ... gracias por la información.
Sparhawk