TextMate语法和主题如何与VSCode一起使用?

时间:2019-05-22 09:57:30

标签: visual-studio-code monaco-editor tmlanguage

VSCode构建在不支持Textmate语法和主题的MonacoEditor之上。但是VSCode以某种方式使之成为可能。我很好奇VSCode能够做到这一点。

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

尽管有monaco-textmate之类的软件包可以使TextMate语法与Monaco一起使用,但语法高亮显示为still not working properly

1 个答案:

答案 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的语法的原因。