less 不突出显示搜索

less 不突出显示搜索

发生了一些事情,所以我再也看不到亮点了。我试过:

  • 使用不同的终端。
  • 使用-g选项
  • 确保-G不存在
  • 搜索时按 ^K
  • ESC-U

没什么帮助。

我在 i3 台式机上使用 Ubuntu 12.10。$TERM=screen-256当我^ ALT 1切换到TTY1我是否man man可以看到它突出显示了手册参数和搜索模式。

我还能做什么来修复它?

答案1

TTY1 中的突出显示有效,因为它将 TERM 变量设置为适当的值。

如果您使用屏幕:

将 TERM 变量更改为适当的值(例如,屏幕或者屏幕-256色)检查您的个人~/.screenrc或系统范围的/etc/screenrc并修复相应的线。

在我的版本中,值屏幕-256实际上应该会导致错误:

WARNING: terminal is not fully functional
-  (press RETURN)

如果您不使用屏幕:

屏幕*只能通过屏幕正确解释。

TERM 的正确值取决于您的终端仿真器,通常应由它设置。Ubuntu 的三个预装终端仿真器的默认值是终端

执行

grep -R TERM= ~/.* /etc 2> /dev/null

检查 TERM 的值是否在你的 shell 的配置文件中被覆盖。

答案2

这真烦人。这是怎么回事?(在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[7mscreen \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

嘿,现在看起来好多了(但必须在所有主机上对screen任何terminfo文件进行此操作......)

相关内容