Come posso abilitare l'output colorato per OSX diff?


33

Ho bisogno di diff due file (non due versioni dello stesso file, sono comunque monitorati da git, ma non è correlato) e vorrei un output colorato, come posso farlo?

$ diff file_1 file_2

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

$ 

Il codice sopra mi mostra la differenza tra quei file, tuttavia senza alcun colore. Per differenze più lunghe è difficile da leggere.


In alternativa, c'è un modo per git (con il quale ho un buon output a colori) di diffondere due file diversi (non le modifiche a un file)?

OSX (10.7.5)

Risposte:


39

Perl ha un wrapper Colordiff poco brillante per diff, ma preferisco grc (colorizer generico) .

Con grc (colorizer generico) , puoi scrivere i tuoi wrapper per diversi tipi di comandi o input (se ti piace quel genere di cose).

Di seguito, grcviene eseguito su /var/log/syslog(nella configurazione, questo file è impostato su una determinata combinazione di colori), in cui evidenzia processi, pid, IP e "connessione".

Naturalmente, si consiglia di utilizzare un alias in modo da non dimenticare:

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

grc in esecuzione contro syslog


Se hai git, potresti semplicemente voler usare quello, che consente un diffing molto robusto , anche attraverso i rami.

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

Non è necessario utilizzare git diffall'interno di un repository, è possibile utilizzarlo solo per file normali.inserisci qui la descrizione dell'immagine

git diff old.txt new.txt

Come sempre, puoi alias diffper facilità d'uso.

alias diff="git diff"

6
yay for git diff
chrismarx,

8
git diffdovrebbe essere in cima alla tua risposta! +1 per sottolineare che funziona anche al di fuori di un repository.
Lucio Paiva,

4
'git diff' non funziona su file generici, quindi l'aliasing diff su 'git diff' può essere dannoso
Anton Chikin,

1
Questo non funziona per me ... echo one > foo; echo two > bar; git diff foo bar non produce output, mentre diff foo barproduce 1c1 < one --- > two (con una formattazione corretta, ovviamente)
LarsR

git diffnon funziona ad es. per le pipe
Piotr Findeisen,

34

Quando diffondo file uso quasi sempre vim:

vim -d file_1 file_2

Non solo usa i colori, ma allinea i file, quindi è più facile vedere le linee aggiunte / rimosse.


Wow ... Vim è una cosa bellissima.
Weston Ganger

@WestonGanger vim è davvero sorprendente, non smette mai di impressionarmi
Philip Kearns,

1
vim funziona anche su file patch git (mostra diff colorato)!
Ryanman,


6

Per basarsi sulla risposta approvata: grc funziona alla grande per questo. È installabile con brew e colora un numero di comandi terminali pronti all'uso, di cui uno diff. Così...

brew install grc

... installa grc sul tuo sistema. Quindi è necessario impostare i tuoi alias, il caveat brew fornisce una soluzione. Aggiungi semplicemente la seguente riga alla tua.bashrc o simile.

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

Questo aggiungerà attualmente i seguenti 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'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.