Страницы

Поиск по вопросам

пятница, 16 ноября 2018 г.

Ломаются цвета в консоли при работе с git

Почему-то при работе с git в *nix-like консоли ломаются цвета: весь текст выводится дефолтным цветом, а строки, которые должны быть цветными, оказываются обрамлены кодами цветов:
ESC[33mcommit 53f26c1fa4dc4f66df6a0fd01677bb3f7d1da12dESC[m
При этом цветной вывод ls --color, например, работает нормально.
Проблема воспроизводится в некоторых дистрибутивах Linux и во FreeBSD. Как быть?


Ответ

Причина проблемы в том, что вывод git отображается посредством системной утилиты less, которая по умолчанию не умеет работать с ANSI-последовательностями, обозначающими границы цветного выделения текста в консоли (точнее, посредством того, что находится в переменной окружения $PAGER).
Чтобы less отображал цветные строки, нужно добавить к его вызову ключ -R
-R or --RAW-CONTROL-CHARS Like -r, but only ANSI "color" escape sequences are output in "raw" form. Unlike -r, the screen appearance is maintained correctly in most cases. ANSI "color" escape sequences are sequences of the form:
ESC [ ... m
where the "..." is zero or more color specification characters
Данный флаг можно добавлять непосредственно к вызову less или в содержимое переменной окружения $LESS. Во втором случае $PAGER останется неизменным, но искомый эффект будет достигнут, так как less считает из окружения "свою" переменную $LESS и добавит к себе флаг -R прозрачно.
Итого, проблему можно решить следующими способами:
Либо передавать нужный флаг через окружение каждый раз непосредственно перед вызовом git
$ LESS=-R git log
Данный метод - наименее "инвазивный" и ничего не меняет в настройках git и системы. Либо объявив флаг для less в общесистемное окружение через глобальный конфиг вашего shell-а: например, в случае bash, внеся следующую строчку в ~/.bash_profile
export LESS=-R Либо отказаться от использования git-ом общесистемного $PAGER, прописав вызов less в явном виде в конфиг git-а:
$ git config --global core.pager "less -R"
Этот метод позволяет не беспокоиться о том, что при изменении системных настроек изменится поведение git. Впрочем, можно и глобально переопределить $PAGER, снабдив вызов less произвольным набором флагов (см. man less): например, в случае bash, внеся следующую строчку в ~/.bash_profile
export PAGER='env LESS_IS_MORE=1 less -FRX'
Этот метод затронет вывод не только git, но и многих других "длинных" команд, например того же man

Комментариев нет:

Отправить комментарий