Vim 一个区域中的语法匹配

Vim Syntax Match In A Region

我在文件后有 Java 的语法。它有效,因为我已经定义了一些语法关键字、匹配项和区域,它们已成功突出显示。
不是我想突出显示一些匹配项,这些匹配项在我之前定义的突出显示区域内。我的意图是首先突出显示该区域,然后匹配该区域部分。
确切的用例是 function/class/... 带有 @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。无论我将第二条规则放在哪里,它都不会突出显示。我还尝试对区域使用 skip,直到我意识到它的用途不同。
有任何想法吗?谢谢!


要测试的示例代码:

/**
 * 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-contains

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

Syntax patterns are always interpreted like the 'magic' option is set, no matter what the actual value of 'magic' is.

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

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

应该可以正常工作