Monaco Editor 是微软开发的一款开源在线代码编辑器。它是 VSCode 的浏览器版本, 随着近年 VSCode 大热,Monaco Editor 也逐渐走红。目前虽未登上 Online Editor 领域的宝座,却也隐燃有超越几位老前辈之势。

GitHub项目链接:monaco-editor-demos

通过阅读本文,你可以了解以下内容:

  1. 如何下载 Monaco Editor
  2. 如何标准化搭建 Monaco Editor
  3. 如何寻找相关学习资源
  4. 如何调用常用 API

下载

新建项目文件夹,然后打开它:

$ mkdir my-application
$ cd my-application

接着下载 Monaco Editor:

$ npm install monaco-editor

搭建

本文提供了一个标准化的搭建方法,通过本文的方法搭建的 Monaco Editor 具有较强的功能扩展性。比如,如果你希望为应用添加多个编辑器,甚至文件管理系统,那么在本文提供的搭建方法之上,就可以直接添加这些新特性,从而避免不必要的踩坑。

本文提供两种搭建方法。

方法一:直接从GitHub仓库下载。

方法二:手动搭建。

下面说明了手动搭建的过程。

首先,在项目文件夹 my-application 下,新建一个名为 base 的文件夹。然后在该文件夹下新建 index.html, app.js, style.css 这三个文件:

$ mkdir base
$ cd base
$ touch index.html app.js style.css

在本地编辑器打开 index.html,输入:

<!DOCTYPE html>
<html><head><title>Monaco Editor Demo</title><link rel="stylesheet" href="./style.css"><script src="../node_modules/monaco-editor/min/vs/loader.js"></script><script src="./app.js"></script>
</head><body><div id="header">基础版 Monaco Editor</div><div id="root"></div>
</body></html>

打开 app.js,输入:

