我正在编写一个 Vim 插件。主要逻辑是用 Python (Python 3.6) 和所需的 Vim 脚本包装器代码编写的。
该插件使用 Python 打印函数向用户输出文本。例如:
print( "The action " + action + " has failed." )
我该如何让“失败”一词以红色显示?
到目前为止,我尝试搜索的所有内容都以 Vim 中的语法突出显示和 Vim 中的 ANSI 颜色转义代码呈现的形式返回。对于您正在查找的任何文件,主 Vim 缓冲区中的两种颜色文本都是如此。
我想为我的插件的 Python 输出中的一个单词着色。有什么想法吗?
最佳答案
尝试失败
我的实验证实 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")
解决方案
你必须切换到 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"')
关于python - 如何在 Vim 插件输出中为单词着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52415540/