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"
应该可以正常工作
我在文件后有 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"
应该可以正常工作