答案1
^H
请注意上面的屏幕截图中的很多内容。它意味着Ctrl+H产生 ASCII 08 字符 AKA退格键。打印字符时,将光标向后移动退格键然后再次覆盖相同的字符 然后出现较暗。这就是如何加粗字体是在机械打字机上实现的。各种现代电子终端也支持这一点,并且许多 CLI 工具确实使用它来进行文本格式化。ANSI 序列以。。。开始逃脱(ASCII 27) 也常用于更改光标位置和文本格式属性,如闪烁、颜色、斜体...这些08
或27
字符称为控制字符。
cat
对这些字节一无所知。它只是通过原始字节流到终端或管道中的下一个项目。由于终端知道这些控制字符,因此它会正确显示文本。但是vi
,VS code 不是终端,它会在将控制字符显示在窗口内之前对其进行翻译,以便意外的控制字符不会弄乱屏幕和终端
要禁用控制字符并仅输出纯文本,请检查您使用的工具的选项。需要man
注意的是Controlling formatted output
手册页中的部分。尝试类似的东西man --ascii cd
然而,大多数程序会自动确定输出的类型,以了解是否应该输出控制字符,例如大多数 GNU 工具使用--color
类似ls
或 的选项grep
。也是如此man
:
MAN_KEEP_FORMATTING
通常,当输出未定向到终端(例如文件或管道)时,格式字符将被丢弃,以便无需特殊工具即可轻松读取结果。但是,如果
$MAN_KEEP_FORMATTING
设置为任何非空值,则保留这些格式字符。这对于能够解释格式化字符的 man 包装器可能很有用。
所以看起来你的man
不同或者某些格式选项已由别名或环境变量指定,因此即使你将输出重定向到文本文件,它也会输出格式
看