我正在使用 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)
这些语言已经定义了它们可以处理的文件扩展名,因此可以通过给它文件名来允许摩纳哥选择合适的语言:
const model = monaco.editor.createModel(
value,
undefined, // language
monaco.Uri.file(filename) // uri
)
editor.setModel(model)
Run Code Online (Sandbox Code Playgroud)
我找到了一个有用的 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
| 归档时间: |
|
| 查看次数: |
4118 次 |
| 最近记录: |