如何在Vim插件输出中为单词着色

时间:2018-09-19 23:37:19

标签: python vim vim-plugin

我正在编写Vim插件。主要逻辑是使用所需的Vim脚本包装器代码以Python(Python 3.6)编写的。

该插件使用Python打印功能向用户输出文本。例如:

print( "The action " + action + " has failed." )

我该如何使“失败”一词显示为红色?

到目前为止,我尝试搜索的所有内容都在Vim中突出显示语法并在Vim中呈现ANSI颜色转义代码。无论您要查找哪个文件,两种颜色都会在Vim主缓冲区中显示。

我想从插件的Python输出中为单词着色。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

尝试失败

我的实验证实, ANSI转义代码在嵌入式Python解释器中不起作用。这并不奇怪,因为Vim捕获输出并使用其自己的例程进行输出。由于您无法将ANSI代码与:echo一起使用,因此可以肯定,这对:py print也无效。另外,在GVIM中,没有连接终端,并且嵌入式终端仿真器相当笨。

:py print("The ^[[01maction^[[0m has failed.")

起作用的方法(GVIM除外)是调用外部命令,因为其输出直接发送到终端。但是,这对您没有帮助(除非您愿意切换到调用外部Python解释器)。

:!echo "The ^[[41maction^[[0m has failed."

影响输出色彩的方法是通过Vim的 highlight组,即:echohl命令。不幸的是,此不能:py print组合:

:py vim.command('echohl ErrorMsg'); print("foobar")

解决方案

您必须切换到Vim的:echo[msg]才能使选定的突出显示组应用于输出;现在,所有内容都经过相同的API。您可以连接并执行单个命令序列:

:py vim.command('echohl ErrorMsg | echo "foobar" | echohl None')

或分别提交多个vim.command()

:execute "py vim.command('echohl ErrorMsg')" | py vim.command('echo "foobar"')