我认为你的想法有一个基本的缺陷:没人想过会允许这种事发生。 显然,vim能够进行语法突出显示,但我敢打赌,如果你能设法让vim对文本进行流处理,你肯定不会喜欢这样的结果。 考虑一下当你通过more(或者less,如果你喜欢的话)传输文本时会发生什么。当它到达终端时,这些程序会显示一个屏幕,然后等待你点击空格键。但是如果你把stdout重定向到终端之外的其他地方,这些程序会注意到这一点,并简单地把它们的输入复制到它们的输出中。 如果vim没有注意到你在用管道传输文本,它很可能会发送你不希望在输出中出现的光标移动命令;如果vim注意到了,它很可能只是传递文本,而不是对它进行语法着色。只有当vim确实进行了语法着色但没有注入光标移动的东西时,你的想法才会起作用。 你可以试试看。这里有一个答案,讨论管道的东西通过vim: Execute a command within Vim from the command line 但是我说为什么不通过一个程序来传输你的文本呢?Pygments可以为每一种主要的编程语言和标记格式着色。 http://pygments.org/ 我认为你的想法最大的优点是:您可以自定义vim进行语法着色的方式,得到您想要的方式,然后使用vim处理您的文本。但是自定义Pygments可能并不困难,甚至可能是开箱即用的,在这种情况下,它肯定是最简单的方法。Pygments不仅有ANSI序列输出,它还有HTML输出、RTF、LaTeX因此,如果你让Pygments按照你希望的方式工作,它应该能够输出你需要的任何输出格式; vim将只有ANSI序列一。
5条答案
按热度按时间py49o6xq1#
我认为你的想法有一个基本的缺陷:没人想过会允许这种事发生。
显然,vim能够进行语法突出显示,但我敢打赌,如果你能设法让vim对文本进行流处理,你肯定不会喜欢这样的结果。
考虑一下当你通过
more
(或者less
,如果你喜欢的话)传输文本时会发生什么。当它到达终端时,这些程序会显示一个屏幕,然后等待你点击空格键。但是如果你把stdout重定向到终端之外的其他地方,这些程序会注意到这一点,并简单地把它们的输入复制到它们的输出中。如果vim没有注意到你在用管道传输文本,它很可能会发送你不希望在输出中出现的光标移动命令;如果vim注意到了,它很可能只是传递文本,而不是对它进行语法着色。只有当vim确实进行了语法着色但没有注入光标移动的东西时,你的想法才会起作用。
你可以试试看。这里有一个答案,讨论管道的东西通过vim:
Execute a command within Vim from the command line
但是我说为什么不通过一个程序来传输你的文本呢?Pygments可以为每一种主要的编程语言和标记格式着色。
http://pygments.org/
我认为你的想法最大的优点是:您可以自定义vim进行语法着色的方式,得到您想要的方式,然后使用vim处理您的文本。但是自定义Pygments可能并不困难,甚至可能是开箱即用的,在这种情况下,它肯定是最简单的方法。Pygments不仅有ANSI序列输出,它还有HTML输出、RTF、LaTeX因此,如果你让Pygments按照你希望的方式工作,它应该能够输出你需要的任何输出格式; vim将只有ANSI序列一。
gk7wooem2#
有一个Perl模块叫做Text::VimColor,我听说它可以做你想做的事情。
http://search.cpan.org/dist/Text-VimColor/
但让我问你为什么不使用vim作为一个非常好的文件查看器呢?
view -
将在只读模式下从标准输入读取。vltsax253#
https://gist.github.com/echristopherson/4090959
通过https://superuser.com/a/554531/7198。
在
/etc/passwd
上试过了,效果出奇的好!5anewei64#
这可能就是你想要的
这是丑陋的,但你可以别名:
然后这样使用:
u5i3ibmn5#
使用
vimcat
!另请参阅:https://www.vim.org/scripts/script.php?script_id=4325