visual-studio-code - TextMate 语法和主题如何与 VSCode 配合使用?

标签 visual-studio-code monaco-editor tmlanguage

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 on onigasm package to provide oniguruma regex engine in browsers. onigasm itself relies on WebAssembly.

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

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

关于visual-studio-code - TextMate 语法和主题如何与 VSCode 配合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56254150/

相关文章:

angular - 如何在 vscode 中使用一个(或两个)快捷方式在 TypeScript 和 HTML 之间切换?

c++ - 使用VSCode中的MSVS编译器构建OpenCV应用程序

javascript - 如何创建多个 monaco javascript 编辑器,使它们不共享全局命名空间?

webpack - 将 Monaco Editor 集成到 ember Octane 中

visual-studio-code - 我的语法高亮语法注入(inject)有什么问题?

typescript - VsCode 插件 : Color Coding inline SQL in ts file

javascript - vscode 为自动完成选择不寻常的选项

javascript - 如何在 Monaco 编辑器中获得 JQuery 代码完成?

visual-studio-code - 可以扩展 Visual Studio Code 中的语言吗?

visual-studio-code - 类型声明中的 Visual Studio Code C++ 颜色格式