use*_*609 3 vi vim bash shell terminal
我正在尝试使用
man ascii | vi -
Run Code Online (Sandbox Code Playgroud)
用vim检查ascii手册,
然后有一些奇怪的字符像'^ H'
怎么让它正常?
编辑:
我认为这是由于我的 vim 或终端的一些错误配置,因为我尝试了其他机器,并且它工作正常,任何人都可以帮助吗?
您在这里看到的是用于排版粗体和下划线字符的手册页约定。
该^H字符是“退格”或 BS 字符,您可以在ascii(7) 中找到ASCII 8。
显示为^H表示“Control-H”的约定,插入符号是“Control”键的符号,因为这是生成此控制字符的组合键(注意“H”是第八个字母,它也在与手册页的 ASCII 图表中的 BS 相同的行。)
另请注意,^H这里是单个字符,而不是单独的^和H字符。如果你沿着那条线l反复移动,你会看到 Vim 跳过了Hs。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 -.
你会看到它所做的部分是删除 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 -"
Run Code Online (Sandbox Code Playgroud)
设置并再次登录后,您只需要:
$ man ascii
Run Code Online (Sandbox Code Playgroud)
并且man将推出vim以适合你的方式。
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |