Diff y Neovim con DiffView

Este es uno de los capítulos del tutorial Neovim. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

Si bien el modo diff de Vim es mas que interesante, probablemente no sea la forma más cómoda de gestionar ni de ver todos los archivos que tienes modificados. Con DiffView tienes todas las ventajas de diff, pero además tienes una interfaz que te ayudará con esos cambios mas complejos donde hay implicados mas de un archivo, o donde es mas difícil saber exactamente que has cambiado.

No solo esto, sino que además Diffview, te ayudará en los procesos de merge y para acceder al historial.

Te tengo que confesar que este complemento para Neovim, me tiene completamente fascinado por las opciones y posibilidades que ofrece, y sobre todo, por la facilidad de uso.

Diff y Neovim con DiffView

Diff y Neovim con DiffView

Requisitos

Para funcionar con DiffView es necesario cumplir con los siguientes requisitos,

  • Git ≥ 2.31.0
  • Neovim ≥ 0.7.0
  • plenary.nvim
  • nvim-web-devicons (optional) For file icons

Instalación

La instalación con Packer es tremendamente sencilla. Tan solo tienes que añadir la siguiente línea,

use { 'sindrets/diffview.nvim', requires = 'nvim-lua/plenary.nvim' }

Uso y funcionamiento

Una vez instalado no tienes que hacer nada mas que ir a cualquiera de tus repositorios y entrar en Neovim. A partir de aquí, vas a la línea de comandos y ejecutas :DiffViewOpen, y se abrirán tres paneles.

El panel de mas a la izquierda te muestra todos los comandos en lo diferentes archivos que se encuentran en ese repositorio. Y los dos paneles de la derecha te muestran para cada uno de los archivos los diferentes cambios que existen.

Para navegar entre los diferentes archivos, simplemente tienes que utilizar tab o mayúsculas-tab, en función de si quieres ir hacia adelante o hacia atrás respectivamente.

Pero no solo esto, sino que además tienes la posibilidad de realizar comparaciones con otros puntos de tu historial en git, como por ejemplo,

  • :DiffviewOpen
  • :DiffviewOpen HEAD~2
  • :DiffviewOpen HEAD~4..HEAD~2
  • :DiffviewOpen d4a7b0d
  • :DiffviewOpen d4a7b0d^!
  • :DiffviewOpen d4a7b0d..519b30e
  • :DiffviewOpen origin/main...HEAD

Además del comando :DiffviewOpen tienes a su opuesto DiffviewClose que se encarga de cerrar el actual diffview, aunque esto también lo puedes hacer con :tabclose. Y algunos otros como,

  • :DiffviewToggleFiles oculta o muestra el panel donde se encuentran todos los archivos modificados.
  • :DiffviewFocusFiles muestra el panel de información.
  • :DiffviewRefresh actualiza el panel.

En el caso de que hayas modificado un archivo y lo quieras restaurar a su origen, es tan sencillo que desde el panel, pulses la combinación de teclas Mayúsculas-x. Simplemente con esto lo devolverás a su estado original.

File History

La vista File History te permite listar todos los commits realizados y a su vez ver los cambios que se han realizado. Estos cambios los ves además mediante una vista diferenciada, lo que te permitirá apreciar fácilmente los mismos. Así, por ejmplo,

  • :DiffviewFileHistory te muestra todos los commits de la rama en curso
  • :DiffviewFileHistory % te muestra todos los commits del archivo en curso
  • :DiffviewFileHistory ruta/a/un/archivo.txt lo mismo pero apuntando a un archivo concreto
  • :DiffviewFileHistory --base=HEAD~2 aquí cambias la base de referencia

Merge Tool

Y por supuesto, y como no podía ser de otra forma, también tiene su herramienta para hacer merge, y esto te puedo decir que es una auténtica gozada. Ahora si que no hay opción de equivocarse (a lo mejor me he venido un poco arriba). Pero, lo que te puedo garantizar, es que con esta herramienta el realizar un merge con conflictos no es tan problemático. Es bastante cómodo de hacer.

Así en el caso de que tengas un conflicto, al abrir :DiffviewOpen verás cuatro paneles. El de mas a la izquierda se corresponde con el panel en el que se muestran todos los archivos afectados y las correspondientes estadísticas. En los siguientes tres paneles te encontrarás lo siguiente,

  • El panel de mas a la izquierda se corresponde con tus cambios locales. Además está identificado fácilmente como nuestro (ours).
  • En cambio en el panel de mas a la derecha se corresponden con los cambios que se encuentran en el repositorio.
  • Por último, en el panel central verás tanto los cambios remotos como los locales.

Para resolver el problema, simplemente tienes que utilizar los siguientes atajos de teclado

  • <leader>co apuesta por nuestros cambios
  • <leader>ct apuesta por los cambios remotos

El vídeo

Y todo esto que te he contado, igual pero en vídeo

Conclusión

Simplemente se trata de una herramienta imprescindible…, o casi. Aquí depende del uso de cada uno y del flujo de trabajo que cada uno tenga interiorizado. Pero sea como fuere, es una herramienta para tener en cuenta, y en su caso, integrarla, porque estoy convencido que te ayudará enormemente para trabajar con repositorios git.


Más información,

2 comentarios en “Diff y Neovim con DiffView

  1. EM
    Ema hace 2 años

    Gracias lorenzo. siempre vengo a tu canal y tu blog ccuando tengo dudas o algun problema.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *