当打印带有 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
这是 中的已知错误less
,还是我可以做些什么?现在我将不再使用--hilite-unread
.
有趣的是,当文本足够长以滚动时,向上滚动时^M
标记会消失。因此,这些仅针对新打印的行显示。可能less
还不知道 LF 会在那里吗?但为什么它适用于带有文本的行呢?
我使用 Windows 版 Git,版本:git 2.43.0.windows.1、bash 5.2.21(1)、less 643。
发布问题一段时间后,我意识到这一定是一个错误,并在 less 存储库中创建了一个错误报告,然后开发人员立即确认并修复了该报告。
为了供将来参考,该问题是在
less
571(2020 年 12 月 30 日)中引入的,修复可能会包含在下一个版本中,即。less
650(截至 2024 年 2 月 4 日尚未发布)。(
--hilite-unread
或--HILITE-UNREAD
) 在空行中插入一个空格,以便始终有一个字符要突出显示。如果该行以 CR/LF 结尾,则现在会将空格放在 CR 之前,而不是在 CR 和 LF 之间。因此,CR 将被正确识别为行结尾的一部分,并且不会显示为^M
。