我正在尝试使用
man ascii | vi -
用vim检查ascii手册,
然后会有一些奇怪的字符,例如'^ H'
weird character in vim
如何使其正常?
编辑:
我认为这是由于我的vim或终端配置错误,
因为我尝试过其他机器,而且效果很好,对身体有帮助吗?
最佳答案
您在此处看到的是用于排版粗体和带下划线的字符的手册页约定。^H
字符是“退格”或BS字符,您可以在ascii(7)中将其作为ASCII 8找到。
显示为^H
是表示“Control-H”的约定,插入号是“Control”键的符号,因为这是生成此控制字符的组合键(请注意,“H”是第8个字母,也在在手册页的ASCII图表中与BS位于同一行。)
另请注意,此处的^H
是单个字符,而不是单独的^
和H
字符。如果您以l
动作反复沿着那条线移动,您会看到Vim跳过了H
。 Vim可能还会以不同的颜色显示它们,以明确它们是特殊字符。
您在此处看到的效果被称为过冲字符,它来自将计算机连接到行式打印机而不是屏幕的时代。手册页是在Unix初期创建的,并使用名为nroff
的程序(其根源甚至早于Unix)进行排版,该程序使用这些序列对其文本装饰进行编码,直到今天。
因此,使文本变为粗体(或打印得更粗)的一种方法是打印一个字母,退回一个空格,然后再次打印。在您的示例中,使用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
也会剥离它们在其来源中。
很难确切地说出哪一个(您提到的在另一台机器上正常工作的参考缺乏详细信息),但这是我的选择。
简而言之:要将Vim用作手册页的传呼机,而不是将其通过管道传递到Vim,请进行设置,以便man
将vim
作为传呼机本身运行。
在Vim中,请参阅 :help manpager.vim
,其中包含有关如何进行设置的说明。
简而言之,您只需要将此行添加到~/.bash_profile
中:
export MANPAGER="vim -M +MANPAGER -"
设置并重新登录后,您需要做的是:
$ man ascii
man
将以适合您的模式启动vim
。
关于bash - 我正在用vim检查手册页,并且有一些奇怪的字符,如何使其正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60106514/