Como ativar a saída colorida para diferenças OSX?

33

Eu preciso diferenciar dois arquivos (não duas versões do mesmo arquivo, eles são rastreados pelo git, mas isso não tem relação) e eu gostaria de obter uma saída colorida, como posso conseguir isso?

$ diff file_1 file_2

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

$ 

O código acima mostra a diferença entre esses arquivos, porém sem cores. Para diferenças mais longas é difícil de ler.


Como alternativa, existe uma maneira de o git (com o qual eu tenho uma boa saída de cores) diferenciar dois arquivos diferentes (não alterações em um arquivo)?

OSX (10.7.5)

miphe
fonte

Respostas:

39

O Perl tem um empacotador sem brilho para o diff, mas eu prefiro o grc (colorizador genérico) .

Com o grc (colorizador genérico) , você pode escrever seus próprios invólucros para diferentes tipos de comandos ou entradas (se você gosta desse tipo de coisa).

Abaixo, grcestá sendo executado /var/log/syslog(na configuração, esse arquivo está definido para um determinado esquema de cores), onde destaca processos, pids, IPs e "connect" s.

Obviamente, é recomendável usar um alias para não esquecer:

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

grc rodando no syslog


Se você tem o git, você pode apenas querer usá-lo, o que permite um uso muito robusto diff, mesmo entre ramos.

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

Você não precisa usar git diffdentro de um repositório, pode usá-lo apenas para arquivos regulares.insira a descrição da imagem aqui

git diff old.txt new.txt

Como sempre, você pode diffusar o alias para facilitar o uso.

alias diff="git diff"
jnovack
fonte
6
yay para git diff
chrismarx
8
git diffdeve estar no topo da sua resposta! +1 por apontar que funciona mesmo fora de um repositório.
Lucio Paiva
4
'git diff' não funciona em arquivos genéricos tão aliasing diff para ser 'git diff' pode ser prejudicial
Anton Chikin
1
Isso não funciona para mim ... echo one > foo; echo two > bar; git diff foo barnão produz nenhuma saída, enquanto que diff foo barproduz 1c1 < one --- > two (com a formatação adequada, é claro)
LarsR
git diffnão funciona para, por exemplo, tubos
Piotr Findeisen
34

Ao diferenciar arquivos, quase sempre uso o vim:

vim -d file_1 file_2

Ele não apenas usa cores, mas alinha os arquivos, tornando mais fácil ver as linhas adicionadas / removidas.

Philip Kearns
fonte
Uau ... Vim é uma coisa linda.
Weston Ganger
@WestonGanger vim é realmente incrível, nunca deixa de me impressionar
Philip Kearns
1
O vim também funciona em arquivos de correção git (mostra diferenças coloridas)!
Ryanman
6

Para desenvolver a resposta aprovada: o grc funciona muito bem para isso. É instalável com o brew e coloriza diversos comandos do terminal, sendo um deles o diff. Tão...

brew install grc

... instala o grc no seu sistema. Então você precisa configurar seus apelidos, a advertência de fermentação fornece uma solução. Basta adicionar a seguinte linha ao seu .bashrcou similar.

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

No momento, isso adicionará os seguintes aliases:

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
fonte