区域中的Vim语法匹配

区域中的Vim语法匹配,vim,vim-syntax-highlighting,Vim,Vim Syntax Highlighting,我有一个Java文件后的语法。它是有效的,因为我已经定义了一些语法关键字、匹配项和区域,它们已成功高亮显示。 我不想突出显示一些匹配项,它们位于我之前定义的突出显示区域内。我的意图是先突出显示该区域,然后将该区域的部分划入比赛。 确切的用例是函数/类/。。。带有i文档关键字的说明,如@author,@version。。。因此,我将以下内容写入语法文件: syntax region _Comment start="\/\*" end="\*\/" syntax match _CommentKey

我有一个Java文件后的语法。它是有效的,因为我已经定义了一些语法关键字、匹配项和区域,它们已成功高亮显示。
我不想突出显示一些匹配项,它们位于我之前定义的突出显示区域内。我的意图是先突出显示该区域,然后将该区域的部分划入比赛。
确切的用例是函数/类/。。。带有i文档关键字的说明,如
@author
@version
。。。因此,我将以下内容写入语法文件:

syntax region _Comment start="\/\*" end="\*\/"
syntax match _CommentKey "^\s*\*\s*\zs@\w*\ze\s"

highlight link _Comment Comment
highlight link _CommentKey Special

不,我有两个问题。我独立进行测试,注释区域工作正常。注释键匹配仅在没有
\zs
部分的情况下有效,因此它还突出显示了前面的
*
。只要我添加
\zs
就不会再突出显示任何内容。我怎样才能解决这个问题?对于其他匹配,这很好。
第二个问题:我没有把它们结合起来。如果我同时启用这两个规则,则只有整个部分将突出显示为
Comment
。无论我把第二条规则放在哪里,它都不会突出显示。此外,我还尝试对该区域使用
跳过
,直到我意识到它的含义有所不同。
有什么想法吗?谢谢


要测试的示例代码:

/**
 * Function description here.
 *
 * @param id
 * @author Max Mustermann
 */
private static int function foo(final int id) {
  return id;
}

具有嵌套匹配项的语法区域必须允许:

syntax region _Comment start="\/\*" end="\*\/" contains=_CommentKey
查看
:h syn包含

对于第一个问题,您应该阅读
:h syn pattern
,在那里您会发现以下句子:

语法模式总是被解释为设置了“magic”选项, 不管“魔法”的实际价值是什么

请参见
:h magic
。您的正则表达式必须以魔法模式转义
@

"^\s*\*\s*\zs\@\w*\ze\s" 

应该很好

太棒了!我开始阅读文档中的语法,但到目前为止还没有读到这一部分。很抱歉。没问题,我会很快更新您的第一个问题。看起来这不再是问题了。。。我不知道为什么,但我知道它工作得很好。不仅仅是整行突出显示为
\u CommentKey
?是这样的,但是因为我使用
包含
,所以它的工作原理很简单,例如,只突出显示
@author