我正在尝试使用
man ascii | vi -
用vim检查ascii手册,然后有一些奇怪的字符,例如'^ H'
如何使其正常?
编辑:
我认为这是由于我的vim或终端配置错误,因为我尝试过其他机器,而且效果很好,对身体有帮助吗?
您在这里看到的是用于排版粗体和带下划线的字符的手册页约定。
^H
字符是“退格”或BS字符,可以在ascii(7)中找到为ASCII 8。
显示为^H
是表示“ Control-H”的约定,插入符号是“ Control”键的符号,因为这是生成此控制字符的组合键(请注意,“ H”是第八个字母,也与手册页ASCII图表中的BS位于同一行。)
也请注意,这里的^H
是单个字符,而不是单独的^
和H
字符。如果您以l
动作反复沿该线移动,您会看到Vim跳过了H
。 Vim可能还会以不同的颜色显示它们,以使其清楚是特殊字符。
您在这里看到的效果称为overstruck字符,它来自将计算机连接到行式打印机而不是屏幕的时代。手册页是在Unix初期创建的,并使用名为nroff
的程序(其根源甚至在Unix之前)进行排版,该程序使用这些序列来编码其文本修饰,直到今天。
因此,使文本bold
(或打印得更粗)的一种方法是打印一个字母,退回一个空格,然后再次打印。在您的示例中,N^HNA^HAM^HME^HE
用于以粗体显示单词[[NAME。通常,您将使用一个知道如何处理这些序列的手册页程序。例如,less
对过划线文本具有特定的支持,并能够使用退格键(或回车,也可以使用回车符)识别这些序列,并使用最终实现实际效果的终端转义序列转换为粗体或下划线文本在终端中。[如果使用其他寻呼机,通常会使用col -b
从这些序列中剥离文本。 (有关详细信息,请参见col(1)。)请注意,col -b
不会在过度输入的文本周围产生终端转义序列,它只是消除了所有过度输入,使文本保持空白,因此任何文本阅读器都可以显示它。
(从这个意义上讲,man ascii | col -b | vi -
是解决问题的一种可能方法,但不是最佳方法。)
Vim不支持输入过多的文本
或
终端输入的转义序列。因此,将Vim用作手册页的方法是剥离所有过分打标(与col -b
相同),然后使用Vim的语法突出显示功能来标记手册页等。(因此,不要在手册页上看到原始的排版标记)页面,这些页面都已被剥离,实际上您正在看到手册页的Vim语法配置。)这是通过manpager.vim
脚本完成的,该脚本默认情况下随Vim一起提供,并且该脚本注册了一个:MANPAGER
命令,您可以将其作为vim +MANPAGER -
访问。您将看到与remove overstriking相同的部分是col -b
。它还可以正确设置文件类型并启用语法突出显示功能,并将Vim设置为手册页的合适查看器。
我认为这是由于我的vim或终端配置错误,因为我在其他机器上尝试过,并且在那儿工作正常。我想说这很可能是由于手册页在两个系统之间排版不同。
手册页本身以及用于从源代码生成它们的管道不是很统一,您会发现操作系统甚至Linux发行版之间的差异。
[在您的其他系统上,所有手册页都有可能在创建时使用col -b
剥离,或者在将它们输送到man
中未设置的内容时,甚至$MANPAGER
也会剥离它们;甚至来源中没有任何标记为粗体或下划线的内容。
很难确切说明哪个(您对在另一台机器上正常工作的引用缺乏详细信息,但这是我的选择。
man
将作为传呼机本身运行vim
。在Vim中,请参见:help manpager.vim
,其中包含有关如何进行此设置的说明。
总之,您只需要将此行添加到:help manpager.vim
:
~/.bash_profile
设置并重新登录后,您需要做的是:
export MANPAGER="vim -M +MANPAGER -"
然后$ man ascii
将以您的正确模式启动man
。