如何让 Vim 显示颜色代码所指示的颜色?

phu*_*ehe 69 colors vim pager

简而言之,我正在努力lessvim( vimpager)替换。我有脚本设置,可以随时吐出颜色(粗体和一切都很好)。less理解颜色代码并很好地显示它们。我怎样才能像这样vim解析代码并显示颜色/粗体less

小智 52

两个答案:

一个简短的:你想使用 vim 脚本AnsiEsc.vim。它将隐藏文件中实际的 ANSI 转义序列,并使用语法突出显示来适当地为文本着色。在寻呼机中使用它的问题是你必须让 vim 识别何时使用它。我不确定您是否可以始终加载它,或者它是否会与其他语法文件冲突。你将不得不尝试它。

一个很长的答案:您所能希望的最好的方法是部分不可移植的解决方案。Less 并不真正理解终端转义序列,因为它们很大程度上依赖于终端,但很少能识别这些(的子集),并且知道将它们传递到终端,如果您使用-r(或-R) 选项。终端将解释转义序列并更改文本的属性(颜色、粗体、下划线...)。Vim 是一个编辑器而不是寻呼机,它不会简单地将原始控制字符传递给终端。它需要以某种方式显示它们,以便您可以实际编辑它们。您可以使用 vim 的其他功能,例如隐藏和语法突出显示来隐藏序列并使用它们来设置文本的颜色,但是,它始终只处理终端序列的一个子集,并且可能无法在某些终端上工作.

当您尝试将文本编辑器用作寻呼机时,这实际上只是您会遇到的众多问题之一。

  • @Nitrodist:`less -r FILE`([来源](http://superuser.com/a/218823/84963)) (28认同)
  • 简而言之,您必须在 Vim 中编写终端模拟器的一部分,该部分处理输入中存在的终端转义序列。 (2认同)

rub*_*ion 11

现在使用 vim 8,您可以使用终端模式:terminal,然后在该终端中cat myfile使用 Ctrl-w N 返回正常模式。这将正确显示 ANSI 颜色代码。通过自动化这些步骤并从标准输入而不是文件中读取,应该可以使用 vim 来替换 less。

  • 我接受了你的想法并付诸实践!https://gist.github.com/RichardBronosky/94024fac52780e03c936589f4c9ab914 (2认同)

小智 5

安装 vim 插件改进的 AnsiEsc 并将以下内容放在您的 .profile/bash_profile/zprofile 中,您就可以开始了。

export PAGER="vim -R +AnsiEsc"
Run Code Online (Sandbox Code Playgroud)