简而言之,我正在努力less
用vim
(vimpager
)来代替。我对脚本进行了设置,以便尽可能地吐出颜色(粗体和一切都很好)。less
理解颜色代码并很好地显示它们。我怎样才能vim
解析代码并以这种方式显示颜色/粗体less
?
答案1
两个答案:
简短一说:你想使用 vim 脚本AnsiEsc.vim。它将隐藏文件中实际的 ANSI 转义序列,并使用语法突出显示来适当地为文本着色。在寻呼机中使用它的问题是你必须让 vim 识别何时使用它。我不确定您是否可以简单地始终加载它,或者它是否会与其他语法文件冲突。你必须尝试一下。
一个很长的答案:您所能期望的最好的结果是部分不可移植的解决方案。 Less 实际上并不理解终端转义序列,因为这些序列很大程度上依赖于终端,但 Less 可以识别这些序列(的子集),并且如果使用-r
(或-R
) 选项,就会知道将它们传递到终端。终端将解释转义序列并更改文本的属性(颜色、粗体、下划线...)。 Vim 作为一个编辑器而不是一个寻呼机,并不简单地将原始控制字符传递到终端。它需要以某种方式显示它们,以便您可以实际编辑它们。您可以使用 vim 的其他功能,例如隐藏和语法突出显示来隐藏序列并使用它们设置文本的颜色,但是,它始终仅处理终端序列的子集,并且可能无法在某些终端上工作。
这实际上只是当您尝试使用文本编辑器作为寻呼机时会遇到的众多问题之一。
答案2
现在使用 vim 8,您可以使用终端模式:terminal
,然后在该终端中cat myfile
使用 Ctrl-w N 返回正常模式。这将正确显示 ANSI 颜色代码。通过自动化这些步骤并从标准输入而不是文件读取,应该可以使用 vim 来替换 less。
例如,您可以运行ls --color=always >/tmp/colored.txt
或者unbuffer ls >/tmp/colored.txt
然后在 vim 中:terminal cat /tmp/colored.txt
接着:only
然后你将在 vim 中得到 ls 输出的漂亮颜色,就像less
那样。由于 vim 支持在启动时将命令作为命令行参数传递,因此显然可以通过修改来使该解决方案适用于替换 less :)
答案3
安装vim插件改进的 AnsiEsc 并将以下内容放在您的 .profile/bash_profile/zprofile 中,您就可以开始了。
export PAGER="vim -R +AnsiEsc"
答案4
您可以使用 vim 的 json 语法突出显示。通常在大多数默认的 vim 安装中都有。可能不像但是less -R
..
- 如果你有 python,这使得人类可读
-mjson.tool
cat filename | python -mjson.tool | vim -c 'set syntax=json' -
- 如果你没有 python 但你的 json 打印得很漂亮
cat filename | vim -c 'set syntax=json' -
另外,某些浏览器具有 json 扩展名,您可以将其通过管道传输到浏览器中。嗯,我想知道是否w3m
足以满足纯粹的 cli 工作。
希望有帮助。