VSCode构建在不支持Textmate语法和主题的MonacoEditor之上。但是VSCode以某种方式使之成为可能。我很好奇VSCode能够做到这一点。
我之所以问是因为我正在制作一个具有TextMate语法和主题支持的代码编辑器(基于Monaco)。但是我无法理解如何实现。
尽管有monaco-textmate
之类的软件包可以使TextMate语法与Monaco一起使用,但语法高亮显示为still not working properly。
答案 0 :(得分:0)
TextMate语法依赖于称为Oniguruma的特定正则表达式实现/库,该实现/库在C中实现。但是,Monaco设计为在浏览器中运行,并且那里可用的JavaScript regex引擎与Oniguruma不兼容。 Monaco's FAQ的“为什么编辑器不支持TextMate语法?” 部分对此进行了详细说明。它还提到了可能最终将Oniguruma编译为WebAssembly来解决此问题的可能性。
VSCode本身使用vscode-textmate进行TMLanguage处理,该操作将Oniguruma库作为 native 依赖项。 VSCode可以具有本机依赖性,因为它不能在浏览器环境中运行。
根据monaco-textmate's readme,它实际上很大程度上基于vscode-textmate:
此存储库中99%的代码直接从
中提取vscode-textmate
它确实使用了前面提到的WASM方法:
monaco-textmate
依靠onigasm
包在浏览器中提供oniguruma
正则表达式引擎。 onigasm本身依靠WebAssembly
。
关于为什么在monaco-textmate中语法高亮不能总是按预期方式工作...我不知道,我希望这只是实现中的一个错误。也许等待维护者的回应,您链接的问题还是很新的。
至少从概念上讲,由于使用相同的正则表达式风格,因此它不能达到突出显示VSCode的语法的原因。