Less --hilite-unread 在空行上打印回车 ^M

Pau*_*aul 4 bash command-line less carriage-return newlines

当打印带有 Windows 行结尾 (CRLF) 的文件时,如果使用选项,则在空行中less显示回车符。包含任何文本的行都会正确显示,跳过回车符。^M--hilite-unread

我看了一遍说明书,好像只要CR后面加LF就应该是一样的。添加--raw-control-chars会删除标记,但不建议使用它,并且它会产生我不想要的其他后果。

$ printf 'first\r\n\r\nsecond\r\n' | LESS= less --quit-if-one-screen
first

second

$ printf 'first\r\n\r\nsecond\r\n' | LESS= less --quit-if-one-screen --hilite-unread
first
^M
second

$ printf 'first\r\n\r\nsecond\r\n' | LESS= less --quit-if-one-screen --hilite-unread --raw-control-chars
first

second

Run Code Online (Sandbox Code Playgroud)

这是 中的已知错误less,还是我可以做些什么?现在我将不再使用--hilite-unread.

有趣的是,当文本足够长以滚动时,向上滚动时^M标记会消失。因此,这些仅针对新打印的行显示。可能less还不知道 LF 会在那里吗?但为什么它适用于带有文本的行呢?

我使用 Windows 版 Git,版本:git 2.43.0.windows.1、bash 5.2.21(1)、less 643。

Pau*_*aul 5

发布问题一段时间后,我意识到这一定是一个错误,并在 less 存储库中创建了一个错误报告,然后开发人员立即确认并修复了该报告。

为了供将来参考,该问题是在less571(2020 年 12 月 30 日)中引入的,修复可能会包含在下一个版本中,即。less650(截至 2024 年 2 月 4 日尚未发布)。

(--hilite-unread--HILITE-UNREAD) 在空行中插入一个空格,以便始终有一个字符要突出显示。如果该行以 CR/LF 结尾,则现在会将空格放在 CR 之前,而不是在 CR 和 LF 之间。因此,CR 将被正确识别为行结尾的一部分,并且不会显示为^M