Answers:
TTY1中的突出显示有效,因为它可以将TERM变量设置为适当的值。
将TERM变量更改为适当的值(例如,screen或screen-256color)。检查您的个人〜/ .screenrc或系统范围的/ etc / screenrc并修复相应的行。
在我的less版本中,值screen-256实际上应该导致错误:
WARNING: terminal is not fully functional
- (press RETURN)
该屏幕*只会收到屏幕正确解释。
TERM的正确值取决于您的终端仿真器,通常应通过它进行设置。Ubuntu的三个预装终端仿真器的默认值为xterm。
执行
grep -R TERM= ~/.* /etc 2> /dev/null
检查TERM的值是否在shell的配置文件中被覆盖。
好吧,这很烦人。这里发生了什么?(tmux
在下iTerm.app
)
$ echo test > test ; echo $TERM
screen
然后录音
$ script withscreen
Script started, output file is withscreen
$ less -p test test
... q to quit and then exit the shell session ...
$ script withxterm
Script started, output file is withxterm
$ TERM=xterm less -p test test
... q and exit again ...
现在我们来看一下使用的代码
$ grep test withscreen | hexdump -C
00000000 24 20 6c 65 73 73 20 2d 70 20 74 65 73 74 20 74 |$ less -p test t|
00000010 65 73 74 0d 0d 0a 1b 5b 33 6d 74 65 73 74 1b 5b |est....[3mtest.[|
00000020 32 33 6d 0d 0a 1b 5b 35 3b 31 48 1b 5b 33 6d 74 |23m...[5;1H.[3mt|
00000030 65 73 74 1b 5b 32 33 6d 0d 0a 1b 5b 33 38 3b 31 |est.[23m...[38;1|
00000040 48 1b 5b 33 6d 74 65 73 74 20 28 45 4e 44 29 1b |H.[3mtest (END).|
00000050 5b 32 33 6d 1b 5b 4b 0d 1b 5b 4b 1b 5b 3f 31 6c |[23m.[K..[K.[?1l|
00000060 1b 3e 24 20 5e 44 0d 0d 0a |.>$ ^D...|
00000069
$ grep test withxterm | hexdump -C
00000000 24 20 54 45 52 4d 3d 78 74 65 72 6d 20 6c 65 73 |$ TERM=xterm les|
00000010 73 20 2d 70 20 74 65 73 74 20 74 65 73 74 0d 0d |s -p test test..|
00000020 0a 1b 5b 37 6d 74 65 73 74 1b 5b 32 37 6d 0d 0a |..[7mtest.[27m..|
00000030 1b 5b 35 3b 31 48 1b 5b 37 6d 74 65 73 74 1b 5b |.[5;1H.[7mtest.[|
00000040 32 37 6d 0d 0a 1b 5b 33 38 3b 31 48 1b 5b 37 6d |27m...[38;1H.[7m|
00000050 74 65 73 74 20 28 45 4e 44 29 1b 5b 32 37 6d 1b |test (END).[27m.|
00000060 5b 4b 0d 1b 5b 4b 1b 5b 3f 31 6c 1b 3e 24 20 65 |[K..[K.[?1l.>$ e|
00000070 78 69 74 0d 0d 0a |xit...|
00000076
$
所述1b 5b ...
代码可通过咨询呈现更可理解的xterm控制序列文件或一个可以手动摆弄序列以查看哪个下TERM=xterm
引起该高亮
$ printf "\033[7mtest\033[27m\n"
test
该TERM=screen
情况下没有做,每控制序列文档这是一个逆
ESC [
Control Sequence Introducer (CSI is 0x9b).
...
CSI Pm m Character Attributes (SGR).
...
Ps = 7 -> Inverse.
...
Ps = 2 7 -> Positive (not inverse).
在该文档附近,我们可能会发现该screen
终端\033[3m
是斜体的,而\033[23m
不是斜体的。
这一发现提供了一些选择。我们可以将终端配置为显示斜体文本,或者我们可以尝试使screen
终端使用反码而不是斜体。(一些在less(1)
文档中进行的挖掘并没有显示任何明显的“使用反而不是斜体”旋钮来摆弄。)(此外,某些终端可能会提供将X转换为Y的支持,请查看终端文档以获取详细信息。)(或者您可以尝试使用另一种终端模拟器,看看它能做什么...)
哇,斜体文字很难看。让我们尝试改为将代码screen
用于逆向。显然,这涉及terminfo
(或可能的termcap
)数据库,该数据库可以通过导出infocmp(1)
并由编译tic(1)
$ TERM=screen infocmp > ti.screen ; TERM=xterm infocmp > ti.xterm
$ fgrep '\E[7' ti.xterm
rc=\E8, rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, ri=\EM,
smir=\E[4h, smkx=\E[?1h\E=, smm=\E[?1034h, smso=\E[7m,
$ fgrep rev= ti.screen
nel=\EE, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
$ fgrep '\E[3m' ti.screen
smso=\E[3m, smul=\E[4m, tbc=\E[3g,
$
因此,我猜想在使用和的smso
情况下正在使用;据此为“突出模式”,并与反向配对;让我们将其更改为用途...xterm
\E[7m
screen
\E[3m
terminfo(5)
rmso
xterm
$ TERM=screen infocmp | sed -e 's/smso=[^,]*/smso=\\E[7m/;s/rmso=[^,]*/rmso=\\E[27m/' > foo
$ tic -o ~/.terminfo foo
$ rm foo
嘿,现在看起来好多了(但是必须在所有主机上完成for screen
或其他terminfo
文件...)