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

问题描述 投票:1回答:1

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

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

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

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

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

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

python vim vim-plugin
1个回答
1
投票

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"')
© www.soinside.com 2019 - 2024. All rights reserved.