Страницы

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

воскресенье, 22 декабря 2019 г.

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

#git #shell


Почему-то при работе с git в *nix-like консоли ломаются цвета: весь текст выводится
дефолтным цветом, а строки, которые должны быть цветными, оказываются обрамлены кодами
цветов:


  ESC[33mcommit 53f26c1fa4dc4f66df6a0fd01677bb3f7d1da12dESC[m


При этом цветной вывод ls --color, например, работает нормально.

Проблема воспроизводится в некоторых дистрибутивах Linux и во FreeBSD. Как быть?
    


Ответы

Ответ 1



Причина проблемы в том, что вывод 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.

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

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