require.config({ paths: { 'vs': '../node_modules/monaco-editor/min/vs' } });
require(['vs/editor/editor.main'], function () {// 初始化变量var fileCounter = 0;var editorArray = [];var defaultCode = ['function helloWorld() {','   console.log("Hello world!");','}'].join('\n');// 定义编辑器主题monaco.editor.defineTheme('myTheme', {base: 'vs',inherit: true,rules: [{ background: 'EDF9FA' }],});monaco.editor.setTheme('myTheme');// 新建一个编辑器function newEditor(container_id, code, language) {var model = monaco.editor.createModel(code, language);var editor = monaco.editor.create(document.getElementById(container_id), {model: model,});editorArray.push(editor);return editor;}// 新建一个 divfunction addNewEditor(code, language) {var new_container = document.createElement("DIV");new_container.id = "container-" + fileCounter.toString(10);new_container.className = "container";document.getElementById("root").appendChild(new_container);newEditor(new_container.id, code, language);fileCounter += 1;}addNewEditor(defaultCode, 'javascript');});

打开 style.css,输入:

body {font-family: "Source Han Sans", "San Francisco", "PingFang SC", "Hiragino Sans GB", "Droid Sans Fallback", "Microsoft YaHei", sans-serif;transition: background-color .2s;
}#header {position: fixed;top: 0;left: 0;height: 50px;right: 0;background-color: #333;color: #fff;font-size: 20px;line-height: 50px;display: inline-block;vertical-align: middle;padding-left: 15px;overflow: hidden;z-index: 0;
}.container {position: fixed;top: 50px;left: 0;height: calc(100vh - 50px);right: 0;margin: 0 auto;display: block;transition: 0.2s;overflow: hidden;z-index: 0;
}

最终搭建效果如下:

常用 API

Monaco Editor 提供了极为丰富的 API,为了帮助初学者快速入门,本文提供了一些 API 调用范例。点击以下文段中的本例 Demo 链接,即可查看代码。

(一)获取编辑器内容

获取编辑器内容的 API 如下:

ITextModel.getValue()

其中,ITextModel 是 Monaco Editor 中的一种特殊的数据类型。如果你用 monaco.editor.create() 函数搭建编辑器。那么 ITextModel 其实就是该函数的返回值。

Demo 效果图:

更多信息参见:

  • 本例 Demo
  • API 文档

(二)实时获取光标所在行号和列号

获取光标所在行号和列号的 API 如下:

ITextModel.getPosition().lineNumber
ITextModel.getPosition().column

如果需要实时获取,即在每次光标移动时更新行号和列号,还需要加一个监听器:

ITextModel.onDidChangeCursorPosition((e) => {// some codes here.
});

Demo 效果图:

更多信息参见:

  • 本例 Demo
  • API 文档

(三)语法高亮

设置语法高亮的 API 如下:

setModelLanguage(model: ITextModel, languageId: string)

Demo 效果图:

更多信息参见:

  • 本例 Demo
  • API 文档

学习资源

授人以鱼不如授人以渔,以下是几个比较重要的资料来源。Monaco Editor 的中文资源很少,因此以下都是英文资源:

链接 说明
官方代码仓库的 issue 区 源代码仓库的 issue 区下,有很多使用者的提问。Monaco editor 的开发人员回复了其中很多问题。因此,如果你在使用中遇到麻烦,可以尝试在 issue 区用关键字搜索一下。
官方代码仓库的 used by 区 Used by 区的作用是寻找使用了本框架的其他开源仓库。如果有毅力一直翻下去,你很可能会找到和你用该框架做相似实现的仓库。那么你就可以借鉴他的代码了。
官方 demo 仓库 官方 demo 仓库是个好东西,这是一切开始的地方。跑一跑官方demo,很多事就不言自明了,省了翻阅文档的时间。
Playground Playground 和 官方 demo 仓库作用差不多,但它是部署在网络上的。可以先在 playground 里试验以后,明确自己需要这个功能了,然后再在本地搭建。
API 文档 鉴于 Monaco Editor 是一个仍在更新的项目,API 文档 的内容也未必完全正确。但它确实是收录 API 最全面的地方。如果你需要实现的功能比较偏门,找不到任何 demo 和教程,那么自己查 API 文档往往是最终的办法。
Stackoverflow Stackoverflow 也有很多关于 Monaco Editor 的问答。

推荐阅读

如果你对本项目感兴趣,那么你可能同样对 Monaco Speech Editor 感兴趣。

Note: Monaco Speech Editor 是笔者编写的一款适用于视障人群的在线代码编辑器。它提供丰富的语音辅助功能,可以精准地定位并朗读用户指定内容。并且,它还提供多种语音模式,比如字符模式、音乐模式、全局模式。这些模式可以根据用户在不同编程阶段的不同需求,提供差异化的语音内容输出。此外,它内置供全盲者使用的操作界面,从而使全盲者无需使用电脑屏幕和鼠标,也能正常使用本编辑器。

Monaco Speech Editor 中集成了大量 Monaco Editor 的 API。并且在细节上做了很多优化。本项目是 Monaco Speech Editor 的子项目,是把 Monaco Speech Editor 中可以通用的部分代码抽取出来形成的。如果想尝试 Monaco Editor 的更多功能,欢迎 star, clone 和 fork。

Monaco Editor API 使用范例相关推荐

  1. Monaco Editor教程(十八):使用api来完成某些键盘操作,格式化,查找,显示右侧菜单等。

    背景 在一般的Web IDE中,我们需要将经常用到的一些操作放到顶部操作栏里,类似语雀的文档编辑. 代码编辑器,一般也会放一些查找,格式化,撤销,恢复.有些人喜欢用快捷键来进行这些操作,但由于mona ...

  2. linux终端怎么设置monaco,Monaco Editor 使用指南

    为什么要写这篇文章? 最近开发了一个简单的在线代码编辑器,基于 Monaco Editor 实现,没有了解过 Monaco 的人可能不知道,我们常用的 VS Code 也是基于它实现的~ 回到正题,M ...

  3. react 中 使用 Monaco Editor 编辑器

    目录 Monaco Editor react 中使用 安装 使用方法 Webpack 配置 属性 获取 monac 开发示例---自定义提示 自定义主题 Monaco Editor 微软之前有个项目叫 ...

  4. 微软开源在线代码编辑器,编辑器天花板之Monaco Editor

    各自随意 彼此在意 各自忙乱 彼此牵挂 ------致友情 文章目录 常见属性配置 一.自定义语言高亮 1. 注册语言 2. 定义高亮 二.标记错误 三.更新编辑器属性 options 四.代码智能提 ...

  5. Monaco Editor

    Monaco Editor是为VS Code提供支持的代码编辑器,其功能在此处有更好的描述. 请注意,此存储库不包含代码编辑器的源代码,它仅包含将所有内容打包在一起并发送monaco-editornp ...

  6. Monaco Editor (vite/webpack + ts + vue项目使用)

    1.什么是Monaco Editor?Monaco Editor 微软之前有个项目叫做Monaco Workbench,后来这个项目变成了VSCode,而Monaco Editor(就是从这个项目中成 ...

  7. Monaco Editor 使用入门

    以前项目是用ace编辑器的,但是总有些不敬人意的地方.前端事件看见的VS Code编辑器Monaco Editor准备更换下,下面介绍一些使用中遇到的一点问题.代码提示 1.项目引用 import * ...

  8. 手把手教你实现在Monaco Editor中使用VSCode主题

    背景 笔者开源了一个小项目code-run,类似codepen的一个工具,其中代码编辑器使用的是微软的Monaco Editor,这个库是直接从VSCode的源码中生成的,只不过是做了一点修改让它支持 ...

  9. Vue3中使用Monaco Editor代码编辑器记录~持续更新

    Vue3中使用Monaco Editor代码编辑器记录-持续更新 因为毕设需要用到代码编辑器,根据调研,我选择使用monaco-editor代码编辑器 前端框架使用Vue3 + elementUI m ...

最新文章

  1. ROS、realsense开发常用命令汇总
  2. Forefront for OCS2007之部署
  3. ASP.NET 2.0关于用户登录限制问题实例:防止同一用户同时登陆
  4. 华为畅享8可以云闪付吗_华为畅享8、魅族16X、海信彩墨屏阅读手机A5C对比
  5. 对话系统(二)-普通神经网络
  6. C++ Opengl纹理混合源码
  7. win10下JDK环境变量配置与IDEA开发工具清晰简洁步骤,迈出Java学习第一步
  8. tcp报文格式_34.TCP取样器
  9. 利用SQL查找表中的质数(prime number)和完全数(perfect number)以及几个有趣的SQL语句...
  10. 相亲交友App,婚恋交友App,开源源码可搭建H5公众号小程序App,支持个性化定制
  11. 机器学习实战应用案例100篇(十)-蝙蝠算法从原理到实战应用案例
  12. 企业微信每日定时自动上报
  13. android 图片字体涂鸦,android 实现在照片上绘制涂鸦的方法
  14. 免费在线的redmine项目演示,提供免费三级域名
  15. 微信订阅号获取openid
  16. 做的好不如说得好,老板为什么喜欢听过程汇报?
  17. 【5G/4G】AT Command 详细教程(基于3GPP Spec 27.007)
  18. 生成的分子图像是否可以识别为SMILES,然后再将识别后的SMILES转换为图像?
  19. [C#] 控制系统音量-第二章
  20. Vue 点击事件写法

热门文章

  1. [PhotoShop]在没有扫描仪的情况下如何使用普通照片PS出扫描效果
  2. linux命令看cpu使用率,怎么使用Linux命令查看CPU使用率
  3. RNA结构预测竞赛圆满落幕,且看前三名团队飞桨论道(下篇)
  4. Guacamole桌面虚拟化介绍和安装使用
  5. nvme固态必须uefi启动吗_听说这招能在3秒内启动Windows10,很多高手都这么做,你知道吗?...
  6. 基于HackRF的AIS信号采集与解调
  7. 软件测试工程师笔试题带答案
  8. 按月龄选取最好胎儿教育方法
  9. python爬虫获取元素的属性值_趣说Python爬虫05--获取基金实时净值
  10. 华为云 DevCloud 部署云服务器