Monaco Editor API 使用范例
Monaco Editor 是微软开发的一款开源在线代码编辑器。它是 VSCode 的浏览器版本, 随着近年 VSCode 大热,Monaco Editor 也逐渐走红。目前虽未登上 Online Editor 领域的宝座,却也隐燃有超越几位老前辈之势。
GitHub项目链接:monaco-editor-demos
通过阅读本文,你可以了解以下内容:
- 如何下载 Monaco Editor
- 如何标准化搭建 Monaco Editor
- 如何寻找相关学习资源
- 如何调用常用 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 使用范例相关推荐
- Monaco Editor教程(十八):使用api来完成某些键盘操作,格式化,查找,显示右侧菜单等。
背景 在一般的Web IDE中,我们需要将经常用到的一些操作放到顶部操作栏里,类似语雀的文档编辑. 代码编辑器,一般也会放一些查找,格式化,撤销,恢复.有些人喜欢用快捷键来进行这些操作,但由于mona ...
- linux终端怎么设置monaco,Monaco Editor 使用指南
为什么要写这篇文章? 最近开发了一个简单的在线代码编辑器,基于 Monaco Editor 实现,没有了解过 Monaco 的人可能不知道,我们常用的 VS Code 也是基于它实现的~ 回到正题,M ...
- react 中 使用 Monaco Editor 编辑器
目录 Monaco Editor react 中使用 安装 使用方法 Webpack 配置 属性 获取 monac 开发示例---自定义提示 自定义主题 Monaco Editor 微软之前有个项目叫 ...
- 微软开源在线代码编辑器,编辑器天花板之Monaco Editor
各自随意 彼此在意 各自忙乱 彼此牵挂 ------致友情 文章目录 常见属性配置 一.自定义语言高亮 1. 注册语言 2. 定义高亮 二.标记错误 三.更新编辑器属性 options 四.代码智能提 ...
- Monaco Editor
Monaco Editor是为VS Code提供支持的代码编辑器,其功能在此处有更好的描述. 请注意,此存储库不包含代码编辑器的源代码,它仅包含将所有内容打包在一起并发送monaco-editornp ...
- Monaco Editor (vite/webpack + ts + vue项目使用)
1.什么是Monaco Editor?Monaco Editor 微软之前有个项目叫做Monaco Workbench,后来这个项目变成了VSCode,而Monaco Editor(就是从这个项目中成 ...
- Monaco Editor 使用入门
以前项目是用ace编辑器的,但是总有些不敬人意的地方.前端事件看见的VS Code编辑器Monaco Editor准备更换下,下面介绍一些使用中遇到的一点问题.代码提示 1.项目引用 import * ...
- 手把手教你实现在Monaco Editor中使用VSCode主题
背景 笔者开源了一个小项目code-run,类似codepen的一个工具,其中代码编辑器使用的是微软的Monaco Editor,这个库是直接从VSCode的源码中生成的,只不过是做了一点修改让它支持 ...
- Vue3中使用Monaco Editor代码编辑器记录~持续更新
Vue3中使用Monaco Editor代码编辑器记录-持续更新 因为毕设需要用到代码编辑器,根据调研,我选择使用monaco-editor代码编辑器 前端框架使用Vue3 + elementUI m ...
最新文章
- ROS、realsense开发常用命令汇总
- Forefront for OCS2007之部署
- ASP.NET 2.0关于用户登录限制问题实例:防止同一用户同时登陆
- 华为畅享8可以云闪付吗_华为畅享8、魅族16X、海信彩墨屏阅读手机A5C对比
- 对话系统(二)-普通神经网络
- C++ Opengl纹理混合源码
- win10下JDK环境变量配置与IDEA开发工具清晰简洁步骤,迈出Java学习第一步
- tcp报文格式_34.TCP取样器
- 利用SQL查找表中的质数(prime number)和完全数(perfect number)以及几个有趣的SQL语句...
- 相亲交友App,婚恋交友App,开源源码可搭建H5公众号小程序App,支持个性化定制
- 机器学习实战应用案例100篇(十)-蝙蝠算法从原理到实战应用案例
- 企业微信每日定时自动上报
- android 图片字体涂鸦,android 实现在照片上绘制涂鸦的方法
- 免费在线的redmine项目演示,提供免费三级域名
- 微信订阅号获取openid
- 做的好不如说得好,老板为什么喜欢听过程汇报?
- 【5G/4G】AT Command 详细教程(基于3GPP Spec 27.007)
- 生成的分子图像是否可以识别为SMILES,然后再将识别后的SMILES转换为图像?
- [C#] 控制系统音量-第二章
- Vue 点击事件写法
热门文章
- [PhotoShop]在没有扫描仪的情况下如何使用普通照片PS出扫描效果
- linux命令看cpu使用率,怎么使用Linux命令查看CPU使用率
- RNA结构预测竞赛圆满落幕,且看前三名团队飞桨论道(下篇)
- Guacamole桌面虚拟化介绍和安装使用
- nvme固态必须uefi启动吗_听说这招能在3秒内启动Windows10,很多高手都这么做,你知道吗?...
- 基于HackRF的AIS信号采集与解调
- 软件测试工程师笔试题带答案
- 按月龄选取最好胎儿教育方法
- python爬虫获取元素的属性值_趣说Python爬虫05--获取基金实时净值
- 华为云 DevCloud 部署云服务器