在vim中通过脚本设置文本颜色

时间:2014-10-30 14:12:26

标签: vim

我正在编写一个小的vim插件,我希望按行和列动态更改特定缓冲区中文本的文本颜色。

使用语法高亮表达式不起作用,因为文本只包含''或'='。

示例:

== ===== ==
==== ===
===
=======
==
========= =

我希望一些以绿色显示,一些以红色显示,一些以白色显示。如果可能,还要更改背景颜色以突出显示。颜色由脚本动态定义。

我发现了这样的事情:

vim.command("match WarningMsg /*/".format(10, 4, 4 - 1))

这似乎将缓冲区的某些部分变为红色。虽然我不知道为什么以及format()如何工作......

通过vim文档,但没有找到像'set_fg_col(color, row,col, w, h)'

这样的命令

这有可能吗?

有办法解决这个问题吗?也许使用未显示的shell颜色转义?

1 个答案:

答案 0 :(得分:1)

首先,为突出显示特定缓冲区,语法突出显示是正确的机制,因为它是绑定的(通过文件类型和缓冲区本地'syntax'选项)到缓冲区。

相比之下,

:match适用于窗口,因此您必须使用精心设计的:autocmd来确定范围。由于它们都是由正则表达式驱动的,因此是等效的(好吧,语法高亮更强大,因为可以包含和遵循组),选择语法高亮。

语法

使用您的特定语法,您需要(静态地)匹配列和行,因为符号不能提供很多区别。幸运的是,Vim有特殊的原子,如\%l\%c,它们在特定的行/列中匹配。有了这些,您可以为文本范围构建匹配项。例如,要匹配第3行中的(ASCII)字符2-4:/\%3l\%>1c.*\%<5c/。使用:help /\%l了解详情。

您可以通过自定义命令按需更新突出显示,或通过某些:autocmd事件触发。 (但是你必须在显示不同步的东西和性能之间找到折衷方案; Vim并没有为此做出贡献。)