如何在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插件输出中为单词着色的主要内容,如果未能解决你的问题,请参考以下文章