Visual studio code 定义VSCode方案语法规则,该规则为;“永远赢”;

Visual studio code 定义VSCode方案语法规则,该规则为;“永远赢”;,visual-studio-code,vscode-extensions,textmate,tmlanguage,Visual Studio Code,Vscode Extensions,Textmate,Tmlanguage,我想在markdown中添加一些额外的语法突出显示 我定义了注入语法: { "scopeName": "markdown.mytodos", "injectionSelector": "L:text.html.markdown", "patterns": [ { "include": "#todo" } ], "repository": { "todo": { "match": "^[ \t]*o .*",

我想在markdown中添加一些额外的语法突出显示

我定义了注入语法:

{
  "scopeName": "markdown.mytodos",
  "injectionSelector": "L:text.html.markdown",
    "patterns": [
        { "include": "#todo" }
  ],
    "repository": {
        "todo": {
        "match": "^[ \t]*o .*",
        "_comment": "Line start, tabs or spaces, then literal `o` and a space",
        "name": "entity.name.tag.css"
    }
  }
}
结果:

我希望看到我的规则适用于这两个示例,但它只适用于第一个示例:

foo
o bar <- correct scope

foo
    o bar <- wrong scope (meta.paragraph.markdown)
这是
规则:

(^|\\G)[ ]{0,3}(?=\\S)
(^|\\G)((?=\\s*[-=]{3,}\\s*$)|[ ]{4,}(?=\\S))
我目前的理论是,这个未关闭的
,而
阻塞了我的规则

问题:

  • 打开的规则是否阻止任何其他匹配的发生
  • 我如何告诉我的vscode/textmate语法,我希望它一直“赢”,即使是在不同的范围内
  • 我试过:

  • 使用开始/结束规则而不是
    匹配
    (无更改)
  • 将语言定义为
    meta.paragration.markdown
    的子集,而不是
    text.html.markdown
    “injectionSelector”:“L:meta.paragration.markdown”
    (未按预期添加嵌套范围)

  • 我发现改变我的匹配模式可以解决这个问题

    在嵌套的情况下不起作用:

    ^[ \t]*o .*
    
    适用于我测试过的所有情况:

    (^|\G)[ \t]*o .*
    
    医生说:

    \G在前一个匹配的末尾或第一个匹配的字符串的开头断言位置


    在多个作用域选择器试图与vscode/textmate匹配的情况下,这意味着什么?我不确定。如果你知道,请插话

    我发现改变我的匹配模式可以解决这个问题

    在嵌套的情况下不起作用:

    ^[ \t]*o .*
    
    适用于我测试过的所有情况:

    (^|\G)[ \t]*o .*
    
    医生说:

    \G在前一个匹配的末尾或第一个匹配的字符串的开头断言位置

    在多个作用域选择器试图与vscode/textmate匹配的情况下,这意味着什么?我不确定。如果你知道,请插话