¿Cómo puedo habilitar la salida en color para OSX diff?

33

Necesito diferenciar dos archivos (no dos versiones del mismo archivo, sin embargo, son rastreados por git, pero eso no está relacionado) y me gustaría obtener una salida en color, ¿cómo puedo lograr eso?

$ diff file_1 file_2

1,9d0
< <script ... >
<     // more code
< </script>

$ 

El código anterior me muestra la diferencia entre esos archivos, sin embargo, sin ningún color. Para diferenciales más largos que es difícil de leer.


Alternativamente, ¿hay alguna manera para que git (con el que tenga una buena salida de color) difunda dos archivos diferentes (no cambios en un archivo)?

OSX (10.7.5)

miphe
fuente

Respuestas:

39

Perl tiene un envoltorio colordiff mediocre para diff, pero prefiero grc (colorante genérico) .

Con grc (colorizer genérico) , puede escribir sus propios contenedores para diferentes tipos de comandos o entradas (si le gusta ese tipo de cosas).

A continuación, grcse ejecuta en /var/log/syslog(en la configuración, este archivo está configurado con un esquema de color determinado), donde resalta procesos, pids, IP y "connect".

Por supuesto, se recomienda usar un alias para no olvidar:

alias diff="/usr/bin/grc /usr/bin/diff"

grc corriendo contra syslog


Si tiene git, es posible que solo quiera usarlo, lo que permite un uso muy robusto diff, incluso entre ramas.

git diff master:cogs/foo.txt branch:widgets/bar.txt

No tiene que usar git diffdentro de un repositorio, puede usarlo solo para archivos normales.ingrese la descripción de la imagen aquí

git diff old.txt new.txt

Como siempre, puedes diffusar alias para facilitar su uso.

alias diff="git diff"
jnovack
fuente
66
yay para git diff
chrismarx
8
git diffdebe estar en la parte superior de su respuesta! +1 por señalar que funciona incluso fuera de un repositorio.
Lucio Paiva
44
'git diff' no funciona en archivos genéricos, por lo que el alias diff para ser 'git diff' puede ser dañino
Anton Chikin
1
Esto no funciona para mí ... echo one > foo; echo two > bar; git diff foo barno produce salida, mientras que diff foo barproduce 1c1 < one --- > two (con el formato adecuado, por supuesto)
LarsR
git diffno funciona para, por ejemplo, tuberías
Piotr Findeisen
34

Cuando difiero archivos, casi siempre uso vim:

vim -d file_1 file_2

No solo usa colores, sino que alinea los archivos para que sea más fácil ver las líneas agregadas / eliminadas.

Philip Kearns
fuente
Wow ... Vim es una cosa hermosa.
Weston Ganger
@WestonGanger vim es realmente sorprendente, nunca deja de impresionarme
Philip Kearns
1
¡vim también funciona en archivos de parches git (muestra diferencias de color)!
Ryan
6

Para construir sobre la respuesta aprobada: grc funciona muy bien para esto. Es instalable con brew y colorea una serie de comandos de terminal listos para usar, siendo diff uno de ellos. Asi que...

brew install grc

... instala grc en su sistema. Luego debe configurar sus alias, la advertencia de preparación proporciona una solución. Simplemente agregue la siguiente línea a su .bashrco similar.

source "`brew --prefix`/etc/grc.bashrc"

Esto agregará actualmente los siguientes alias:

alias colourify="$GRC -es --colour=auto"
alias configure='colourify ./configure'
alias diff='colourify diff'
alias make='colourify make'
alias gcc='colourify gcc'
alias g++='colourify g++'
alias as='colourify as'
alias gas='colourify gas'
alias ld='colourify ld'
alias netstat='colourify netstat'
alias ping='colourify ping'
alias traceroute='colourify /usr/sbin/traceroute'
alias head='colourify head'
alias tail='colourify tail'
alias dig='colourify dig'
alias mount='colourify mount'
alias ps='colourify ps'
alias mtr='colourify mtr'
alias df='colourify df'
Mattias Bäcklund
fuente