利用emacs'或vim的语法高亮器来执行命令

我有一个命令行程序,它会传送JSON和YAML。 默认情况下,它会检测pygments(pygmentize)是否可用,如果它确实可用,则通过输出来获得不错的彩色输出。 但是,在大多数运行此程序的计算机上默认情况下都不安装pygments。 但是,大多数计算机将具有emacs或vim,但是,它会。 有没有办法让这些编辑器之一使用ANSI转义序列语法突出显示某些文本,然后再输出它?


作为编辑者已经可以做ansi的东西,而且很容易制作编辑器的屏幕截图,不是吗?

script -qc "stty rows 10000
emacs -nw -visit YOURFILE.YAML -eval '(redisplay t)' -f kill-emacs
resize"

(只有GNU FSF Emacs需要重新显示)

现在清理捕获

perl -p0E 's/A(?s:.*)e[27mrn
e[An((?s).*?)
(?:e[Kn)+
e.*e[27mr$(?s:.*)Z/$1/mx' < typescript

如果你不想在屏幕上显示录制过程,你可以用一个类似于perl的IO :: Pty


Matthew Wozniski写了一个名为vimcat.sh的脚本,这个脚本和Vim一起使用。 他的版本位于https://github.com/godlygeek/vim-files/blob/master/macros/vimcat.sh。 我已经对它进行了一些修改(如果内存提供服务,修改允许它在我的Mac OS X系统上运行;我知道/proc/self/fd/9替换/dev/fd/9 /proc/self/fd/9具有该目的); 请参阅我的要点https://gist.github.com/4090959。

我相信如果Vim的突出显示改变了背景,那么这两个脚本版本都会返回默认背景色。


和Emacs一样(ataylor的答案),Vim可以将完整的语法高亮的缓冲区呈现给HTML; 请参阅:help 2html.vim 。 你可能会重新使用大部分贯穿缓冲区语法的插件代码,并将其更改为ANSI转义序列,但是您必须自己重新实现所有渲染逻辑。

虽然有些插件使用Vim作为传呼机,但我不认为只用Vim输出带有ANSI转义序列的缓冲区是可能的。 毕竟,Vim希望保留终端的控制权,并在退出时清除它。

我建议在Vim之外寻找另一个专用的解决方案,尽管这意味着您需要安装它。

链接地址: http://www.djcxy.com/p/47105.html

上一篇: Utilizing emacs' or vim's syntax highlighter for command

下一篇: colorful console output by unix pipe filter