2011-08-11 107 views
8

我想在Vim(GUI版本)中自定义语法高亮。我的语言有一个现有的语法文件。我想添加到该语法中,如果该行以>开头,则会突出显示每行的背景颜色。我想通了,我基本上可以通过Vim定制语法高亮仅背景

:syntax match Output /^>.*$/ 

实现这一点,并添加

:hi Output guibg=LightBlue 

到colourscheme。这些Output行中的文本背景将以浅蓝色着色,但也会覆盖前景色。所以大部分语法高亮消失。如何在这些行中保持前景语法突出显示?

另外:有没有办法将背景的突出显示扩展到这些行的最后(屏幕右端)?

+1

这是一个很好的问题。我担心答案可能不是两个,但希望有人会证明我错了。 – Owen

回答

0

试试这个:

:hi Output guibg=LightBlue guifg=NONE 
+0

我在vim.gtk -g中获得:“E254:Kann die Farbe None nicht zuweisen”。翻译成英文:不能分配颜色无。 – rembremading

+0

需要全部大写。纠正。 – bhinesley

+0

谢谢,我刚刚发现自己的命令不会抱怨NONE,但我仍然得到上述结果。请注意,我将高亮命令放在colourscheme文件的开头,并在编辑器中输入语法命令。可能取决于订单吗? – rembremading

3

下面是如何保存的语法,我匹配的行开始{

:hi Output guibg=LightBlue 
:match Output '\%>0v{.*' 

enter image description here

编辑:,因为你想要的对面你需要

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

enter image description here

+0

作品(相反顺序)。第一行不仅仅是一个正则表达式,比如我的?突出显示整条线的任何想法都可以通过语法高亮来实现? – rembremading

+0

我环顾四周,但无法找到。使用正则表达式我们匹配'^。* $',因此突出显示直到'\ r'字符为止,而不是直到窗口大小。也许有一些与':set ve = all'有关的东西,但不确定。 –

+0

我正在使用的正则表达式匹配'\%'所有'''在'0v'虚拟列零后,然后'{。*'匹配以{开头的内容。 –

0

实现你在找什么,最简单的方法是使用:match命令埃里克富通指出。

我知道通过语法高亮来实现这一点的唯一方法就是要按照您现在正在做的来匹配整条线。然后,您需要使用contains=...修饰符指定哪些语法元素可以在您的行中。我也很确定这些元素需要为其分配contained属性。通过这种方式,您的系列中找到的任何元素(即.*匹配的元素)都会保持突出显示。

请参阅:help :syn-contains了解更多信息。