我希望有一个命令可以插入到命令管道中,根据vim的语法高亮功能为其输入添加颜色转义.
例如:
cat somefile.js | vim - <???> | less
Run Code Online (Sandbox Code Playgroud)
生成的文本将是somefile.js的文本,但是根据当前vim配置在编辑器中的操作方式进行着色.
我发现这必须是可能的.我同意那里的例子不是一个理智的人可能称之为完全有用的东西,但这并不意味着这个想法永远不会.
我认为您的想法有一个基本缺陷:没有人考虑过允许这样的事情。
显然,vim能够进行语法突出显示。但我敢打赌,如果您设法获得vim来流传输文本并进行处理,那您将不会喜欢结果。
考虑通过管道传递文本时more(或less如果愿意)的情况。当进入终端时,这些程序将显示一个屏幕,并等待您按下空格键。但是,如果将stdout重定向到终端以外的其他位置,这些程序会注意到这一点,只需将其输入原样复制到其输出中即可。
如果vim没有注意到您正在通过管道传递文本,则可能会发送您可能不希望在输出中使用的光标移动命令。如果vim确实注意到了,则很可能只是传递文本,而不是对其进行语法着色。仅当vim进行语法着色但不注入光标移动的内容时,您的想法才能起作用。
你可以试试看。这是讨论通过vim传递内容的答案:
但是我说为什么不通过设计并旨在通过其传递文本的程序来传递文本?Pygments可以为每种主要的编程语言和标记格式着色。
我为您的想法看到的主要优点是:您可以自定义vim进行语法着色的方式,以所需的方式获取它,然后还可以使用vim处理文本。但是自定义Pygments可能并不难,而且开箱即用可能会令人满意,在这种情况下,这绝对是最简单的方法。而且Pygments不仅具有ANSI序列输出,还具有HTML输出,RTF,LaTeX等。因此,如果使Pygments以您想要的方式工作,则它应该能够输出所需的任何输出格式;vim只有ANSI序列一。