Comment puis-je activer la sortie couleur pour OSX diff?

33

Je dois diff deux fichiers (pas deux versions du même fichier, ils sont cependant suivis par git, mais ce n'est pas lié) et je voudrais une sortie colorée, comment puis-je y parvenir?

$ diff file_1 file_2

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

$ 

Le code ci-dessus me montre la différence entre ces fichiers, mais sans aucune couleur. Pour les diffs plus longs, c'est difficile à lire.


Sinon, y a-t-il un moyen pour que git (avec lequel j'ai une belle sortie couleur) diffe deux fichiers différents (pas de modifications d'un fichier)?

OSX (10.7.5)

Miphe
la source

Réponses:

39

Perl a un wrapper colordiff terne pour diff, mais je préfère grc (colorizer générique) .

Avec grc (colorizer générique) , vous pouvez écrire vos propres wrappers pour différents types de commandes ou d’entrées (si vous aimez ce genre de chose).

Ci-dessous, l' grcexécution est exécutée /var/log/syslog(dans la configuration, ce fichier est défini sur un certain jeu de couleurs), où il met en surbrillance les processus, les pids, les adresses IP et les "connexions".

Bien sûr, il est recommandé d'utiliser un alias pour ne pas oublier:

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

grc en cours d'exécution contre syslog


Si vous avez git, vous voudrez peut-être simplement l'utiliser, ce qui permet une très grande robustesse diff, même entre branches.

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

Vous n'êtes pas obligé de l'utiliser git diffdans un référentiel, vous pouvez l'utiliser uniquement pour des fichiers normaux.entrez la description de l'image ici

git diff old.txt new.txt

Comme toujours, vous pouvez créer diffun alias pour plus de facilité.

alias diff="git diff"
Jnovack
la source
6
yay pour git diff
chrismarx
8
git diffdevrait être au sommet de votre réponse! +1 pour signaler que cela fonctionne même en dehors d'un référentiel.
Lucio Paiva
4
'git diff' ne fonctionne pas sur les fichiers génériques, donc l'aliasing diff pour être 'git diff' peut être nocif
Anton Chikin
1
Cela ne fonctionne pas pour moi ... echo one > foo; echo two > bar; git diff foo barne produit aucune sortie, alors que diff foo barproduit 1c1 < one --- > two (avec un formatage correct, bien sûr)
LarsR
git diffne fonctionne pas pour les tuyaux, par exemple
Piotr Findeisen le
34

Lorsque je diffère des fichiers, j'utilise presque toujours vim:

vim -d file_1 file_2

Non seulement il utilise des couleurs, mais il aligne les fichiers pour faciliter la visualisation des lignes ajoutées / supprimées.

Philip Kearns
la source
Wow ... Vim est une belle chose.
Weston Ganger
@WestonGanger vim est en effet incroyable, ne cesse jamais de m'impressionner
Philip Kearns
1
vim fonctionne aussi sur les fichiers de correctifs git (affiche color diff)!
Ryanan
6

Pour compléter la réponse approuvée: grc fonctionne très bien pour cela. Il est installable avec infusion et colorise un certain nombre de commandes terminales prêtes à l'emploi, le diff étant l'une d'entre elles. Alors...

brew install grc

... installe grc sur votre système. Ensuite, vous devez configurer vos alias, l’avertissement de brassage fournit une solution. Ajoutez simplement la ligne suivante à votre .bashrcou similaire.

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

Cela ajoutera actuellement les alias suivants:

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
la source