less
сам не способен делать подсветку синтаксиса, согласно этой теме .
Тем не менее, git diff
приятно показывает цветной вывод меньше, его пейджер по умолчанию. Когда я перенаправляю вывод git diff
в файл, не отображаются цветовые escape-последовательности.
Знает ли он git diff
, куда он отправляется, и соответственно форматирует вывод? Как можно это сделать?
Я только что заметил, что git окрашивает diff
вывод (например git diff
), однако, он не знает, как вообще подсвечивать синтаксис. например
git show 415fec6:log.tex
не включает какой-либо TeX-подобный синтаксис.
Читая git
источники, я обнаружил следующие подсказки
в diff.h
:
int use_color;
Ранее я имел в виду подсветку синтаксиса , но это было не правильно. То, что я имею в виду, это выходная окраска, например
git diff --color=always | less -r
(илиless -R
для ANSI). Кстати: для других команд, которые не разбивают на страницы по умолчанию (git diff
делает), вы можете включить его:git -p some_git_command
Ответы:
Git использует,
isatty()
чтобы проверить, является ли stdout tty: это используется, чтобы увидеть, должен ли использоваться пейджер ( pager.c ), а также colors ( color.c ).источник
Бег:
показывает цвет ускользает.
Черт , я нашел его в
git
«Scolor.c
файла:источник
less
может поддерживать цвет-r
--raw-control-chars
и-R
--RAW-CONTROL-CHARS
Вы можете использовать Pythons,
pygmentize
чтобы сделать выделение и передать его.Чтобы объединить все это, настройте меньший фильтр, как описано в superuser
источник
git
на самом деле использует пигментирование? Потому что это не указано как зависимость.git diff
дочернийless
процесс не добавляется ни одна опция (ни,-R
ни-r
). Тем не менее, я не знаю, вызывает ли git его специальным образом, и поэтому аргументы не видны вhtop
.git
выводит код выхода цвета это сам. Это также написаноc
так, добавление Python будет огромной зависимостью. Это может быть в состоянии контролироватьless
через окружающую средуLESS
env var?