如何在管道中使用vim来给文本着色?

shyt4zoc  于 2022-11-11  发布在  其他
关注(0)|答案(5)|浏览(152)

我希望有一个命令,我可以插入到一个命令管道,添加颜色转义到其输入根据vim的语法突出显示的能力。
例如:

cat somefile.js | vim - <???> | less

生成的文本将是somefile.js的文本,但是根据当前vim配置在编辑器中的颜色进行了着色。
我突然想到,这个一定是可能的。我同意上面的例子并不是一个理智的人可能会说的"有用“,但这并不意味着这个想法”永远“不可能。

py49o6xq

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序列一。

gk7wooem

gk7wooem2#

有一个Perl模块叫做Text::VimColor,我听说它可以做你想做的事情。
http://search.cpan.org/dist/Text-VimColor/
但让我问你为什么不使用vim作为一个非常好的文件查看器呢?view -将在只读模式下从标准输入读取。

5anewei6

5anewei64#

这可能就是你想要的

cat filename.sh | vim - -c 'syntax on; syn=bash'

这是丑陋的,但你可以别名:

alias vim.sh="vim -c 'syntax on; syn=bash'"

然后这样使用:

cat filename.sh | vim.sh -
u5i3ibmn

u5i3ibmn5#

使用vimcat

wget -O /usr/local/bin/vimcat "https://www.vim.org/scripts/download_script.php?src_id=23422"
chmod 755 /usr/local/bin/vimcat
vimcat /etc/passwd

另请参阅:https://www.vim.org/scripts/script.php?script_id=4325

相关问题