Как включить цветной вывод для OSX diff?

33

Мне нужно проверить два файла (не две версии одного и того же файла, они, однако, отслеживаются git, но это не связано), и я хотел бы получить цветной вывод, как мне этого добиться?

$ diff file_1 file_2

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

$ 

Приведенный выше код показывает мне разницу между этими файлами, однако без каких-либо цветов. Для более длинных различий, которые трудно прочитать.


В качестве альтернативы, есть ли способ для git (с которым у меня есть хороший вывод цвета), чтобы различать два разных файла (не изменения в файл)?

OSX (10.7.5)

miphe
источник

Ответы:

39

Perl имеет тусклую оболочку colordiff для diff, но я предпочитаю grc (универсальный colorizer) .

С grc (универсальный colorizer) , вы можете написать свои собственные оболочки для различных типов команд или входов (если вам нравится такая вещь).

Ниже grcработает с /var/log/syslog(в конфиге, этот файл настроен на определенную цветовую схему), где он выделяет процессы, pids, IP-адреса и «подключения».

Конечно, рекомендуется использовать псевдоним, чтобы вы не забыли:

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

GRC работает против системного журнала


Если у вас есть git, вы можете просто использовать это, что позволяет очень надежно diffработать даже в разных ветках.

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

Вам не нужно использовать git diffв хранилище, вы можете использовать его только для обычных файлов.введите описание изображения здесь

git diff old.txt new.txt

Как всегда, вы можете использовать псевдоним diffдля удобства использования.

alias diff="git diff"
jnovack
источник
6
yay для git diff
chrismarx
8
git diffдолжен быть в верхней части вашего ответа! +1 за указание на то, что он работает даже вне хранилища.
Лусио Пайва
4
«git diff» не работает с общими файлами, поэтому наложение «diff» на «git diff» может быть вредным
Антон Чикин,
1
Это не работает для меня ... не echo one > foo; echo two > bar; git diff foo barпроизводит вывод, в то время как diff foo barпроизводит 1c1 < one --- > two (с надлежащим форматированием, конечно)
LarsR
git diffне работает, например, трубы
Петр Findeisen
34

При проверке файлов я почти всегда использую vim:

vim -d file_1 file_2

Он не только использует цвета, он выстраивает в линию файлы, чтобы было легче видеть добавленные / удаленные строки.

Филип Кернс
источник
Вау ... Вим прекрасная вещь.
Уэстон Гангер
@WestonGanger vim действительно потрясающий, он не перестает меня удивлять
Филипп Кернс
1
vim также работает с файлами патчей git (показывает цветной diff)!
Райанман
6

Основываясь на утвержденном ответе: grc отлично подходит для этого. Он устанавливается вместе с brew и раскрашивает несколько терминальных команд из коробки, одной из которых является diff. Так...

brew install grc

... устанавливает GRC в вашу систему. Затем вам нужно настроить свои псевдонимы, bave caveat предлагает решение. Просто добавьте следующую строку в ваш .bashrcили аналогичный.

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

В настоящее время будут добавлены следующие псевдонимы:

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'
Маттиас Беклунд
источник