如何在Vim中为相同的关键字获取上下文相关的语法着色?

时间:2010-10-30 02:47:42

标签: vim syntax

我正在为没有语法文件的小众语言创建一个vim语法文件。设置简单函数时,该语言具有以下语法。

foo(parameter)
    if parameter then
       print("yes")
    else
       print("no")
    end
 end

我希望与if配对的结束与条件的语法着色以及与函数声明配对的“end”具有函数语法着色。我该如何实现这一目标?我目前将结束设置为关键字。这确保它是彩色的,但它匹配if的颜色,而不是函数名称。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您需要定义一些语法区域,从if开始,以end结尾,另一个以函数声明开头,以end结束。您可以使用'contains'/'containedin'选项来允许嵌套区域等。这远非微不足道,但在:help syn-region等中有许多有用的指南。彻底阅读整个帮助文件并进行实验。为了帮助您入门,您可以尝试这样的事情:

syn keyword MyLanguageElse else containedin=MyLanguageIfBlock

syn region MyLanguageIfBlock matchgroup=MyLanguageIf start="^\s*if\>" end="^\s*end\>" containedin=MyLanguageFuncBlock contains=MyLanguageIfBlock
syn region MyLanguageFuncBlock matchgroup=MyLanguageFunc start="^\s*\k*\ze(" end="^\s*end\>"

hi link MyLanguageIf Keyword
hi link MyLanguageElse Keyword
hi link MyLanguageFunc Comment
祝你好运!