Это нормальное поведение. Эти переменные среды содержат escape-последовательности, которые заставляют терминал менять свой основной цвет. Вы получаете тот же визуальный эффект, когда любая программа выводит их, будь то less
или env
.
Эти переменные должны содержать фактические escape-символы, less не выполняет никакой постобработки на них.
Обычно вы можете поместить меньше переменных конфигурации в файл lesskey , но это не сработает для LESS_TERMCAP_xx
переменных, потому что less читает их до того, как прочитает файл lesskey (начиная с менее 444). Таким образом, у вас нет выбора, кроме как поместить их в окружающую среду.
Если вы хотите, чтобы эти переменные применялись только к man
другим применениям less
, а не к другим , вы можете использовать псевдоним, для man
которого в качестве PAGER
переменной задается скрипт-обертка, который устанавливает переменные среды.
#!/bin/sh
escape=␛ # a literal escape character
export LESS_TERMCAP_md=$escape'[01;34m'
…
exec less "$@"
(В качестве альтернативы, используйте #!/bin/bash
в первой строке, и вы можете использовать #'\e'
синтаксис для получения escape-символа. В системах, где /bin/sh
есть тире, использование /bin/sh
очень немного быстрее, хотя на практике это может быть незаметно.)
Назовите этот скрипт less-color
и добавьте его alias man='PAGER=less-color man'
в свой ~/.bashrc
или ~/.zshrc
. В некоторых системах вместо создания псевдонима вы можете указать man
использовать другой пейджер, установив MANPAGER
переменную окружения: export MANPAGER=less-color
в вашем ~/.profile
.
Жиль "ТАК - перестань быть злым"
источник
man top
=\e[01;34mSYNOPSIS\e[00m
вместо раскрашивания слова «СИНОПСИС».Как отмечает @Gilles в своем ответе, это ожидаемое поведение.
Позвольте мне просто добавить информацию о паре.
LESS_TERMCAP_xx
переопределить возможности TERMCAP. Это переопределение управляетсяless
само по себе,screen.c
а значение используется позже, как если бы оно было возвращено библиотекой TERMCAP. Это означает, что это должна быть необработанная последовательность управляющих символов.Моя учетная запись о том, как "исправить", это обернуть
less
себяисточник
#!/bin/sh
(в моем случае это тире)? Я не могу понять, как вставить буквальныйESC
символ с помощью vim.export LESS_TERMCAP_me="$(printf '\e[0m')"
. На самом деле, если вы посмотрите на ответ @Gilles, он утверждает,export LESS_TERMCAP_me=$escape'[0m'
что/bin/sh
тоже должен работать .