gpt4 book ai didi

regex - 将不同的范围应用于 Sublime Text 语法定义文件中的相同字符

转载 作者:行者123 更新时间:2023-12-03 13:34:49 26 4
gpt4 key购买 nike

我正在尝试为 Sublime Text 2 创建一个新的 .tmLanguage 文件,它为 knitr 定义了特殊的围栏代码块。和 Markdown 。这些 block 采用这种形式:

```{r example_chunk, echo=true}
x <- rnorm(100)
y <- rnorm(100)
plot(y ~ x, pch=20)
```

有两个部分:(1) 参数 ({r ...}) 和 (2) 实际嵌入代码(在结束 } 和``` 在最后)。需要应用四个范围来划定这两个部分:

  • punctuation.definition.parameters.begin.knitr
  • punctuation.definition.parameters.end.knitr
  • punctuation.section.embedded.begin.knitr
  • punctuation.section.embedded.end.knitr

使用正则表达式将这些范围与部分代码 Hook 非常容易(部分代码可用 here )。但是,这些范围中的两个需要应用于同一个字符:参数部分中的最终 },它结束参数并表示围栏/嵌入代码的开始。

enter image description here

但是,似乎不可能将两个作用域分配给 .tmLanguage 文件中的同一个字符。结束参数部分并开始嵌入部分是不可能的。定义的第一个范围优先,因此打破了语法突出显示。

有没有办法使用 .tmLanguage 语法定义将两个不同的范围应用于 Sublime Text 中的同一字符?如果没有,有什么方法可以将 punctuation.definition.parameters.end.knitrpunctuation.section.embedded.begin.knitr 挂接到两个不同的东西而不是单个 {? (请记住,我无法向代码块中添加其他字符。)

最佳答案

事实证明,似乎不可能在同一个字符上使用两个标点符号定义(除非有某种方法可以使用某种疯狂的嵌套系统来使其工作)。

但幸运的是,我找到了一个解决方法:可以将范围分配给 \n .所以我可以使用以下正则表达式来模拟重叠范围:

  • (\})将捕获右大括号,可以用作 punctuation.section.embedded.begin.knitr
  • (?<=\})(.*)(\n)将捕获 \n在右括号作为第二个找到的组之后,允许我将它分配给 punctuation.section.embedded.begin.knitr

棘手,但它有效。

关于regex - 将不同的范围应用于 Sublime Text 语法定义文件中的相同字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18371155/

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