gpt4 book ai didi

visual-studio-code - 定义 "always wins"的 VSCode Scheme Syntax 规则

转载 作者:行者123 更新时间:2023-12-05 06:21:20 26 4
gpt4 key购买 nike

我想为 markdown 添加一些额外的语法高亮。

我定义了一个注入(inject)语法:

{
"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 阻止了我的规则。

问题:

  1. 开放规则是否会阻止任何其他匹配的发生?
  2. 如何告诉我的 vscode/textmate 语法我希望它始终“获胜”,即使在不同的范围内也是如此?

我试过:

  1. 使用开始/结束规则代替匹配(无变化)
  2. 将语言定义为 meta.paragraph.markdown 的子集而不是 text.html.markdown:"injectionSelector": "L:meta.paragraph .markdown"(不按预期添加嵌套范围)

最佳答案

我发现更改我的匹配模式可以解决问题。

在嵌套情况下不起作用:

^[ \t]*o .*

适用于我测试过的所有情况:

(^|\G)[ \t]*o .*

文档说:

\G asserts position at the end of the previous match or the start of the string for the first match

在多个范围选择器试图被 vscode/textmate 匹配的上下文中,这意味着什么?我不确定。知道的请指点!

关于visual-studio-code - 定义 "always wins"的 VSCode Scheme Syntax 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59851224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com