微软开源在线代码编辑器——Monaco Editor

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微软开源在线代码编辑器——Monaco Editor相关的知识,希望对你有一定的参考价值。

参考技术A

Monaco Editor是为VS Code提供支持的代码编辑器,运行在浏览器环境中。编辑器提供代码提示,智能建议等功能。供开发人员远程更方便的编写代码。移动浏览器或移动Web框架不支持Monaco编辑器。简单的理解就是VSCode中的代码编辑器和Monaco Editor使用的很多相同的核心模块,你可以将Monaco Editor用到自己的项目中,作为云端编辑器的支持,支持IE 11,Edge,Chrome,Firefox,Safari和Opera!

Github:

文档和示例等:

安装没什么好说的,你可以到上面地址中下载,也可以直接使用npm安装

TypeScript, javascript, CSS, LESS, SCSS, JSON, html

XML, php, C#, C++, Razor, Markdown, Diff, Java, VB, CoffeeScript, Handlebars, Batch, Pug, F#, Lua, Powershell, Python, Ruby, SASS, R, Objective-C……

内联代码差异比较

非内联代码差异比较

上面都是原生Visual Studio亮色主题

Visual Studio Dark主题:

高对比度暗色主题:

想要直接开发可能不是一件非常简单的事情,所以给出官网提供的所有示例,建议感兴趣的同学可以直接下载下来查看相关示例代码

1、在终端执行以下四条命令,前提是你已存在git和node的环境,如果不存在则先安装git或者node

2、然后访问http://localhost:8888即可体验

选择你想体验的示例,有一些可能还需要其他的操作,按照提示来即可

3、项目示例Demo介绍

其他示例和用法

想要深入学习的小伙伴可以直接到官网上手学习,左边是配置,右边即可看到效果,这样的话学习起来会比较的快

以下版本可能无法跟进最新的版本

React版本:

Vue版本:

Angular版本:

Monaco Editor不得的不说是一个非常强大的在线代码编辑器,可以为自己的项目提供云端代码编辑器的基础技术支持,可以在其基础上扩展很多强大的功能,当然上手不一定简单,需要根据自己的需求确定开发方案,有需求的小伙伴可以去研究一下!

微软开源代码编辑器monaco-editor

  

  官网上给出:”The Monaco Editor is the code editor that powers VS Code. A good page describing the code editor\'s features is here.

  It is licensed under the MIT License and supports IE 9/10/11, Edge, Chrome, Firefox, Safari and Opera.“

      Monaco Editor 展现还是非常牛的,直接上图:

     

      https://microsoft.github.io/monaco-editor/

     下面给出一个入门教程:

     

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta http-equiv="X-UA-Compatible" content="IE=edge" />
 5     <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
 6 </head>
 7 <body>
 8 
 9 <div id="container" style="width:800px;height:600px;border:1px solid grey"></div>
