Cuando tengo un diff, ¿cómo puedo colorearlo para que se vea bien? Lo quiero para la línea de comandos, así que no hay soluciones GUI.
unix
command-line
colors
diff
daniel kullmann
fuente
fuente
Respuestas:
Las páginas de manual para
diff
sugerir no hay solución para la coloración desde dentro de sí mismo. Por favor considere usarcolordiff
. Es un contenedordiff
que produce la misma salida que diff, excepto que aumenta la salida usando resaltado de sintaxis coloreada para aumentar la legibilidad:o solo:
Instalación:
sudo apt-get install colordiff
brew install colordiff
oport install colordiff
fuente
less -R
, que muestra las secuencias de escape para los colores correctamente.-y
opción para habilitar) ☹ Lavimdiff
sugerencia a continuación probablemente sea una mejor maneracolordiff
funciona biensvn diff | colordiff
(es decir, en situaciones en las que solo tiene la diferencia, no los dos archivos que se difunden).-y
soporte de lado a lado ( ).Use Vim :
O mejor aún, VimDiff (o
vim -d
, que es más corto de escribir) mostrará diferencias entre dos, tres o cuatro archivos uno al lado del otro.Ejemplos:
fuente
ctrl-c
yctrl-x
tiene otros usos en Vim.ctrl-q
Es capturado por muchas terminales. Vea Escribir y dejar de fumar para encontrar la forma que mejor se adapte a sus necesidades.zsh
? No reconozco=(...)
constructo. En segundo lugar, lo teníadiff -ur a b
en mente.=(...)
se reemplaza con el nombre de un archivo que contiene su salida.En realidad, parece haber otra opción (que solo noté recientemente, cuando me encontré con el problema descrito anteriormente):
Si tiene Git (que de todos modos ya podría estar usando), podrá usarlo para comparar, incluso si los archivos en sí no están bajo el control de versiones. Si no está habilitado para usted de manera predeterminada, habilitar el soporte de color aquí parece ser considerablemente más fácil que algunas de las soluciones alternativas mencionadas anteriormente.
fuente
git diff <(xxd file1) <(xxd filed)
no funciona.git help diff
. Entonces, si tu git diff está vacío, intentacd
salir de donde estás.git config color.diff auto
git diff --no-index
para comparar dos archivos.diff --color
La opción se agregó a GNU diffutils 3.4 (2016-08-08)Esta es la
diff
implementación predeterminada en la mayoría de las distribuciones, que pronto la obtendrá.Ubuntu 18.04 tiene
diffutils
3.6 y por lo tanto lo tiene.En 3.5 se ve así:
Probado:
Aparentemente agregado en commit c0fa19fe92da71404f809aafb5f51cfd99b1bee2 (Mar 2015).
Diferencia de nivel de palabra
Al igual
diff-highlight
. Parece que no es posible, solicitud de función: https://lists.gnu.org/archive/html/diffutils-devel/2017-01/msg00001.htmlHilos relacionados:
ydiff
lo hace sin embargo, ver más abajo.ydiff
nivel de palabra de lado a lado diffhttps://github.com/ymattw/ydiff
¿Es este el nirvana?
Salir:
Si las líneas son demasiado estrechas (80 columnas predeterminadas), ajuste a la pantalla con:
Contenido de los archivos de prueba:
una
si
ydiff
Integración Gitydiff
se integra con Git sin ninguna configuración requerida.Desde el interior de un repositorio de git, en lugar de
git diff
, puedes hacer solo:y en lugar de
git log
:Ver también: ¿Cómo puedo obtener una diferencia de lado a lado cuando hago "git diff"?
Probado en Ubuntu 16.04, git 2.18.0, ydiff 1.1.
fuente
There is no word-highlighting, yet
- ¿alguna actualización? Esto es para lo que llegué a esta pregunta (quiero unagrep --color
salida diferencial similar).git diff --color
funciona también. Útil cuando se trabaja sobre ssh.diff --color=always | less -R
Y para aquellas ocasiones en las que a
yum install colordiff
o anapt-get install colordiff
no es una opción debido a alguna limitación insana más allá de su control inmediato, o simplemente se siente loco , puede reinventar la rueda con una línea de sed:Lance eso en un script de shell y canalice la salida diff unificada a través de él.
Hace que los marcadores de trozos sean azules y resalta nombres de archivo nuevos / antiguos y líneas agregadas / eliminadas en fondo verde y rojo, respectivamente. 1 Y hará que los cambios en el espacio posterior 2 sean más evidentes que el colordiff.
1 Incidentalmente, la razón para resaltar los nombres de archivo de la misma manera que las líneas modificadas es que para diferenciar correctamente los nombres de archivo y las líneas modificadas se requiere analizar correctamente el formato diff, que no es algo que se deba abordar con una expresión regular. Destacarlos de la misma manera funciona "suficientemente bien" visualmente y hace que el problema sea trivial. Dicho esto, hay algunas sutilezas interesantes .
2 Pero no pestañas finales. Aparentemente, las pestañas no tienen su fondo establecido, al menos en mi xterm. Sin embargo, hace que los cambios de tabulación vs espacio se destaquen un poco.
fuente
sed "s/^-/`echo -e \"\x1b\"`[41m-/;s/^+/`echo -e \"\x1b\"`[42m+/;s/^@/`echo -e \"\x1b\"`[34m@/;s/$/`echo -e \"\x1b\"`[0m/"
(aunque espero que haya una mejor manera).Puede cambiar la configuración de subversion para usar colordiff
~ / .subversion / config.diff
vía: https://gist.github.com/westonruter/846524
fuente
Color, salida de nivel de palabra
diff
Esto es lo que puede hacer con el script a continuación y el resaltado de diferencias :
(Crédito a la respuesta de @ retracile para el
sed
resaltado)fuente
vim
, use un complemento, por ejemplo, diffchar .Yo uso
grc
(Colouriser genérico), que le permite colorear la salida de una serie de comandos incluidosdiff
.Es un script de Python que se puede envolver alrededor de cualquier comando. Entonces, en lugar de invocar
diff file1 file2
, invocaríagrc diff file1 file2
para ver la salida coloreada. He aliasdiff
paragrc diff
que sea más fácil.fuente
fork()
llamadas, aunque es probable que funcione con WSL.Aquí es otra solución que invoca
sed
para insertar las secuencias de escape ANSI apropiados para los colores para mostrar los+
,-
y@
líneas en rojo, verde, y cian, respectivamente.A diferencia de las otras soluciones a esta pregunta, esta solución no explica explícitamente las secuencias de escape ANSI. En su lugar, invoca los comandos
tput setaf
ytput sgr0
para generar las secuencias de escape ANSI para establecer un color apropiado y restablecer los atributos del terminal, respectivamente.Para ver los colores disponibles para cada argumento
tput setaf
, use este comando:Así es como se ve la salida:
Aquí está la evidencia de que los comandos
tput setaf
ytput sgr0
generan las secuencias de escape ANSI apropiadas:fuente
Como
wdiff
acepta argumentos que especifican la cadena al principio y al final de ambas inserciones y eliminaciones, puede usar secuencias de color ANSI como esas cadenas:Por ejemplo, este es el resultado de comparar dos archivos CSV:
Ejemplo de https://www.gnu.org/software/wdiff/manual/html_node/wdiff-Examples.html
fuente
colordiff
ahora (1.0.16) comprendewdiff
, por lo que puede también acaba de tubería:wdiff -n f1 f2 | colordiff
.wdiff
debería fusionarse en diffutils ...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 muy fácil configurar sus diferencias de la manera que desee.
Puedes instalarlo de la siguiente manera:
o en Mac:
Luego, puede resaltar sus diferencias de esta manera:
fuente
Con el comando bat :
fuente
En versiones recientes de git en Ubuntu, puede habilitar el resaltado de diferencias con:
Y luego agregando esto a su
.gitconfig
:Es posible que el script se encuentre en otro lugar en otras distribuciones, puede usar
locate diff-highlight
para averiguar dónde.fuente
Diferencia de color a nivel de caracteres: instalar ccdiff
fuente