【问题标题】:Vim Syntax Match In A Region区域中的 Vim 语法匹配
【发布时间】:2018-03-16 09:25:32
【问题描述】:

我在 Java 的文件之后有一个语法。它有效,因为我已经定义了一些语法关键字、匹配项和区域,它们已成功突出显示。
不是我想突出显示一些匹配项,这些匹配项位于我之前定义的突出显示区域内。我的意图是首先突出显示该区域,然后在该区域部分进行匹配。
确切的用例是函数/类/...描述,其中包含@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;
}

【问题讨论】:

    标签: vim vim-syntax-highlighting


    【解决方案1】:

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

    syntax region _Comment start="\/\*" end="\*\/" contains=_CommentKey
    

    看看:h syn-contains

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

    语法模式总是被解释为设置了 'magic' 选项, 不管 'magic' 的实际值是多少。

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

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

    应该没问题

    【讨论】:

    • 太棒了!我开始阅读语法文档,但到目前为止还没有读到这一节。对不起。
    • 没问题,我会尽快更新您的第一个问题
    • 看起来这不再是问题了......我不知道为什么,但知道它工作得很好。
    • 不只是整行突出显示为_CommentKey ?
    • 原来如此,但由于我使用contains,它的工作原理很简单,例如只有@author 被突出显示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 2016-01-02
    相关资源
    最近更新 更多