我刚刚将其添加到我的中.bashrc
以获得彩色输出less
:
# Colorize less man pages.
export LESS_TERMCAP_md=$'\e[01;34m'
export LESS_TERMCAP_us=$'\e[01;33m'
export LESS_TERMCAP_so=$'\e[01;44;37m'
export LESS_TERMCAP_mb=$'\e[01;31m'
export LESS_TERMCAP_mr=$'\e[01;35m'
export LESS_TERMCAP_me=$'\e[00m'
export LESS_TERMCAP_ue=$'\e[00m'
export LESS_TERMCAP_se=$'\e[00m'
...现在突然之间某些命令(似乎与显示环境变量有关)产生与这些新设置相匹配的颜色输出。难道我逃避错了?或者这是故意的行为?我尝试了一些其他转义变体,但它们不适用于less
.
例如,这是一个env
命令的屏幕截图。
php -i
也有彩色输出,但仅限于环境变量部分。
答案1
这是正常行为。这些环境变量包含导致终端更改其前景色的转义序列。当任何程序输出它们时,无论是 itless
还是env
.
这些变量需要包含实际的转义字符,less 不对它们进行任何后处理。
通常你可以在你的程序中放置更少的配置变量少密钥文件,但这对变量不起作用LESS_TERMCAP_xx
,因为 less 在读取 lesskey 文件之前读取它们(从 less 444 开始)。所以你别无选择,只能将它们放入环境中。
如果您希望这些变量仅适用于man
的其他用途less
,则可以使用别名将变量man
设置PAGER
为设置环境变量的包装器脚本。
#!/bin/sh
escape=␛ # a literal escape character
export LESS_TERMCAP_md=$escape'[01;34m'
…
exec less "$@"
(或者,#!/bin/bash
在第一行使用,您可以使用#'\e'
语法来获取转义字符。在带有/bin/sh
破折号的系统上,使用/bin/sh
速度稍快,尽管在实践中可能并不明显。)
调用此脚本less-color
,并将其添加alias man='PAGER=less-color man'
到您的~/.bashrc
或~/.zshrc
.在某些系统上,您可以man
通过设置环境变量来指示使用不同的分页器,而不是创建别名MANPAGER
:export MANPAGER=less-color
在您的~/.profile
.
答案2
我假设您错误地将这些 LESS_* 变量的值设置为包含实际转义字符的字符串,而不是包含反斜杠后跟 e 的字符串。因此,每次显示这些值时,它们都会更改终端的颜色。
我会非常仔细地查看您在 .bashrc 中所做的设置,并确保它们是正确的。我怀疑您所需要做的就是消除美元符号。
答案3
正如@Gilles 在他的回答中指出的那样,这是预期的行为。
让我添加情侣信息。
LESS_TERMCAP_xx
覆盖 TERMCAP 功能。此覆盖由其less
自身管理screen.c
,并且该值稍后使用,就好像它是由 TERMCAP 库返回的一样。这意味着它必须是控制字符的原始序列。
我关于如何“修复”这个问题的帐户是less
自我包装
$ cat ~/bin/less
#!/bin/bash
# Start bold mode
export LESS_TERMCAP_md=$'\e[1;37m'
# Start standout mode
export LESS_TERMCAP_so=$'\e[1;37;41m'
# End standout mode
export LESS_TERMCAP_se=$'\e[0m'
# Start underlining
export LESS_TERMCAP_us=$'\e[4;93m'
# End underlining
export LESS_TERMCAP_ue=$'\e[0m'
# End all mode like so, us, mb, md and mr
export LESS_TERMCAP_me=$'\e[0m'
exec /usr/bin/less "$@"