如何根据摩纳哥编辑器中的文件扩展名动态设置语言?

K. *_*bol 4 monaco-editor

我正在使用 monaco-editor 来显示本地代码文件的内容,这些文件可能是用各种语言编写的,所以我想知道如何根据文件的扩展名或文件的第一行动态设置/更改 monaco 编辑器的语言没有扩展名(如#!/usr/bin/env python)。

似乎 monaco-editor 本身没有这个功能,但 VSCode 显然有。

我想定义一个名为 checkLanguage(file_path) 的方法,它接受一个文件路径并返回代表 monaco-editor 支持的语言的字符串。如果无法确定语言,则返回纯文本。

monaco.editor.setModelLanguage(model, checkLanguage(file_path))
Run Code Online (Sandbox Code Playgroud)

支持的语言:https : //github.com/microsoft/monaco-languages

Alf*_*ton 5

这些语言已经定义了它们可以处理的文件扩展名,因此可以通过给它文件名来允许摩纳哥选择合适的语言:

const model = monaco.editor.createModel(
  value,
  undefined, // language
  monaco.Uri.file(filename) // uri
)

editor.setModel(model)
Run Code Online (Sandbox Code Playgroud)


K. *_*bol 3

我找到了一个有用的 npm 库,可以根据文件名或内容检测编程语言,并在我的项目中实现语言检测,如下所示:

  const langDetector = require('language-detect')
  const langMapper = require('language-map')
  // async way
  let lang=''
  langDetector(abs_path, (err, language) => {
  if (err) {
     console.log(err)
     lang = 'plaintext'
  } else {
     lang = langMapper[language].aceMode
  }
  // sync way
  lang = langMapper[langDetector.sync(abs_path)].aceMode
Run Code Online (Sandbox Code Playgroud)

[1] 库链接:https://github.com/blakeembrey/node-language-detect

[2] 完整代码:https://github.com/Symbolk/SmartCommit/blob/master/src/components/utils/gitutils.js