TextMate 语法和主题如何与 VSCode 配合使用?

RED*_*SAD 2 visual-studio-code tmlanguage monaco-editor

VSCode 建立在 MonacoEditor 之上,MonacoEditor 不支持 Textmate 语法和主题。但不知何故 VSCode 使它成为可能。我很好奇 VSCode 是如何做到这一点的。

我问是因为我正在制作一个带有 TextMate 语法和主题支持的代码编辑器(基于 Monaco)。但我无法理解如何实现它。

尽管有一些软件包monaco-textmate可以使 TextMate 语法与 Monaco 一起使用,但语法突出显示仍然无法正常工作

Gam*_*a11 6

TextMate 语法依赖于一个名为Oniguruma的特定正则表达式实现/库,它是用 C 实现的。但是摩纳哥被设计为在浏览器中运行,并且那里可用的 JavaScript 正则表达式引擎与 Oniguruma 不兼容。所有这些都在“为什么编辑器不支持 TextMate 语法?”中有详细解释。第摩纳哥的常见问题。它还提到了可能最终将 Oniguruma 编译到WebAssembly以解决此问题的可能性。

VSCode 本身使用vscode-textmate进行 TMLanguage 处理,它具有 Oniguruma 库作为本机依赖项。VSCode 可以具有本机依赖项,​​因为它不在浏览器环境中运行。

根据monaco-textmate 的 readme,它实际上很大程度上基于 vscode-textmate:

此存储库中 99% 的代码直接从 vscode-textmate

它确实使用了前面提到的 WASM 方法:

monaco-textmate依赖onigasmoniguruma在浏览器中提供正则表达式引擎。onigasm 本身依赖于WebAssembly.

至于为什么语法突出显示并不总是像 monaco-textmate 预期的那样工作......我不知道,我希望这只是实现中的一个错误。也许等待维护者的回应,您链接的问题是相当新的。

至少从概念上讲,它无法实现与 VSCode 相同的语法突出显示,这不应该是一个原因,因为它使用相同的正则表达式风格。