bash - 我正在用vim检查手册页,并且有一些奇怪的字符,如何使其正常?

标签 bash shell vim terminal vi

我正在尝试使用

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,请进行设置,以便manvim作为传呼机本身运行。

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

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

export MANPAGER="vim -M +MANPAGER -"

设置并重新登录后,您需要做的是:
$ man ascii
man将以适合您的模式启动vim

关于bash - 我正在用vim检查手册页,并且有一些奇怪的字符,如何使其正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60106514/

相关文章:

bash - 为什么 bash 中的 ""Here strings"会更改其后任何内容的语法颜色?

vim - 为什么我所有的 MacVim 配色方案看起来都不对?

bash - 自动计时每个执行的命令并在 Bash 提示符中显示?

linux - Auditd - auditctl 规则仅监控目录(不是所有子目录和文件等)

Bash 脚本归档文件然后复制新文件

vim - Netrw和其他窗口同时打开: no window toggling

android - 如何在不使用任何构建工具的情况下使用 aapt2 编译 Android 应用程序?

linux -- 确定哪个服务在关闭的端口上运行

linux - 如何编写bash代码将一些内容输入文件并保存文件?

shell - 转义 shell 命令行嵌套引号