Jak mogę włączyć kolorowe wyjście dla OSX diff?

33

Potrzebuję różnicować dwa pliki (nie dwie wersje tego samego pliku, są one jednak śledzone przez git, ale to nie jest powiązane) i chciałbym uzyskać kolorowe wydruki, jak to osiągnąć?

$ diff file_1 file_2

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

$ 

Powyższy kod pokazuje mi różnicę między tymi plikami, jednak bez żadnych kolorów. W przypadku dłuższych różnic trudny do odczytania.


Alternatywnie, czy istnieje sposób, aby git (z którym mam ładne wyjście kolorów) różnicował dwa różne pliki (bez zmian w pliku)?

OSX (10.7.5)

miphe
źródło

Odpowiedzi:

39

Perl ma słabe opakowanie colordiff dla diff, ale ja wolę grc (ogólny kolorizer) .

Za pomocą grc (ogólny koloryzator) możesz pisać własne opakowania dla różnych rodzajów poleceń lub danych wejściowych (jeśli ci się podobają).

Poniżej grcdziała przeciwko /var/log/syslog(w konfiguracji ten plik ma określony schemat kolorów), w którym wyróżnia procesy, PID, adresy IP i połączenia.

Oczywiście zaleca się użycie aliasu, aby nie zapomnieć:

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

grc działa przeciwko syslog


Jeśli masz git, możesz po prostu z niego skorzystać, co pozwala na bardzo solidne działanie diff, nawet między gałęziami.

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

Nie musisz korzystać git diffz repozytorium, możesz go używać tylko do zwykłych plików.wprowadź opis zdjęcia tutaj

git diff old.txt new.txt

Jak zawsze, możesz użyć aliasu diffdla łatwości użycia.

alias diff="git diff"
jnovack
źródło
6
yay dla git diff
chrismarx
8
git diffpowinien być na górze twojej odpowiedzi! +1 za wskazanie, że działa nawet poza repozytorium.
Lucio Paiva,
4
„git diff” nie działa na ogólnych plikach, więc aliasing diff na „git diff” może być szkodliwy
Anton Chikin
1
To nie działa dla mnie ... echo one > foo; echo two > bar; git diff foo barnie produkuje danych wyjściowych, podczas gdy diff foo barprodukuje 1c1 < one --- > two (oczywiście z odpowiednim formatowaniem)
LarsR
git diffnie działa np. na rury
Piotr Findeisen
34

Podczas różnicowania plików prawie zawsze używam vim:

vim -d file_1 file_2

Nie tylko używa kolorów, ale także wyrównuje pliki, dzięki czemu łatwiej jest zobaczyć linie dodane / usunięte.

Philip Kearns
źródło
Wow ... Vim to piękna rzecz.
Weston Ganger
@WestonGanger vim jest naprawdę niesamowity, nigdy nie przestaje mnie imponować
Philip Kearns
1
vim działa również na plikach łatek git (pokazuje kolorową różnicę)!
ryanman
6

W oparciu o zatwierdzoną odpowiedź: grc świetnie się do tego nadaje . Można go zainstalować z naparem i koloruje szereg poleceń terminala po wyjęciu z pudełka, przy czym diff jest jednym z nich. Więc...

brew install grc

... instaluje grc w twoim systemie. Następnie musisz skonfigurować swoje aliasy, zastrzeżenie dotyczące naparu stanowi rozwiązanie. Po prostu dodaj następujący wiersz do swojego .bashrclub podobnego.

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

Spowoduje to dodanie następujących aliasów:

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
źródło