为什么文本编辑器显示的内容与 cat 命令不同

为什么文本编辑器显示的内容与 cat 命令不同

我跑:

$ man cd > mancd
$ cat mancd

这正如预期的那样显示。但是当我用VSCode和vim打开文件时,它们完全不同。

在此输入图像描述

在此输入图像描述

为什么会这样以及如何正确地将手册页重定向到文件。

答案1

^H请注意上面的屏幕截图中的很多内容。它意味着Ctrl+H产生 ASCII 08 字符 AKA退格键。打印字符时,将光标向后移动退格键然后再次覆盖相同的字符 然后出现较暗。这就是如何加粗字体是在机械打字机上实现的。各种现代电子终端也支持这一点,并且许多 CLI 工具确实使用它来进行文本格式化。ANSI 序列以。。。开始逃脱(ASCII 27) 也常用于更改光标位置和文本格式属性,如闪烁、颜色、斜体...这些0827字符称为控制字符

cat对这些字节一无所知。它只是通过原始字节流到终端或管道中的下一个项目。由于终端知道这些控制字符,因此它会正确显示文本。但是vi,VS code 不是终端,它会在将控制字符显示在窗口内之前对其进行翻译,以便意外的控制字符不会弄乱屏幕和终端

要禁用控制字符并仅输出纯文本,请检查您使用的工具的选项。需要man注意的是Controlling formatted output手册页中的部分。尝试类似的东西man --ascii cd

然而,大多数程序会自动确定输出的类型,以了解是否应该输出控制字符,例如大多数 GNU 工具使用--color类似ls或 的选项grep。也是如此man

  • MAN_KEEP_FORMATTING

    通常,当输出未定向到终端(例如文件或管道)时,格式字符将被丢弃,以便无需特殊工具即可轻松读取结果。但是,如果$MAN_KEEP_FORMATTING设置为任何非空值,则保留这些格式字符。这对于能够解释格式化字符的 man 包装器可能很有用。

所以看起来你的man不同或者某些格式选项已由别名或环境变量指定,因此即使你将输出重定向到文本文件,它也会输出格式

相关内容