diff
, чтобы смотреть, какие строки изменены в файле. Иногда же мне хочется получить красивую распечатку этих самых изменений. Это можно сделать, скормив текстовый вывод diff
программке enscript
:$ diff -u файл1 файл2 | LANG=C enscript -Ediffu --color -o changes.ps && ps2pdf changes.ps && rm changes.ps && xpdf changes.pdf
или, в случае использования
svn
,$ svn diff | LANG=C enscript -Ediffu --color -o changes.ps && ps2pdf changes.ps && rm changes.ps && xpdf changes.pdf
Ключевой момент — это вызов enscript
, который создаёт файл changes.ps (параметр -o changes.ps
), где удалённые и добавленные строки подсвечены разными цветами (-color
), в соответствии с синтаксисом diff (-Ediffu
).Кстати, кроме подсветки синтаксиса diff-ов, enscript умеет подсвечивать и многие другие форматы файлов, включая большинство распространённых языков программирования. Загляните в
/usr/share/enscript/hl/
.Да и результат можно сохранить не только в PS, но и в HTML. Так, чтобы «раскрасить» файл с текстом программы на C++ можно сделать следующее:
$ cat hello.cc | enscript -Ecpp --color -whtml -o hello.html
А если сделать алиасalias hidiff="enscript -Ediffu --color -wansi -o -"
то смотреть «подкрашенный» diff можно прямо в терминале:$ svn diff | hidiff
К сожалению,
enscript
не работает с уникодом. Поэтому если файлы написаны по-русски в кодировке UTF-8 — ничего хорошего не выйдет. Да и дату, если локаль русская, он скорее всего попытается отобразить кракозябами… В общем, мне обычно надо сравнивать куски кода или текста на английском, где русских букв нет, и такого решения хватает.