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

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

打印带有 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。

答案1

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

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

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

相关内容