VSCode 建立在 MonacoEditor 之上,不支持 Textmate 语法和主题。但不知何故,VSCode 使之成为可能。我很好奇 VSCode 是如何做到这一点的。
我之所以这么问,是因为我正在制作一个带有 TextMate 语法和主题支持的代码编辑器(基于 Monaco)。但我无法理解如何实现它。
虽然有像 monaco-textmate
这样的包可以让 TextMate 语法在 Monaco 上工作,但语法高亮是 still not working properly .
最佳答案
TextMate 语法依赖于名为 Oniguruma 的特定正则表达式实现/库,它是用 C 语言实现的。然而,Monaco 被设计为在浏览器中运行,并且那里可用的 JavaScript 正则表达式引擎与 Oniguruma 不兼容。 Monaco's FAQ 的“为什么编辑器不支持 TextMate 语法?” 部分详细解释了所有这些。 .它还提到了可能最终将 Oniguruma 编译为 WebAssembly 的可能性。解决这个问题。
VSCode 本身使用 vscode-textmate用于其 TMLanguage 处理,它具有 Oniguruma 库作为 native 依赖项。 VSCode 可以有原生依赖,因为它不在浏览器环境中运行。
根据monaco-textmate's readme ,其实很大程度上是基于vscode-textmate:
99% of the code in this repository is extracted straight from
vscode-textmate
而且它确实使用了前面提到的 WASM 方法:
monaco-textmate
relies ononigasm
package to provideoniguruma
regex engine in browsers. onigasm itself relies onWebAssembly
.
至于为什么语法高亮在 monaco-textmate 中并不总是像预期的那样工作......我不知道,我希望这只是实现中的一个错误。也许等待维护者的回复,您链接的问题是相当新的。
至少从概念上讲,它不能实现与 VSCode 相同的语法高亮显示不应该是有原因的,因为它使用相同的正则表达式风格。
关于visual-studio-code - TextMate 语法和主题如何与 VSCode 配合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56254150/