unix - cambiar - ¿Cómo colorear dif en la línea de comando?




linux terminal colors (7)

Como wdiff acepta wdiff especifican la cadena al principio y al final de ambas inserciones y eliminaciones, puede usar secuencias de color ANSI como esas cadenas:

wdiff -n -w $'\033[30;41m' -x $'\033[0m' -y $'\033[30;42m' -z $'\033[0m' file1 file2

Por ejemplo, esta es la salida de comparar dos archivos CSV:

Ejemplo de https://www.gnu.org/software/wdiff/manual/html_node/wdiff-Examples.html

Cuando tengo un diff, ¿cómo puedo colorearlo para que se vea bien? Lo quiero para la línea de comando, así que por favor no hay soluciones GUI.


En realidad, parece haber otra opción (que solo noté recientemente, cuando me encontré con el problema descrito anteriormente):

git diff <file1> <file2>

Si tiene Git alrededor (que ya podría estar usando de todos modos), entonces podrá usarlo para comparar, incluso si los archivos en sí no están bajo el control de la versión. Si no está habilitado para usted por defecto, entonces habilitar el soporte de color aquí parece ser considerablemente más fácil que algunas de las soluciones alternativas mencionadas anteriormente.


Te sugiero que pruebes diff-so-fancy . Lo uso durante mi trabajo y seguro que parece genial a partir de ahora. Viene con muchas opciones y es realmente fácil de configurar las diferencias de la forma que desee.

Puedes instalarlo por:

sudo npm install -g diff-so-fancy

Uso grc (Generic Colouriser), que te permite colorear la salida de una serie de comandos, incluyendo diff .

Es una secuencia de comandos de python que se puede envolver alrededor de cualquier comando. Entonces, en lugar de invocar diff file1 file2 , deberías invocar grc diff file1 file2 para ver resultados coloreados. Tengo alias diff to grc diff para que sea más fácil.


Y para aquellas ocasiones en las que un yum install colordiff o un yum install colordiff apt-get install colordiff no es una opción debido a alguna restricción insensata más allá de su control inmediato, o simplemente se siente loco , puede reinventar la rueda con una línea de sed :

sed 's/^-/\x1b[41m-/;s/^+/\x1b[42m+/;s/^@/\x1b[[email protected]/;s/$/\x1b[0m/'

Tira eso en un script de shell y canaliza la salida de diff unificada a través de él.

Hace que los marcadores de hunk sean azules y resalte los nombres de archivo nuevos / antiguos y las líneas agregadas / eliminadas en fondo verde y rojo, respectivamente. 1 Y hará que los cambios finales en el espacio 2 sean más evidentes que el colordiff.

1 Incidentalmente, la razón para resaltar los nombres de archivo de la misma forma que las líneas modificadas es que para diferenciar correctamente entre los nombres de archivo y las líneas modificadas es necesario analizar correctamente el formato diff, que no es algo que se deba abordar con una expresión regular. Resaltarlos lo mismo funciona "suficientemente bien" visualmente y hace que el problema sea trivial. Dicho esto, hay algunas sutilezas interesantes .

2 Pero las pestañas no se arrastran. Al parecer, las pestañas no tienen su conjunto de fondo, al menos en mi xterm. Sin embargo, hace que los cambios de tabulación contra espacio se destaquen un poco.


diff --color opción diff --color se agregó a GNU diffutils 3.4 (2016-08-08)

Esta es la implementación predeterminada de diff en la mayoría de las distribuciones, que pronto la recibirán. Ubuntu 18.04 tiene diffutils 3.6.

En 3.5 se ve así:

con:

diff --color -u \
  <(seq 6 | sed 's/$/ a/') \
  <(seq 8 | grep -Ev '^(2|3)$' | sed 's/$/ a/')

Aparentemente agregado en commit c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (Mar 2015).

También he solicitado la diferencia de nivel de palabra desde diff-highlight en: https://lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.html


Las páginas de manual para diff no sugieren ninguna solución para la colorización desde dentro de sí misma. Por favor, considere el uso de colordiff . Es una envoltura alrededor de diff que produce la misma salida que diff, excepto que aumenta la salida usando resaltado de sintaxis coloreada para aumentar la legibilidad:

diff old new | colordiff

o solo:

colordiff old new

Instalación:

  • Ubuntu / Debian: sudo apt-get install colordiff
  • OS X: brew install colordiff o port install colordiff




diff