利用emacs的或vim的语法高亮显示的命令行程序?(Utilizing emacs' or

2019-08-02 19:14发布

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

Answer 1:

作为编辑器已经可以做到了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\[27m\r\n
\e\[A\n((?s).*?)
(?:\e\[K\n)+
\e.*\e\[27m\r$(?s:.*)\Z/$1/mx' < typescript

如果你不想在录制过程中显示在屏幕上,你可以在隐藏终端的东西,如Perl的IO ::控股把它包



Answer 2:

马修Wozniski写了一个脚本调用vimcat.sh与Vim这么做。 他的版本是https://github.com/godlygeek/vim-files/blob/master/macros/vimcat.sh 。 我做了一些修改,它(如果没有记错,修改允许它我的Mac OS X系统上运行;我知道的替代/dev/fd/9/proc/self/fd/9有这样的目的); 看到我在主旨https://gist.github.com/4090959 。

我相信脚本的两个版本有回默认的背景颜色,如果Vim的突出变化的背景麻烦。



Answer 3:

(CP ataylor的答案)一样的Emacs,Vim可以渲染完整的语法高亮HTML缓冲区; 见:help 2html.vim 。 你也许可以重新使用多,通过缓冲的语法去插件的代码,并改变它呈现给ANSI转义序列,但你必须自己重新实现所有的渲染逻辑。

虽然也有一些插件,使用的Vim作为寻呼机,我不认为这是可能只使用Vim的输出与ANSI转义序列的缓冲区。 毕竟,Vim的希望保持该终端的控制,以及退出时清除它。

我建议找的Vim之外的另一个,专用的解决方案,虽然这意味着你需要安装它。



Answer 4:

Emacs的包括函数调用htmlfontify将一个fontified缓冲区转换为HTML。 您可以在批处理模式下使用的小elisp的脚本来渲染一个文件作为HTML。 例如:

emacs -q --batch --file myfile.rb --eval '(progn (require (quote htmlfontify)) (htmlfontify-buffer) (set-buffer-modified-p t) (save-buffer))'


Answer 5:

如果您不想跟着@IngoKarkat意见和重写标准插件来支持你可以使用我的ANSI转义序列formatvim插件,它支持使用渲染ANSI转义序列

Format format csi to /path/to/file

。 最初,我的插件是标准2html为不同的格式靶向重写操作与轻松添加新格式的支持(我花了大约30分钟,以补充ANSI转义序列的支持,这些序列大多阅读说明书),但是过头到当前的代码已经提相似之处。 据了解更快地工作了大文件或当您使用vim的一个实例来呈现许多文件(即当热身(“编译”和缓存填充)阶段通过进一步运行的效益屏蔽)。



文章来源: Utilizing emacs' or vim's syntax highlighter for command-line program?