2013-07-02 79 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