Herramienta de comparación/diferenciación de archivos basada en consola

Estoy buscando algo que pueda instalar en un servidor Ubuntu que me permita comparar el contenido de PHP, Javascript, CSS, HTML y otros archivos de texto sin formato de una manera más presentable y comprensible que el diffcomando predeterminado.

Debe tener

  • Comparación lado a lado del contenido del archivo que indica líneas que son diferentes del archivo 1 al archivo 2
  • Ejecutar desde la consola (sin entorno de escritorio instalado)
  • Admite archivos de texto sin formato

Me gustaría tener

  • Colores utilizados para resaltar los cambios.
  • Desplazamiento sincronizado (las líneas de ambos archivos permanecen una al lado de la otra y visibles a medida que avanza en la comparación)
  • Indicación de cambios dentro de una línea (por ejemplo, comparar las líneas "una pregunta" con "esta es una pregunta" indicaría/resaltaría que "esto es" es la diferencia, en lugar de simplemente indicar que toda la línea tiene algo diferente) )

De manera óptima, me encantaría algo como la función de comparación de archivos de WinMerge:WinFusionar

para Ubuntu, pero entiendo que no todas las funciones pueden ser posibles para una aplicación solo para consola.

Respuestas (3)

vimdiff

vimdiff file1 file2

También puedes usarlo con git, por ejemplo:

git difftool --tool=vimdiff HEAD^ HEAD

vimdiff

Así que quieres una herramienta de diferenciación interactiva con características muy básicas. La respuesta obvia es Emacs (Ubuntu: emacs), que incluye a Ediff desde hace unos 20 años.

Abra los dos archivos que desea comparar y seleccione "Herramientas → Comparar (Ediff) → Dos búferes..." en el menú. O seleccione "Herramientas → Comparar (Ediff) → Dos archivos..." e ingrese los nombres de los archivos. Puede usar el comando ediff-bufferso ediff(alias de ediff-files) en su lugar (presione Alt+ X, luego escriba ediffy presione Enter). Los comandos principales en el modo Ediff son:

  • |para alternar entre mostrar los dos archivos uno encima del otro (predeterminado) o uno al lado del otro
  • npara pasar al siguiente bloque diferente de líneas
  • ppara pasar al bloque de líneas diferente anterior
  • qpara salir del modo Ediff
  • ?por ayuda
  • C-x o( Ctrl+ Xluego minúsculas O) para navegar entre los tres búferes (archivo 1, archivo 2 y el panel de control de Ediff).

Ediff también puede hacer diferencias de 3 vías si tiene un archivo de ancestro común y puede ayudar en las fusiones. Las entradas en el menú "Herramientas" deberían ser suficientes para comenzar; vea el manual para más detalles.

Emacs también puede extraer revisiones automáticamente de svn y otros sistemas de control de revisiones. Busque en el menú "Herramientas → Control de versiones" o en el manual para obtener más información.

Puede sentirse más cómodo usando la versión GUI de Emacs. Emacs funciona en todos los principales sistemas operativos (en Windows, uso EmacsW32 ) y puede acceder a archivos remotos de forma transparente a través de SSH (y otros métodos). Para abrir un archivo remoto a través de SSH, escriba /name-of-host:/path/to/filecomo nombre de archivo. En Windows, si está usando PuTTY para SSH, asegúrese de tener plinkinstalado y en Emacs PATH, y coloque (setq tramp-default-method "plink")su archivo ~/.emacs. Consulte el manual de Tramp para obtener más detalles.

Si te gusta diffpero quieres que sea un poco más fácil de entender y leer, hay colordiff- básicamente lo mismo que diffpero con resaltado en color.

Para obtener una comparación lado a lado usando diff o colordiff, puede agregar la -yopción. También puede usar sdiff: genera una comparación lado a lado un poco más limpia que diffcon la -yopción (al menos en Fedora, en Debian se ven más o menos iguales, aunque no estoy seguro de si eso es lo mismo para todos).

Resalta las palabras que son diferentes, en lugar de toda la línea.

También puede configurar el ancho de columna de la terminal para que coincida con su ancho/columnas actuales:

colordiff -y --width=$COLUMNS mylovelyfile1.txt mylovelyfile2.txt