`less -R` 与 `less -r`:为什么颜色在 `-R` 模式下仅部分起作用?

`less -R` 与 `less -r`:为什么颜色在 `-R` 模式下仅部分起作用?

less我多次被以下行为所困惑:

# setup some test data
echo -e "foo\nfoo\nfoo" > /tmp/foo
echo -e "bar\nbar\nbar" > /tmp/bar

# now pipe something colored through `less`
diff --color=always /tmp/foo /tmp/bar | less -R

我得到的输出如下所示:

输出损坏

即,虽然显示了某些颜色,但并不完全正确。相反,less -r输出结果正确:

正确的输出

手册页解释了-rvs-R的含义,即-r显示所有控制字符,而-R仅显示 ANSI 颜色转义码。在-r模式下,less无法正确跟踪屏幕上的实际外观。因此,-R通常建议通过导出将模式作为默认设置LESS=R

知道为什么 ANSI 颜色在-R模式下仅部分起作用吗?

答案1

这在 更少的手册页 描述-R or --RAW-CONTROL-CHARS

仅当颜色在一行内改变时才支持颜色转义序列,而不支持跨行改变颜色。换句话说,每行的开头都假定为正常(无色),而不管前几行中的任何转义序列。

您有多行颜色序列,因此只有第一行是彩色的。

参数的描述-r不包括此警告,因此此选项对颜色序列和线条不做任何假设。

相关内容