【发布时间】:2020-05-08 02:40:50
【问题描述】:
我想为 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)
所以看起来我的范围没有占用,即使正则表达式匹配(单独测试)。
我查了一下,Markdown 用这个begin 规则定义了meta.paragraph.markdown:
(^|\\G)[ ]{0,3}(?=\\S)
还有这条while 规则:
(^|\\G)((?=\\s*[-=]{3,}\\s*$)|[ ]{4,}(?=\\S))
我目前的理论是这个未关闭的while 正在阻止我的规则。
问题:
- 开放规则是否会阻止任何其他匹配的发生?
- 如何告诉我的 vscode/textmate 语法我希望它一直“获胜”,即使是在不同的范围内?
我试过了:
- 使用开始/结束规则而不是
match(无变化) - 将语言定义为
meta.paragraph.markdown的子集而不是text.html.markdown:"injectionSelector": "L:meta.paragraph.markdown"(未按预期添加嵌套范围)
【问题讨论】:
标签: visual-studio-code vscode-extensions textmate tmlanguage