ç·šéè
ã®ã¡ã¢
ååã®èšäºã§ã¯ãVoximplantã³ã³ãããŒã«ããã«ã®ãªãªãŒã¹ã«ã€ããŠèª¬æããŸããããæŽæ°ãããIDEã«ã€ããŠèšåããããšãå¿ããŠããŸããã 仿¥ãç§ãã¡ã¯ãã®ããŒã«ã«å¥ã®
ãã³ã°ã©ã€ããæ§ããŸã-ååã®
Geloosaã¯ããã¯ãããžãŒã®éžæããã»ã¹ãšãã¿ãããªãŒãã³ã³ããªãŒããã«ã¹ã¿ã ã¹ã¿ã€ã«ã䜿çšããå®è£
ã®äž¡æ¹ãæ
éã«èª¬æããŸããã ãã䟿å©ã«åº§ã£ãŠãæ®ãã®äºæãèã«çœ®ããŠãã¢ãã³ã®åæ°ã奜å¥å¿ãåŸ
ã£ãŠããã¿ãã¯ã«ã«è¡ããŸã-æ»ããªãã§ããããããããŸã:)èªæžããæ¥œãã¿ãã ããã
ã³ãŒããšãã£ã¿ãŒã«éžæããã©ã€ãã©ãªã¯ã©ãã§ããïŒ
Npmã¯ãã³ãŒããšãã£ã¿ãŒã«å¯ŸããŠ400以äžã®çµæãçæããŸãã ã»ãšãã©ã®å Žåããããã¯ç¹å®ã®ãã¬ãŒã ã¯ãŒã¯ãŸãã¯ãããžã§ã¯ãçšã«äœæãããããã€ãã®æã人æ°ã®ããã©ã€ãã©ãªã®UIã©ãããŒãåãã©ã€ãã©ãªã®ãã©ã°ã€ã³ãŸãã¯ãããèªèº«ã®å€æŽãå ãããã©ãŒã¯ã§ããããã©ãŠã¶ã§ã³ãŒããç·šéããããã§ã¯ãªããåã«ããŒã¯ãŒãã«ãã£ãŠåºåãããŸãã ãã®ããã幞ããªããšã«ãéžæè¢ã¯ã¯ããã«çããªããŸãã ããã€ãã®ã©ã€ãã©ãª
-CodeFlask㯠ã軜éã§ããããŸãæ©èœçã§ã¯ãªããå°ããªã¹ãããããã€ã³ã¿ã©ã¯ãã£ããªãµã³ãã«çšã«èšèšãããŠããŸããããã¹ã¯ããããšãã£ã¿ãŒã§äœ¿çšãããŠããæ©èœãåããæ¬æ ŒçãªWeb IDEçšã§ã¯ãããŸããã
æçµçã«ã
Ace ã
CodeMirror ãããã³
Monaco Editorããéžæã§ãã3ã€ã®ã©ã€ãã©ãªããããŸãã ãããã®åæã®CodeMirrorã¯ãBerlineer
Marijn Haverbekeã«ããå人çãªã€ãã·ã¢ããã§ããããªã³ã©ã€ã³ãã¥ãŒããªã¢ã«
Eloquent JavaScriptã§ãšã¯ãµãµã€ãºã³ãŒããšãã£ã¿ãŒãå¿
èŠã§ããã ãšãã£ã¿ãŒã®æåã®ããŒãžã§ã³ã¯2007幎ã«ãªãªãŒã¹ãããŸããã 2010幎ãAceã®æåã®ããŒãžã§ã³ãåããã«ãªã³ã®JSConf.euã§çºè¡šãããAjax.orgãã¯ã©ãŠãIDE Cloud9çšã«éçºããŸããïŒå®éãAceã¯Ajax.org Cloud9 Editorã®ç¥ã§ãïŒã 2016幎ãCloud9ã¯Amazonã«è²·åãããçŸåšã¯AWSã®äžéšã§ãã ææ°ã®Monaco Editorã¯VS Codeã®ã³ã³ããŒãã³ãã§ããã2015幎æ«ã«Microsoftã«ãã£ãŠå
¬éãããŸããã
åãšãã£ã¿ãŒã«ã¯é·æãšçæãããããããããè€æ°ã®å€§èŠæš¡ãããžã§ã¯ãã§äœ¿çšãããŸãã ããšãã°ãCodeMirrorã¯ãChromeããã³FirefoxéçºããŒã«ãBitbucketã®IDEãnpmã®RunKitã§äœ¿çšãããŸãã ãšãŒã¹-MODXãã«ãŒã³ã¢ã«ãããŒãã³ãŒãã¢ã«ãããŒã§ Monaco-GitLab IDEããã³CodeSandboxå
ã 以äžã¯ããããžã§ã¯ãã«æé©ãªã©ã€ãã©ãªãéžæããã®ã«åœ¹ç«ã€æ¯èŒãã£ãŒãã§ãã
| 峿žé€š |
| ãšãŒã¹ | CodeMirror | ã¢ãã³ |
éçºè
| Cloud9 IDEïŒAjax.orgïŒã çŸåšãAmazonMozillaã®äžéš | ãŸããã | ãã€ã¯ããœãã |
ãã©ãŠã¶ã®ãµããŒã | Firefox ^ 3.5 ã¯ãã Safari ^ 4.0 IE ^ 8.0 ãªãã©^ 11.5 | Firefox ^ 3.0 ã¯ãã Safari ^ 5.2 IE ^ 8.0 Opera ^ 9.2 | Firefox ^ 4.0 ã¯ãã ãµãã¡ãªïŒv-ïŒïŒ IE ^ 11.0 Opera ^ 15.0 |
èšèªãµããŒã ïŒæ§æã®åŒ·èª¿è¡šç€ºïŒ | > 120 | > 100 | > 20 |
ã®æåæ° ææ°ããŒãžã§ã³ cndjs.com | 366 608ïŒv1.4.3ïŒ | 394,269ïŒv5.44.0ïŒ | 2,064,949ïŒv0.16.2ïŒ |
ææ°ããŒãžã§ã³ã®ééã gzip | 2.147 KB | 1.411 KB | 10.898 KB |
ã¬ã³ããªã³ã° | ãã | ãã | DOMããã³éšåçã«<canvas> ïŒã¹ã¯ããŒã«ãšãããããçšïŒ |
ããã¥ã¡ã³ã | 10ç¹äž7ç¹ïŒæ€çŽ¢ãªããå¿
ãããæç¢ºã§ã¯ãªã ã¡ãœãããè¿ããããçãããã å®å
šæ§ãšé¢é£æ§ ïŒãã¹ãŠã®ãªã³ã¯ãããã¯ã§æ©èœããããã§ã¯ãããŸããïŒ | 10ã®ãã¡6ïŒãŠãŒã¶ãŒã¬ã€ããšçµ±åã Ctrl + Fã§æ€çŽ¢ã å®å
šæ§ã«çåããã | 10ç¹äž9ç¹ïŒçŸãããæ€çŽ¢ãã çžäºåç
§ 説æäžè¶³ã®å Žåã¯-1ãã€ã³ã ãã®ã¢ããªã±ãŒã·ã§ã³ã®ããã€ãã®ãã©ã°ã« ååããã¯æããã§ã¯ãªã |
ã¯ã€ãã¯ã¹ã¿ãŒãã㢠| ããŠããŒ-ã³ãŒãäŸãå«ãããã¹ãããã¥ã¡ã³ãã åå¥ã«ã³ãŒãäŸã®ãã¢ããããŸã ïŒæ¬åœããããã¯ç°ãªãããŒãžã«æ£ãã°ã£ãŠããã ãã¹ãŠã®äººãåããŠããããã§ã¯ãªããGoogleã§æãç°¡åã«æ€çŽ¢ãããŸãïŒ ããŸããŸãªæ©èœã«è§Šããããšãã§ãããã¢ããããŸãã ãã ããUIã³ã³ãããŒã«ã䜿çšããŠç®¡çããããšãææ¡ããŠããŸãã ã€ãŸããã¡ãœãããåå¥ã«æ€çŽ¢ããå¿
èŠããããŸã ããããæ¥ç¶ãã | ããŠããŒã¯æ¬åœã«è²§åŒ±ã§ã åºæ¬çã«ãã¹ãŠãgithubã«æ£ãã°ã£ãŠããŸã ãšstackoverflowããäŸãšæ©èœã®ãã¢ããããŸã å®è£
ã®ããã®ã³ãŒã | éã³å Žã®åœ¢åŒã§çµã¿åãããïŒ ã³ã¡ã³ããšå€æ°ã®ãã¢ã䜿çšããŠã³ãŒããäœæã§ããŸãã ããã«è©ŠããŠè©äŸ¡ãã å€ãã®å¯èœæ§ |
ã³ãã¥ããã£æŽ»å | å¹³å | é«ã | å¹³å |
éçºè
ã®æŽ»å | å¹³å | å¹³å | é«ã |
ã©ã€ãã©ãªããµã€ãºã§æ¯èŒããããšã¯æå³ããããŸããããã¹ãŠç¹å®ã®ãããžã§ã¯ãã«æ¥ç¶ããæ¹æ³ã𿹿³ã«äŸåããããã§ãã宿ãããã¡ã€ã«ããã«ãã®1ã€ã§ããŒãããïŒãããããŸããŸã§ãïŒããäœããã®ã³ã¬ã¯ã¿ãŒãä»ããŠnpmããã±ãŒãžãå®è¡ããŸãã ãããŠæãéèŠãªã®ã¯ããšãã£ã¿ãŒã®äœ¿çšéã§ãããã¹ãŠã®ã¹ã¿ã€ã«ãšããŒããããŒãããããã©ããã䜿çšãããã¢ããªã³ãšãã©ã°ã€ã³ã®æ°ãšæ°ã§ãã ããšãã°ãCodeMirrorã§ã¯ãMonacoãšAceã§ããã«åäœããã»ãšãã©ã®æ©èœã¯ãã¢ããªã³ã§ã®ã¿äœ¿çšã§ããŸãã 衚ã«ã¯ãCDNã®æè¿ã®ããŒãžã§ã³ã®æåæ°ãšãã©ã®é åºãé¢ä¿ãããã«ã€ããŠã®äžè¬çãªèãã®ããã®å§çž®ãã¡ã€ã«ã®éã¿ã瀺ãããŠããŸãã
ãã¹ãŠã®ã©ã€ãã©ãªã«ã¯ãã»ãŒåãåºæ¬æ©èœã»ããããããŸãïŒã³ãŒãã®èªåæžåŒèšå®ãè¡ã®æãç³ã¿ãåãåã/ã³ããŒ/貌ãä»ãããããããŒã匷調衚瀺ãšããŒãã®æ°ããæ§æã远å ããæ©èœãæ§æãã§ãã¯ïŒCodeMirror-ã¢ããªã³ã®ã¿ãAce-ãããŸã§ã¯JavaScriptã®ã¿ïŒ / CoffeeScript / CSS / XQueryïŒãããŒã«ããããšãªãŒãã³ã³ããªãŒãïŒCodeMirrorã§-ã¢ããªã³ã䜿çšïŒãã³ãŒãã«ããé«åºŠãªæ€çŽ¢ïŒCodeMirrorã§-ã¢ããªã³ã䜿çšïŒãã¿ããšåå²ã¢ãŒããdiffã¢ãŒããããŒãžããŒã«ã®å®è£
æ¹æ³ïŒCodeMirrorã§ïŒ -1ã€ã®ãŠã£ã³ããŠã«ãã©ã¹ãšãã€ãã¹ããŸãã¯ã¢ããªã³ãä»ãã2ã€ã®ããã«ã®ããããã ãšãŒã¹ - ã»ãã¬ãŒãã»ãªãŒãïŒã å€ããªã£ããããå€ãã®ã¢ããªã³ãCodeMirrorçšã«äœæãããŠããŸããããã®æ°ã¯ãšãã£ã¿ãŒã®ééãšé床ã®äž¡æ¹ã«åœ±é¿ããŸãã ã¢ãã³ã¯ãããã«äœ¿çšã§ããå€ãã®æ©èœãå®è¡ã§ããŸãããç§ã®æèŠã§ã¯ãAceãCodeMirrorãããåªããŠããŸãã
ã¢ãã³ã«æ»åšããçç±ã¯ããã€ããããŸãã
- ç§ãã¡ã®ãããžã§ã¯ãã«ãšã£ãŠéèŠãšèããããæãéçºãããããŒã«ïŒ
- IntelliSense-ãã³ããšãªãŒãã³ã³ããªãŒãã
- ã³ã³ããã¹ãã¡ãã¥ãŒããã³ãããããã«ããã¹ããŒãã³ãŒãããã²ãŒã·ã§ã³ã
- ããã«äœ¿ãã2ããã«diffã¢ãŒãã
- TypeScriptã§æžãããŠããŸãã ã³ã³ãããŒã«ããã«ã¯Vue + Typescriptã§èšè¿°ãããŠãããããTSãµããŒããéèŠã§ããã ãšããã§ãAceã¯æè¿TSããµããŒãããŠããŸãããå
ã
ã¯JSã§æžãããŠããŸããã CodeMirrorã®å Žåã DefinitelyTypedã«ã¯åããããŸã ã
- ããã¯æãç©æ¥µçã«éçºãããŠããïŒãããããããã»ã©åã«ãªãªãŒã¹ãããŠããªãããïŒããã°ã¯ããè¿
éã«ä¿®æ£ãããããŒã«ãªã¯ãšã¹ããåŠçãããŸãã æ¯èŒã®ããã«ãCodeMirrorã§ã¯ããã°ãäœå¹Žãä¿®æ£ããããæŸèæãæŸèæã«ä¹ããŠæŸèæãé転ãããšããæ²ããçµéšããããŸããã
- ã€ã³ã¿ãŒãã§ãŒã¹ãšã¡ãœããéã®çžäºåç
§ãå«ã䟿å©ãªèªåçæïŒå®å
šæ§ãžã®åžæãäžããïŒããã¥ã¡ã³ãã
- ç§ãã¡ã®å¥œã¿ã§ã¯ãæãçŸããUIïŒããããäœææéã«ãé¢é£ïŒãšç°¡æœãªAPIã§ãã
- ã©ã®ç·šéè
ãæãé çã®çš®ãšãªã£ãã®ããéçºè
ã®å人ã«å°ããåŸããšãŒã¹ãšCodeMirrorããªãŒããŒã§ããã
ãŸããä»äºã®ã¹ããŒãã«ã€ããŠãèšãå¿
èŠããããŸãã ã³ã¹ãã®ãããè§£æã¯ã䞊åã¯ãŒã«ãŒã¹ã¬ããã§è¡ãããŸãã ããã«ããã¹ãŠã®èšç®ã¯ãã¥ãŒããŒãã®ãµã€ãºã«ãã£ãŠå¶éãããŸãïŒãã¹ãŠã®ã¿ã€ããè²ãã¬ã³ããªã³ã°ã¯ã衚瀺ãããŠããã©ã€ã³ã«å¯ŸããŠã®ã¿èšç®ãããŸãïŒã ã³ãŒãã100,000è¡æªæºã®å Žåã«ã®ã¿ããã¬ãŒããããå§ããŸã-ããã³ããã¯æ°ç§éèšç®ã§ããŸãã ãŸããéãã³ã³ãã¥ãŒãã£ã³ã°ã«ã¯ãŒã«ãŒã䜿çšãããšãŒã¹ã¯ãããé«éã§ããããšã倿ããŸããïŒåãé·ãã®ã³ãŒãã§ã¯ãããã³ãããã»ãŒç¬æã«è¡šç€ºããã200,000è¡ã«ãã°ãã察å¿ããŸãïŒå
¬åŒWebãµã€ãã§ã¯ã400äžè¡ã§ãã£ãŠãåé¡ãªãã¯ãã§ãïŒããžãå éãããå
¥åãé
ããªãå§ããããã³ããã100äžååŸã«æ¶ããŸããïŒã 䞊åèšç®ããªãCodeMirrorã§ã¯ããã®ãããªããªã¥ãŒã ãåŒãåºãããšã¯éåžžã«å°é£ã§ããããã¹ããšæ§æã®åŒ·èª¿è¡šç€ºã®äž¡æ¹ãã¡ãã€ãããšããããŸãã ãã¡ã€ã«å
ã®100,000è¡ã¯çŸå®ã®äžçã§ã¯ãŸããªã®ã§ãããã«ç®ãã€ã¶ã£ãã 40ã5äžè¡ã®ã¢ãã³ã§ãããã°ãããä»äºãããŠããŸãã
Monacoã®æ¥ç¶ãšäž»ãªæ©èœã®äœ¿çšïŒVueãšã®çµ±åã®äŸïŒ
æ¥ç¶
ããã§ã¯ãvueã³ã³ããŒãã³ãã®ã³ãŒãäŸã瀺ããé©åãªçšèªã䜿çšããŸãã ãããããããã¯ãã¹ãŠä»ã®ãã¬ãŒã ã¯ãŒã¯ãŸãã¯çŽç²ãªJSã«ç°¡åã«ç§»æ€ã§ããŸãã
ã¢ãã³ã®ãœãŒã¹ã³ãŒãã¯å
¬åŒãŠã§ããµã€ãããããŠã³ããŒãããŠãããžã§ã¯ãã«å
¥ããããšãã§ããŸããCDNãããããæŸãäžããnpmçµç±ã§ãããžã§ã¯ãã«æ¥ç¶ã§ããŸãã 3çªç®ã®ãªãã·ã§ã³ã«ã€ããŠèª¬æããwebpackã䜿çšããŠãã«ãããŸãã
ã¢ãã³ãšãã£ã¿ãŒãšã¢ã»ã³ããªçšã®ãã©ã°ã€ã³ãé
眮ããŸãã
npm i -S monaco-editor npm i -D monaco-editor-webpack-plugin
webpackæ§æã§ã次ã远å ããŸãã
const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); module.exports = {
Vueãšvue-cli-serviceã䜿çšããŠãã«ãããå Žåãvue.config.jsã«è¿œå ããŸãã
const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); module.exports = {
Monacoã®ãã¹ãŠã®èšèªãšæ©èœãå¿
èŠã§ãªãå Žåã¯ããã³ãã«ã®ãµã€ãºãå°ããããããã«ãèšå®ãæã€ãªããžã§ã¯ãã
MonacoWebpackPlugin
転éã§ããŸãã
new MonacoWebpackPlugin({ output: '',
ãã©ã°ã€ã³ã®æ©èœãšèšèªã®å®å
šãªãªã¹ãã¯
ãã¡ãã§ãã
ãšãã£ã¿ãŒãäœæããŠã«ã¹ã¿ãã€ãºãã
editor
ãã€ã³ããŒããã
editor.create(el: HTMLElement, config?: IEditorConstructionOptions)
ãåŒã³åºããŠããšãã£ã¿ãŒãäœæããDOMèŠçŽ ãæåã®åŒæ°ãšããŠæž¡ããŸãã
ãšãã£ã¿ãŒã³ã³ããŒãã³ãã§ïŒ
<template> <div ref='editor' class='editor'></div> </template> <script> import {editor} from 'monaco-editor'; import {Component, Prop, Vue} from 'vue-property-decorator'; @Component() export default class Monaco extends Vue { private editor = null; mounted() { this.editor = editor.create(this.$refs.editor); } } </script> <style> .editor { margin: auto; width: 60vw; height: 200px; } </style>
ãšãã£ã¿ãŒã®ã³ã³ãããŒã¯ãé«ãããŒãã«ãªããªãããã«èšå®ããå¿
èŠããããŸãã 空ã®divïŒãŒãã®é«ã-K.O.ïŒã§ãšãã£ã¿ãŒãäœæãããšãMonacoã¯ãšãã£ã¿ãŒãŠã£ã³ããŠã§åãé«ããã€ã³ã©ã€ã³ã¹ã¿ã€ã«ã§æžã蟌ã¿ãŸãã
editor.create
ã®2çªç®ã®ãªãã·ã§ã³åŒæ°ã¯ããšãã£ã¿ãŒã®æ§æã§ãã 100ãè¶
ãããªãã·ã§ã³ããããŸã
ãIEditorConstructionOptionsã€ã³ã¿ãŒãã§ã€ã¹ã®è©³çްãªèª¬æã¯ããã¥ã¡ã³ãã«ãããŸãã
äŸãšããŠãèšèªãããŒããåæããã¹ããèšå®ããè¡ã®æãè¿ããæå¹ã«ããŸãïŒããã©ã«ãã§ã¯æãè¿ãããŸããïŒã
const config = { value: `function hello() { alert('Hello world!'); }`, language: 'javascript', theme: 'vs-dark', wordWrap: 'on' }; this.editor = editor.create(this.$refs.editor, config);
editor.create
颿°ã¯ã
IStandaloneCodeEditorã€ã³ã¿ãŒãã§ã€ã¹ãæã€ãªããžã§ã¯ããè¿ããŸãã ããã«ãããåæèšå®ã®å€æŽãªã©ããšãã£ã¿ãŒã§çºçãããã¹ãŠãå¶åŸ¡ã§ããããã«ãªããŸããã
çã¿ã®ããã«ïŒ
updateOptions
ã¯ã
IEditorConstructionOptionsã§ã¯ãªãã
IEditorOptionsã€ã³ã¿ãŒãã§ã€ã¹ãæã€ãªããžã§ã¯ããåãå
¥ããŸãã ãããã¯ãããã«ç°ãªããŸããIEditorConstructionOptionsã¯ããåºãããã®ãšãã£ã¿ãŒã€ã³ã¹ã¿ã³ã¹ãšããã€ãã®ã°ããŒãã«ã€ã³ã¹ã¿ã³ã¹ã®ããããã£ãå«ãŸããŸãã
updateOptions
ããããã£ã¯ã
updateOptions
ãã°ããŒãã«
editor
ã¡ãœãããä»ããŠå€æŽãããŸãã ãããã£ãŠãã°ããŒãã«ã«å€åãããã®ã¯ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã§å€åããŸãã ãããã®ãªãã·ã§ã³ã®äžã«
theme
ãŸãã ããŒããç°ãªã2ã€ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã äž¡æ¹ã®yã¯ãæåŸã«æå®ãããã®ïŒããã§ã¯æãïŒã«ãªããŸãã ã°ããŒãã«ãª
editor.setTheme('vs')
ã¡ãœãããäž¡æ¹ââã®ä»¶åã倿ŽããŸãã ããã¯ãSPAã®å¥ã®ããŒãžã«ãããŠã£ã³ããŠã«ã圱é¿ããŸãã ãã®ãããªå Žæã¯ã»ãšãã©ãããŸãããããããã«åŸãå¿
èŠããããŸãã
<template> <div ref='editor1' class='editor'></div> <div ref='editor2' class='editor'></div> </template> <script> </script>
ãšãã£ã¿ãŒãåé€
MonacoãŠã£ã³ããŠãç Žæ£ããå Žåã
dispose
ã¡ãœãããåŒã³åºãå¿
èŠããããŸããããããªããšããã¹ãŠã®ãªã¹ããŒãã¯ãªã¢ãããããã以éã«äœæããããŠã£ã³ããŠãæ£ããæ©èœãããããã€ãã®ã€ãã³ãã«æ°ååå¿ããŸãã
beforeDestroy() { this.editor && this.editor.dispose(); }
ã¿ã
ãã¡ã€ã«ãšãã£ã¿ã§éããã¿ãã¯ãåãMonacoãŠã£ã³ããŠã䜿çšããŸãã ããããåãæ¿ããã«ã¯ãIStandaloneCodeEditorã¡ãœããã䜿çšããŸã
setModel
ãä¿åãã
setModel
ããšãã£ã¿ãŒã¢ãã«ãæŽæ°ããŸãã ã¢ãã«ã«ã¯ãããã¹ããã«ãŒãœã«äœçœ®ãå
ã«æ»ã/ããçŽãã®ã¢ã¯ã·ã§ã³å±¥æŽãä¿åãããŸãã æ°ãããã¡ã€ã«ã¢ãã«ãäœæããã«ã¯ãã°ããŒãã«ãª
editor.createModel(text: string, language: string)
ã¡ãœããã䜿çšãããŸãã ãã¡ã€ã«ã空ã®å Žåãã¢ãã«ãäœæããŠ
null
ã
setModel
æž¡ãããšã¯ã§ããŸããã
ã³ãŒãã衚瀺 <template> <div class='tabs'> <div class='tab' v-for="tab in tabs" :key'tab.id' @click='() => switchTab(tab.id)'> {{tab.name}} </div> </div> <div ref='editor' class='editor'></div> </template> <script> import {editor} from 'monaco-editor'; import {Component, Prop, Vue} from 'vue-property-decorator'; @Component() export default class Monaco extends Vue { private editor = null; private tabs: [ {id: 1, name: 'tab 1', text: 'const tab = 1;', model: null, active: true}, {id: 2, name: 'tab 2', text: 'const tab = 2;', model: null, active: false} ]; mounted() { this.editor = editor.create(this.$refs.editor); } private switchTab(id) { const activeTab = this.tabs.find(tab => tab.id === id); if (!activeTab.active) { </script>
å·®åã¢ãŒã
å·®åã¢ãŒãã®å Žåããšãã£ã¿ãŒãŠã£ã³ããŠã®äœææã«å¥ã®
editor
ã¡ãœãã
createDiffEditor
ã䜿çšããå¿
èŠããããŸãã
<template> <div ref='diffEditor' class='editor'></div> </template> // ... mounted() { this.diffEditor = editor.createDiffEditor(this.$refs.diffEditor, config); } // ...
editor.create
ãšåããã©ã¡ãŒã¿ãŒãåãå
¥ããŸãããæ§æã«ã¯
IDiffEditorConstructionOptionsã€ã³ã¿ãŒãã§ãŒã¹ãå¿
èŠã§ããããã¯éåžžã®ãšãã£ã¿ãŒæ§æãšã¯ãããã«ç°ãªããç¹ã«
value
æã¡ãŸããã æ¯èŒã®ããã®ããã¹ãã¯ã
setModelãä»ããŠè¿ããã
IStandaloneDiffEditorãäœæããåŸã«èšå®ãã
ãŸã ã
this.diffEditor.setModel({ original: editor.createModel('const a = 1;', 'javascript'), modified: editor.createModel('const a = 2;', 'javascript') });
ã³ã³ããã¹ãã¡ãã¥ãŒãã³ãã³ããã¬ããããããããŒ
Monacoã¯ãã¹ããŒãããã²ãŒã·ã§ã³ããã¹ãŠã®ãªã«ã¬ã³ã¹ã倿Žãããã«ãã«ãŒãœã«ãVSã³ãŒãïŒã³ãã³ããã¬ããïŒã®ãããªã³ãã³ããã¬ãããåããéãã©ãŠã¶ãŒã³ã³ããã¹ãã¡ãã¥ãŒã䜿çšããŠãã³ãŒãäœæãé«éåãã倿°ã®äŸ¿å©ãªã³ãã³ããšãããããŒã䜿çšããŸãïŒ
ã¢ãã³ã®ã³ã³ããã¹ãã¡ãã¥ãŒ
ã¢ãã³ã³ãã³ããã¬ãã
ã³ã³ããã¹ãã¡ãã¥ãŒã¯ã
addAction
ã¡ãœããïŒ
IStandaloneCodeEditor
ãš
IStandaloneDiffEditor
äž¡æ¹ã§äœ¿çšå¯èœïŒãä»ããŠå±éããã
IActionDescriptorãªããžã§ã¯ããåãå
¥ããŸãã
ã·ã§ãŒãã«ãããã¢ã¯ã·ã§ã³ã«è¡šç€ºããã«ã·ã§ãŒãã«ãããã¢ã¯ã·ã§ã³ã«ãã€ã³ãããã«ã¯ãåãã¡ãœããã䜿çšãããŸããã¢ã¯ã·ã§ã³ã®
contextMenuGroupId
ã®ã¿ãæå®ãããŠããŸããã
ã³ãã³ããã¬ããã«ã¯ã远å ããããã¹ãŠã®ã¢ã¯ã·ã§ã³ãå«ãŸããŸãã
ãã³ããšãªãŒãã³ã³ããªãŒã
ãããã®ç®çã®ããã«ãMonacoã¯
IntelliSenseã䜿çšã
ãŸã ã ã¹ã¯ãªãŒã³ã·ã§ããã§ã圌ãã©ãã ãæçšãªæ
å ±ã衚瀺ã§ããããšãããªã³ã¯ãèªãã§ç¢ºèªã§ããŸãã èšèªã«ãŸã ãªãŒãã³ã³ããªãŒãããªãå Žåã¯ã
registerCompletionItemProviderã䜿çšããŠè¿œå ã§ããŸãã ãŸããJSãšTSã«ã¯ãããŒã«ããããšãªãŒãã³ã³ããªãŒãçšã®TypeScriptå®çŸ©ãããŒãã§ãã
addExtraLib
ã¡ãœãããæ¢ã«ãããŸãã
æåã®ãã©ã¡ãŒã¿ãŒã§ã¯ãè¡ã¯å®çŸ©ãæž¡ãã2çªç®ã§ã¯ãªãã·ã§ã³ã§libã®ååãæž¡ããŸãã
ã«ã¹ã¿ã èšèªãšããŒã
Monacoã«ã¯ãèšèªã®æ§æã決å®ããããã®
Monarchã¢ãžã¥ãŒã«ããããŸãã æ§æã¯éåžžã«æšæºçã«èšè¿°ãããŠããŸãããã®èšèªã«ç¹åŸŽçãªæ£èŠè¡šçŸãšããŒã¯ã³ã®å¯Ÿå¿ãèšå®ãããŠããŸãã
ããŒã¯ã³ã®ããŒãïŒ
IStandaloneThemeDataã€ã³ã¿ãŒãã§ã€ã¹ãæã€ãªããžã§ã¯ãïŒãäœæããŠãã°ããŒãã«
editor
ã€ã³ã¹ããŒã«ããããšãã§ããŸãã
ããã§ãèšè¿°èšèªã®ããã¹ãã¯æ¬¡ã®ããã«ãªããŸãã
ååãªæ³ååãããã°ããã®æ©èœãé©çšã§ããŸãã ããšãã°ãéçºè
åãã®ããã«ã«ã³ãŒã«ãã°ãã¥ãŒã¢ãäœæããŸããã å€ãã®å Žåããã°ã¯é·ããŠãããã«ããã§ãããæ§æã®åŒ·èª¿è¡šç€ºãã¹ããŒãæ€çŽ¢ãè¡ã®æãç³ã¿/å±éãå¿
èŠãªã³ãã³ãïŒããšãã°ãPrettify paramsïŒããã¹ãŠã®åŒã³åºãè¡ã®IDã«ãã匷調衚瀺ããŸãã¯ãã°å
ã®æéãå¥ã®ã¿ã€ã ãŸãŒã³ã«è»¢éããŠè¡šç€ºãããã®äžã§ã¯ããã«ç°¡åã«ãªããŸãïŒã¹ã¯ãªãŒã³ã·ã§ããã¯ã¯ãªãã¯å¯èœã§ãïŒïŒ
ãããã«
èŠçŽãããšãã¢ãã³ã¯ç«äºã ãšèšããŸãã åœŒãšæ°ã¶æåããåŸãç§ã¯éåžžã«æ¥œããæãåºãæã£ãŠããŸãã ã³ãŒãã®ãšãã£ã¿ãŒãéžæããå Žåã¯ãå¿
ã
Playgroundã«ç§»åããŠã³ãŒããæäœããä»ã«äœãã§ãããã確èªããŠãã ããã ããããããã¯ãŸãã«ããªããæ¢ããŠãããã®ã§ãã