3

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

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

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

4

1 回答 1

7

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

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

根据monaco-textmate 的自述文件,它实际上很大程度上基于 vscode-textmate:

此存储库中 99% 的代码直接提取自vscode-textmate

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

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

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

至少从概念上讲,不应该有它不能实现与 VSCode 相同的语法高亮的原因,因为它使用相同的正则表达式风格。

于 2019-05-22T10:23:32.943 回答