我用vim查看man page,有一些奇怪的字符,如何让它正常?

Im using vim to check man page, and there is some weird character,how to make it normal?

我正在尝试使用

man ascii | vi -

用vim、
查看ascii手册 然后有一些奇怪的字符,比如'^H'

weird character in vim

如何让它正常?

编辑:

我认为这是由于我的 vim 或终端配置错误造成的, 因为我试过其他机器,它工作正常,有人帮忙吗?

您在这里看到的是排版粗体和下划线字符的手册页约定。

^H 字符是 "backspace" 或 BS 字符,您可以在 ascii(7) 中找到它作为 ASCII 8。

显示为 ^H 是表示 "Control-H" 的约定,插入符号是 "Control" 键的符号,因为这是生成此控制字符的组合键(请注意"H" 是第八个字母,在手册页的 ASCII 表中它与 BS 在同一行。)

另请注意,此处的 ^H 是单个字符,而不是单独的 ^H 字符。如果您沿着这条线重复移动 l,您会看到 Vim 跳过了 H。 Vim 也可能会以不同的颜色显示它们,以表明它们是特殊字符。

您在此处看到的效果称为 overstruck 字符,它来自计算机连接到行式打印机而不是屏幕的时代。手册页是在 Unix 时代早期创建的,并使用名为 nroff(其根源甚至早于 Unix)的程序进行排版,该程序使用这些序列对其文本装饰进行编码,直到今天。

因此,使文本 加粗 (或者,将其打印得更强)的一种方法是打印一封信,退回一封 space,然后再次打印。在您的示例中,N^HNA^HAM^HME^HE 用于以粗体显示单词 NAME

通常,您将使用知道如何处理这些序列的手册页程序。例如,less 具有对重写文本的特定支持,并且能够使用 backspace(或回车 return,也可以将其用于此)识别这些序列并转换为粗体或使用实际上在终端中实现这些效果的终端转义序列在文本下划线。

如果您使用不同的寻呼机,通常您会使用 col -b 从这些序列中删除您的文本。 (有关详细信息,请参阅 col(1)。)请注意,col -b 不会在重写文本周围生成终端转义序列,它只是删除所有重写,使文本保持原样,因此任何文本 reader 都可以显示它。

(从这个意义上说,man ascii | col -b | vi - 是解决您的问题的一种可能方法,但不是最好的方法。)

Vim 不支持它作为输入接收的文本中的重叠文本 终端转义序列。因此,将 Vim 用作手册页的方法是去除所有重写(与 col -b 相同),然后使用 Vim 的语法突出显示功能来标记手册页部分等。 (因此,不是看到原始标记排版到手册页中,而是全部被剥离,您实际上看到的是手册页的 Vim 语法配置。)

这是通过 manpager.vim 脚本完成的,该脚本默认随 Vim 一起提供,并注册了一个 :MANPAGER 命令,您可以通过 vim +MANPAGER - 访问该命令。

您会看到它对 remove overstriking 所做的部分操作与 col -b 所做的相同。它还正确设置文件类型并启用语法突出显示,将 Vim 设置为适合手册页的查看器。

I think this is due to some wrong config of my vim, or terminal, because I tried it in some other machine and it works fine there.

我想这很可能是因为两个系统之间的手册页排版不同。

手册页本身和用于从源代码生成它们的管道不是很统一,您会发现操作系统甚至 Linux 发行版之间存在差异。

有可能在您的其他系统上,所有手册页在创建时都使用 col -b 删除,或者 man 将在将它们传送到 [=32 中未设置的内容时删除它们=],甚至他们的来源中没有任何标记为粗体或下划线的内容。

很难确切地说出是哪一个(你提到的在另一台机器上工作正常的说法缺乏细节可以说明),但我敢打赌。


简而言之:要将 Vim 用作手册页的寻呼机,而不是通过管道将它们传送到 Vim,请将其设置为 man 将 运行 vim 作为寻呼机本身。

在 Vim 中,请参阅 :help manpager.vim,其中包含有关如何进行设置的说明。

简而言之,您只需将此行添加到您的 ~/.bash_profile:

export MANPAGER="vim -M +MANPAGER -"

设置好并再次登录后,您只需要:

$ man ascii

并且 man 将以适合您的模式启动 vim