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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Vim插件输出中为单词着色相关的知识,希望对你有一定的参考价值。

我正在写一个Vim插件。主要逻辑是用Python(Python 3.6)编写的,带有所需的Vim脚本包装代码。

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

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

如何才能让“失败”这个词出现在红色中?

到目前为止,我尝试搜索的所有内容都返回到Vim中的Vim和​​ANSI颜色转义代码渲染中的语法高亮显示。主Vim缓冲区中的两种颜色文本都适用于您正在查找的任何文件。

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

答案

Failed attempts

我的实验证实ANSI转义码在嵌入式Python解释器中不起作用。这并不奇怪,因为Vim捕获输出并使用自己的例程进行输出。由于您不能将ANSI代码与:echo一起使用,因此这与:py print不兼容。此外,在GVIM中,没有连接终端,嵌入式终端仿真器相当愚蠢。

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

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

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

影响输出着色的方法是通过Vim的高亮组,即:echohl命令。不幸的是,这不能与:py print结合:

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

Solution

您必须切换到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"')

以上是关于如何在Vim插件输出中为单词着色的主要内容,如果未能解决你的问题,请参考以下文章

从零开始配置vim(27)——代码片段

从零开始配置vim(27)——代码片段

如何在 C++ 中为 GLSL 片段着色器实现 iGlobalTime?

如何在 bash 脚本中为命令输出着色?

有没有办法在占位符文本 QML 中为特定单词着色?

终端 Vim 删除线