【问题标题】:How to color a word in Vim Plugin Output如何在 Vim 插件输出中为单词着色
【发布时间】:2018-09-20 15:26:09
【问题描述】:

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

插件使用 Python 打印函数向用户输出文本。例如:

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

如何让“失败”一词显示为红色?

到目前为止,我尝试搜索的所有内容都带有 Vim 中的语法突出显示和 Vim 中的 ANSI 颜色转义代码呈现。 Vim 主缓冲区中的两种颜色文本都适用于您正在查看的任何文件。

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

【问题讨论】:

  • 文本打印在哪里?
  • 终端的最底部。您可以在此处输入命令或查看您所处的模式。

标签: python vim vim-plugin


【解决方案1】:

尝试失败

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

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

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

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

影响输出颜色的方法是通过 Vim 的 highlight groups,即: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"')

【讨论】:

  • 这很多我不明白。 :) 这很棒,给了我一个很好的起点。如果这就是我所做的,我会回过头来告诉你。
猜你喜欢
  • 2012-09-27
  • 2021-05-29
  • 1970-01-01
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
相关资源
最近更新 更多