打印带有 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 存储库中,开发人员随后立即确认并修复了该问题。
供将来参考,该问题是在less
571(2020 年 12 月 30 日)中引入的,修复可能会包含在下一个版本中,即less
650(截至 2024 年 2 月 4 日尚未发布)。
--hilite-unread
(或)在空白行中插入一个空格--HILITE-UNREAD
,这样总有一个字符要突出显示。如果行以 CR/LF 结尾,它现在会将空格放在 CR 之前,而不是 CR 和 LF 之间。因此,CR 将被正确识别为行结尾的一部分,而不是显示为^M
。