10 <div id="container2" style="width:800px;height:600px;border:1px solid grey"></div>
11 <script src="min/vs/loader.js"></script>
12 <script>
13     require.config({ paths: { \'vs\': \'min/vs\' }});
14     require([\'vs/editor/editor.main\'], function() {
15         var editor = monaco.editor.create(document.getElementById(\'container\'), {
16             value: [
17                 \'function x() {\',
18                 \'\\tconsole.log("Hello world!");\',
19                 \'}\'
20             ].join(\'\\n\'),
21             language: \'javascript\'
22         });
23 
24          var editor2 = monaco.editor.create(document.getElementById(\'container2\'), {
25             value: [
26                 \'function x() {\',
27                 \'\\tconsole.log("Hello world!");\',
28                 \'}\'
29             ].join(\'\\n\'),
30             language: \'csharp\',
31             theme:\'vs-dark\'
32         });
33 
34         
35     });
36 
37     function changeTheme(theme) {
38         var newTheme = (theme === 1 ? \'vs-dark\' : ( theme === 0 ? \'vs\' : \'hc-black\' ));
39         if (editor) {
40             editor.updateOptions({ \'theme\' : newTheme });
41         }
42         if (diffEditor) {
43             diffEditor.updateOptions({ \'theme\': newTheme });
44         }
45     }
46 </script>
47 </body>
48 </html>

对Javascript语言是有智能提示的,如上图所示。

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4     <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  5     <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
  6 </head>
  7 <body>
  8 
  9 <div id="diff-editor" style="width:800px;height:600px;border:1px solid grey"></div>
 10     <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js" integrity="sha256-wS9gmOZBqsqWxgIVgA8Y9WcQOa7PgSIX+rPA0VL2rbQ=" crossorigin="anonymous"></script>
 11 <script src="min/vs/loader.js"></script>
 12 <script>
 13 
 14 // $(document).ready(function() {
 15 //     require.config({ paths: { \'vs\': \'min/vs\' }});
 16 //     require([\'vs/editor/editor.main\'], function() {
 17         
 18 
 19 //          var editor = monaco.editor.create(document.getElementById(\'container\'), {
 20 //             value: [
 21 //                 \'function x() {\',
 22 //                 \'\\tconsole.log("Hello world!");\',
 23 //                 \'}\'
 24 //             ].join(\'\\n\'),
 25 //             language: \'csharp\',
 26 //             theme:\'vs-dark\'
 27 //         });
 28 
 29         
 30 //     });
 31 
 32 //     window.onresize = function () {
 33 //         if (editor) {
 34 //             editor.layout();
 35 //         }
 36 //         if (diffEditor) {
 37 //             diffEditor.layout();
 38 //         }
 39 //     };
 40 // });
 41 var preloaded = {};
 42 
 43 
 44 function xhr(url, cb) {
 45     if (preloaded[url]) {
 46         return cb(null, preloaded[url]);
 47     }
 48     $.ajax({
 49         type: \'GET\',
 50         url: url,
 51         dataType: \'text\',
 52         error: function () {
 53             cb(this, null);
 54         }
 55     }).done(function(data) {
 56         cb(null, data);
 57     });
 58 }
 59 function loadDiffSample() {
 60 
 61     var onError = function() {
 62         // $(\'.loading.diff-editor\').fadeOut({ duration: 200 });
 63         // $(\'#diff-editor\').append(\'<p class="alert alert-error">Failed to load diff editor sample</p>\');
 64     };
 65 
 66 
 67 
 68     var lhsData = null, rhsData = null, jsMode = null;
 69 
 70     xhr(\'txt/diff.lhs.txt\', function(err, data) {
 71         if (err) {
 72             return onError();
 73         }
 74         lhsData = data;
 75         onProgress();
 76     })
 77     xhr(\'txt/diff.rhs.txt\', function(err, data) {
 78         if (err) {
 79             return onError();
 80         }
 81         rhsData = data;
 82         onProgress();
 83     })
 84 
 85     function onProgress() {
 86         if (lhsData && rhsData) {
 87             require.config({ paths: { \'vs\': \'min/vs\' }});
 88             require([\'vs/editor/editor.main\'], function() {
 89                 diffEditor = monaco.editor.createDiffEditor(document.getElementById(\'diff-editor\'), {
 90                     enableSplitViewResizing: false
 91                 });
 92 
 93                 var lhsModel = monaco.editor.createModel(lhsData, \'text/javascript\');
 94                 var rhsModel = monaco.editor.createModel(rhsData, \'text/javascript\');
 95 
 96                 diffEditor.setModel({
 97                     original: lhsModel,
 98                     modified: rhsModel
 99                 });
100             });
101             //$(\'.loading.diff-editor\').fadeOut({ duration: 300 });
102         }
103     }
104 }
105     function changeTheme(theme) {
106         var newTheme = (theme === 1 ? \'vs-dark\' : ( theme === 0 ? \'vs\' : \'hc-black\' ));
107         if (editor) {
108             editor.updateOptions({ \'theme\' : newTheme });
109         }
110         if (diffEditor) {
111             diffEditor.updateOptions({ \'theme\': newTheme });
112         }
113     }
114 
115     loadDiffSample();
116 </script>
117 </body>
118 </html>

 

以上是关于微软开源在线代码编辑器——Monaco Editor的主要内容,如果未能解决你的问题,请参考以下文章

微软开源在线代码编辑器——Monaco Editor

微软开源代码编辑器monaco-editor

DELPHI7 代码编辑器字体设置问题

使用微软Monaco Editor 编写代码比对工具

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

字体编程常用字体推荐,微软,苹果,开源系统默认代码字体