2013-07-02 94 views
2

我写了一个vim语法文件。我注意到除了以冒号(:)开头的所有关键字都被突出显示。有没有什么办法可以在Vim中冒号冒号在Vim中突出显示以冒号开头的关键字

下面是该文件的一个部分:

syn keyword actionLabel :action nextgroup=actionName skipwhite 
syn keyword problemLabels :goal :init :domain 
syn keyword advLabels :types 
syn keyword pondLabels :observe 


hi def link actionLabel  Statement 
hi def link problemLabels Statement 
hi def link advLabels  Statement 
hi def link pondLabels  Statement 

回答

3

:h :syn-define约关键字...

只能包含关键字的字符,根据 'iskeyword' 选项。它不能包含其他语法项目。 只会匹配一个完整的单词(匹配前或匹配后没有关键字 )。关键字 “如果” 将匹配 “如果(A = B)”,而不是在 “IFDEF X”,因为 “(” 不是关键字 字符和 “d” 是。

这意味着你必须修改iskeyword你的文件类型,包括冒号(ASCII 58)从VI默认的开始,我们可以支持任何字母,数字,下划线或冒号:

set iskeyword="@,48-58,_" 
3

最好解决方案似乎不使用keyword选项,而是使用matches选项代替。

syn match pddlLabel ':[a-zA-Z0-9]\+' 
hi def link pddlLabel Statement 
+1

这将匹配*任何*以冒号开头,而不仅仅是特定的关键字。这可能是你想要的,但重要的是要注意。 –

+0

是的,我明白了。这或多或少是我想要的。我也可以为每个明确的关键字写出其中的一个,尽管这很耗时,我承认。 'syn匹配pddlLabel1':action''等。 – BlackSheep