Vim自定义语法高亮仅限于背景的设置

8
我想在Vim(GUI版本)中自定义语法高亮。 我的语言存在一个现有的语法文件。 如果该行以>开头,我想为每行添加一个背景颜色来增强语法高亮。 我已经发现可以通过以下方式实现:
:syntax match Output /^>.*$/

并添加

:hi Output guibg=LightBlue

针对颜色方案,这些输出行的文本背景会变成浅蓝色,但是它会覆盖前景色。因此大部分语法高亮都消失了。如何在这些行中保留前景语法高亮呢?

另外:是否有一种方法可以将这些行的背景高亮扩展到屏幕的右侧结束位置?


1
这是一个好问题。我担心两个答案都是否定的,但希望有人能证明我错了。 - Owen
3个回答

3
这是如何保留语法的方法,我匹配以{开头的行。
:hi Output guibg=LightBlue
:match Output '\%>0v{.*'

输入图片说明

编辑:由于您需要相反的结果,您需要

:match Output '^[^<].*$'

enter image description here


逆序工作。第一行是否比我的正则表达式更复杂?有没有想法可以通过语法高亮实现整行突出显示? - rembremading
3
我知道了。发现<code>:match</code>和<code>:syntax match</code>之间有所不同。似乎第一个只能在文件被加载后使用。 - rembremading
1
@rembremading:你可以使用文件类型自动命令:autocmd FileType <your-language-filetype> match Output /^>.*$/ - ib.
@ib 这是个好主意。你觉得在特定大小之前填充空格以填满水平线怎么样?当然可以,而且在编写之前可以删除填充,但这就像使用 :set ve=all 一样。 - Eric Fortis
如何在非GUI Vim中实现此功能,并针对使用matchadd应用的高亮?每当我使用ctermbg=value调用matchadd时,前景色(也由不同的matchadd正则表达式设置)会被重置 :( - bloody
显示剩余2条评论

0

试试这个:

:hi Output guibg=LightBlue guifg=NONE

我在vim.gtk -g中遇到了这个问题:"E254: Kann die Farbe None nicht zuweisen"。翻译成英语是:Cannot assign colour None。 - rembremading
需要全部大写。已更正。 - bhinesley
谢谢,我刚刚发现该命令不会抱怨NONE,但我仍然得到了上述描述的结果。请注意,我将highlight命令放在colorscheme文件的开头,并在编辑器中输入syntax命令。这可能取决于顺序吗? - rembremading
是的,抱歉,我误解了你的问题。顺序不应该有影响。 - bhinesley

0

实现您要查找的最简单方法是使用Eric Fortis指出的:match命令。

我所知道的唯一实现语法高亮的方法需要您像当前所做的那样匹配整行。然后,您需要使用contains=...修饰符指定可以在您的行中出现的语法元素。我也非常确定这些元素需要被分配contained属性。这样,任何在您的行中找到的元素,即由.*匹配的元素,都将保留其高亮显示。

有关更多信息,请参见:help :syn-contains


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接