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

标签 python vim vim-plugin

我正在编写一个 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/

相关文章:

vim - 进入插入模式时的光标定位

vim - 如何在 Vim 中将具有给定模式的所有文本移动到文件顶部?

vim - 无法在 neovim 中运行 YouCompleteMe

python - Flask-Migrate 模型中的枚举类有问题

python - 按python中字母的频率对列表进行排序(降序)

python - python nltk中的函数 'bigrams'不工作

linux - vim:如何在 vim 可视模式下复制一个单词,但在可视 block 模式下粘贴它?

python - Python中正整数所需的最小位长

vim - gvim ftplugin 未加载

ruby - VIM 有哪些不同的 Ruby 调试插件?