Veamos cómo usar vimdiff para comparar las diferencias entre dos archivos de texto

Con la herramienta vimdiff podremos comparar las diferencias entre dos archivos de texto y aplicar cambios en uno u otro fichero con toda la potencia del editor Vim.
En estos días (por un proyecto en el que ando metido y del que pronto espero dar más noticias en el blog) tengo la necesidad de comparar las diferencias que existen entre dos archivos.
Para esas tareas siempre había usado Kompare, pero esta vez he querido probar vimdiff y la verdad es que me está gustando mucho. Veamos cómo usarlo.
Este artículo es una nueva entrega del curso “improVIMsado” que desde hace meses vengo publicando en mi blog sobre el editor Vim y que puedes seguir en estos enlaces:
- https://victorhckinthefreeworld.com/tag/vim/
- https://victorhck.gitlab.io/comandos_vim/articulos.html
Y para aprender Vim (de la manera más inteligente) aquí tienes esta útil guía:
Con vimdiff puedes comparar dos, tres o cuatro archivos. En mi caso y en el ejemplo vamos a comparar únicamente las diferencias entre dos archivos. En el ejemplo compararemos un archivo llamado capítulo1.md
que me han enviado por correo con otro con el mismo nombre que tengo en un repositorio git en una carpeta.
Para ello ejecutamos: vimdiff <ruta/del/archivo1> <ruta/del/archivo2>
de esta manera:
vimdiff capítulo1.md Git/libro/capítulo1.md
Se nos abrirá una instancia del editor Vim, con una división vertical de la pantalla. En la parte izquierda tendremos el primer archivo y en la parte derecha el segundo archivo.
Si en vez de una división vertical, que es la opción predeterminada, queremos una división horizontal de la pantalla de comparación de archivos, deberemos añadir la opción o
de esta forma:
vimdiff -o capítulo1.md Git/libro/capítulo1.md
De manera predeterminada, en vimdiff no se cortan las líneas de texto al final de la pantalla, por lo que si es una línea de texto larga, se mostrará toda seguida, cosa que a mí no me gusta.
Para que vimdiff nos ajuste la longitud de las líneas de texto al ancho de la pantalla y la continúe en la línea siguiente, yo he añadido en mi archivo de configuración .vimrc
lo siguiente:
" ajusta la longitud de las líneas a la pantalla en vimdiff
au VimEnter * if &diff | execute 'windo set wrap' | endif
Bueno, abiertos ambos archivos en Vim, con el cursor en una parte de la pantalla podemos ir navegando por el texto hasta encontrar una zona donde vimdiff nos mostrará las diferencias que ha encontrado entre ambos archivos.
Podemos desplazarnos con las teclas y comandos de movimiento de Vim y ambos textos se desplazarán de manera sincronizada o podemos navegar entre las diferencias con los comandos ]c
para ir a la siguiente diferencia o [c
para ir a la diferencia anterior.
El cursor lo podemos situar en cualquiera de las dos divisiones, para ello igual que en Vim, podemos «saltar» de una a otra división con Ctrl+W W
Una vez situado el cursor sobre una de las diferencias en la ventana que queramos, podemos revisar el texto resaltado que nos muestra las diferencias y editar el archivo en cuestión (cualquiera de los dos) tal como haríamos en vim.
Pero si lo que queremos es una vez revisadas las diferencias, incorporar las modificaciones de uno u otro archivo en el archivo contrario, tenemos los comandos diffput
y diffget
Veamos cómo usarlos.
Imaginemos que tenemos el cursor en la división de la izquierda en una diferencia entre ambos archivos y después de revisarlos vemos que queremos hacer que el archivo en el que está el cursor incorpore las diferencias del otro archivo, para eso ejecutaremos diffget
Ahora imaginemos que queremos que la diferencia del archivo en el que tenemos el cursor se aplique en el otro archivo, para eso ejecutaremos diffput
Cuando hayamos de revisar todas las diferencias, ya podremos salir de vimdiff pero antes deberemos guardar los cambios que hemos realizado en los archivo, para eso como en Vim, podremos hacerlo mediante :wqa
O el método que prefieras (ZZ
, :x
, o !qa
si queremos salir sin guardar los cambios)
Al igual que en Vim, si hemos hecho un cambio ya sea con diffget
o diffput
siempre podremos revertirlo mediante el comando u
y volverlo a rehacer con Ctrl+R
Si no conocías la herramienta, te recomiendo darle una oportunidad a la hora de comparar archivos con los comandos vistos en el tutorial y comprobar lo sencillo y potente que es vimdiff

hola, como seria la sintaxis para que el 2° archivo que esta en la web, digamos en https://midominio/mipágina.ext sea comparado con el que esta en mi PC.
me tira un mje. que no lo entiendo y muestra esa 2°ventana en blanco…
gracias
hola.
Bueno, los dos archivos deberían estar en tu equipo. Descarga el archivo de la red y compáralos…
Saludos!
Veo que estás siguiendo buena parte de los tutoriales! 🙂
Saludos.
si, estoy aprendiendo…. en cuanto a comparar con algo en un servidor, funciona poniendo la URL si es https://…. funciona, No funciona para gopher://
Aune 2 de tus tutoriales en 1 y logre que vimdiff compare 2 archivos, uno en la PC y el otro en el servidor… usé tu tuto sobre usar ssh y este de vimdiff y salió bien….
vimdiff intro.txt scp://jazei@texto-plano.xyz//public_gopher/intro.txt
mis 2 archivos son 1) local: intro.txt, 2) en el servidor urlservidor/rta/intro.txt
como se ve en el comando.
Sugiero que lo agregues al tuto vimdiff posible par acomparar 2 archivos espejo local-servidor.
Hola.
Con tu comentario en el artículo ya queda reflejado.
Muchas gracias por tu aporte.
Saludos