【发布时间】:2022-01-25 14:37:56
【问题描述】:
我正在尝试扩展 VSCode 的 Markdown 语法高亮器,以高亮一些包含在自定义语法中的嵌套 Javascript。比如下面的 Markdown 文件
# Example
@@$ var value = 10;
The result is @@{value}.
将转换为
# Example
The result is 10.
我希望在 VSCode 中将以下内容突出显示为 Javascript,就好像它们被包装在一个受保护的代码块中一样:
-
以
@@$开头的行的内容。 -
包裹在
@@{和}之间的内容。
我尝试修改markdown.tmLanguage.json 以添加这些:
"fenced_code_block_majsdown2": {
"begin": "(^|\\G)(@@$)",
"name": "markup.fenced_code.block.markdown",
"end": "(^|\\G)(\\r\\n|\\r|\\n)\\s*$",
"patterns": [{ "include": "source.js" }]
},
"fenced_code_block_majsdown": {
"begin": "(^|\\G)(@@{)",
"name": "markup.fenced_code.block.markdown",
"end": "(^|\\G)(})\\s*$",
"patterns": [{ "include": "source.js" }]
},
代码被正确突出显示,但似乎"end" 位被忽略了,我不明白为什么——从@@$ 或@@{ 开始,整个文档被突出显示为Javascript。我尝试了几种正则表达式组合,并尝试删除初始部分 ((^|\\G)),但我无法弄清楚为什么荧光笔如此贪婪。
我怎样才能达到我想要的目标?
【问题讨论】:
-
模式中与
$字符匹配的$必须被转义,(^|\\G)(@@\\$)
标签: javascript regex visual-studio-code vscode-extensions textmate