unix - cambiar - linux prompt colors
¿Cómo colorear dif en la línea de comando? (10)
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.
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
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.
Puedes cambiar la configuración de subversion para usar colordiff
~ / .subversion / config.diff
### Set diff-cmd to the absolute path of your ''diff'' program.
### This will override the compile-time default, which is to use
### Subversion''s internal diff implementation.
-# diff-cmd = diff_program (diff, gdiff, etc.)
+diff-cmd = colordiff
a través de: https://gist.github.com/westonruter/846524
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[34m@/;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
Coloreado, salida a nivel de palabra
Esto es lo que puede hacer con el siguiente script y diff-highlight :
#!/bin/sh -eu
# Use diff-highlight to show word-level differences
diff -U3 --minimal "$@" |
sed ''s/^-//x1b[1;31m-/;s/^+//x1b[1;32m+/;s/^@//x1b[1;34m@/;s/$//x1b[0m/'' |
diff-highlight
(Crédito a la respuesta de @ retracile para el resaltado)
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
oport install colordiff