Vue3 集成Monaco Editor编辑器

news2025/1/13 3:01:27

Vue3 集成Monaco Editor编辑器

    • 1. 安装依赖
    • 2. 使用
    • 3. 效果

Monaco Editor (官方链接 https://microsoft.github.io/monaco-editor/)是一个由微软开发的功能强大的在线代码编辑器,被广泛应用于各种 Web 开发场景中。以下是对 Monaco Editor 的详细介绍:
强大的功能特性
多语言支持:
Monaco Editor 支持众多编程语言,包括但不限于 JavaScript、TypeScript、Python、Java、C++、C# 以及常见SQL、HTML、YML、XML、格式等等几十种。它提供了针对不同语言的语法高亮、代码补全、错误提示和智能感知等功能,大大提高了开发效率。
对于每种语言,都有专门的语法解析器和语言服务,确保代码的准确性和可读性。

主题定制:
提供了丰富的内置主题,如默认的 “vs”(Visual Studio 风格)、“vs-dark” 等,同时也支持用户自定义主题。
用户可以根据自己的喜好调整编辑器的颜色、字体大小、对比度等,以适应不同的工作环境和个人需求。

1. 安装依赖

npm 安装

npm install monaco-editor

package.json

{
  "name": "vue-monaco-demo",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview"
  },
  "dependencies": {
    "monaco-editor": "^0.52.0",
    "vue": "^3.5.10"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^5.1.4",
    "vite": "^5.4.8"
  }
}

2. 使用

App.vue
演示使用我就直接在 里写了

<script setup>
  // 导入monaco编辑器
  import * as monaco from 'monaco-editor';
  import {ref, onMounted, onUnmounted} from 'vue'

  // 编辑器容器div
  const editorContainer = ref(null);
  // 编辑器实列
  const editor = ref(null);
  // 编辑器内容
  const code = ref('')

  // 初始化编辑器
  onMounted(() => {
    if (editorContainer.value) {
      // 创建编辑器实列
      editor.value = monaco.editor.create(editorContainer.value, {
        value: `
        import * as monaco from'monaco-editor';
        import { ref, onMounted, onUnmounted } from 'vue'

        const editorContainer = ref(null);
        const editor = ref(null);

        onMounted(() => {
          if (editorContainer.value) {
            editor.value = monaco.editor.create(editorContainer.value, {
              value: '// 这里是初始代码',
              language: 'javascript',
              theme: 'vs-dark',
              readOnly: false
            });
          }
        });

        onUnmounted(() => {
          if (editor.value) {
            editor.value.dispose();
          }
        });

`, // 编辑器初始内容
        language: 'javascript', // 编辑器语言
        theme: 'vs-dark', // 编辑器主题 默认vs-dark VSCode 黑色主题,可选:vs、vs-dark、hc-black、hc-light
        readOnly: false, // 是否只读内容不可编辑
        readOnlyMessage:{value:"不可以修改哦",supportThemeIcons:true,supportHtml:true}, // 为只读时编辑内日提示词
        codeLens: true, // 代码透镜
        folding: true, // 代码折叠
        snippetSuggestions: 'inline', // 代码提示
        tabCompletion: 'on', // 代码提示按tab完成
        foldingStrategy: 'auto', // 折叠策略
        smoothScrolling: true, // 滚动动画
        // inDiffEditor: 是否在差异编辑器中使用
        // ariaLabel: 编辑器文本区域的无障碍标签
        // ariaRequired: 是否设置 aria-required 属性
        // screenReaderAnnounceInlineSuggestion: 是否立即宣布内联建议内容
        // tabIndex: 编辑器文本区域的 tabindex 属性
        // rulers: 指定位置渲染垂直线
        // wordSegmenterLocales: 用于词分割的语言
        // wordSeparators: 词导航时使用的分隔符
        // selectionClipboard: 启用 Linux 主剪贴板
        // lineNumbers: 控制行号的显示方式
        // cursorSurroundingLines: 控制光标周围的可见行数
        // cursorSurroundingLinesStyle: 控制何时强制执行 cursorSurroundingLines
        // renderFinalNewline: 渲染文件末尾的新行
        // unusualLineTerminators: 移除不寻常的行终止符
        // selectOnLineNumbers: 单击行号时选择相应行
        // lineNumbersMinChars: 控制行号的最小字符数
        // glyphMargin: 启用渲染图符边距
        // lineDecorationsWidth: 行装饰的宽度
        // revealHorizontalRightPadding: 水平方向显示光标时的虚拟填充
        // roundedSelection: 选择是否带有圆角
        // extraEditorClassName: 添加到编辑器的类名
        // readOnly: 编辑器是否只读
        // readOnlyMessage: 只读模式下的提示信息
        // domReadOnly: 输入文本框是否使用 DOM 的 readonly 属性
        // linkedEditing: 启用关联编辑
        // renderValidationDecorations: 是否渲染验证装饰
        // scrollbar: 控制滚动条的行为和渲染
        // stickyScroll: 控制粘性滚动选项
        // minimap: 控制最小地图的行为和渲染
        // find: 控制查找小部件的行为
        // fixedOverflowWidgets: 以 fixed 方式显示溢出小部件
        // overviewRulerLanes: 概览尺子应渲染的车道数
        // overviewRulerBorder: 是否绘制概览尺子边框
        // cursorBlinking: 光标闪烁风格
        // mouseWheelZoom: 使用鼠标滚轮结合 Ctrl 键缩放字体
        // mouseStyle: 鼠标指针样式
        // cursorSmoothCaretAnimation: 平滑光标动画
        // cursorStyle: 光标样式
        // cursorWidth: 光标宽度
        // fontLigatures: 启用字体连字
        // fontVariations: 启用字体变体
        // defaultColorDecorators: 是否使用默认颜色装饰
        // disableLayerHinting: 禁用编辑器层提示
        // disableMonospaceOptimizations: 禁用等宽字体优化
        // hideCursorInOverviewRuler: 是否在概览尺子中隐藏光标
        // scrollBeyondLastLine: 启用滚动到最后行
        // scrollBeyondLastColumn: 启用滚动到最后列
        // smoothScrolling: 启用平滑滚动
        // automaticLayout: 启用自动布局
        // wordWrap: 控制自动换行
        // wordWrapOverride1: 覆盖 wordWrap 设置
        // wordWrapOverride2: 覆盖 wordWrapOverride1 设置
        // wordWrapColumn: 换行列数
        // wrappingIndent: 控制换行的缩进
        // wrappingStrategy: 控制换行策略
        // wordWrapBreakBeforeCharacters: 换行前的字符
        // wordWrapBreakAfterCharacters: 换行后的字符
        // wordBreak: 控制单词换行
        // stopRenderingLineAfter: 停止渲染行的位置
        // hover: 配置编辑器的悬浮提示
        // links: 启用链接检测
        // colorDecorators: 启用内联颜色装饰
        // colorDecoratorsActivatedOn: 触发颜色选择器的条件
        // colorDecoratorsLimit: 内联颜色装饰的最大数量
        // comments: 控制编辑器中的注释行为
        // contextmenu: 启用自定义上下文菜单
        // mouseWheelScrollSensitivity: 鼠标滚轮滚动灵敏度
        // fastScrollSensitivity: 快速滚动速度
        // scrollPredominantAxis: 启用主要轴滚动
        // columnSelection: 启用列选择
        // multiCursorModifier: 添加多个光标的修饰键
        // multiCursorMergeOverlapping: 合并重叠的选择
        // multiCursorPaste: 配置粘贴多个文本时的行为
        // multiCursorLimit: 控制同时可以存在的最大文本光标数量
        // accessibilitySupport: 配置编辑器的无障碍支持
        // accessibilityPageSize: 屏幕阅读器可读取的行数
        // suggest: 建议选项
        // inlineSuggest: 内联建议选项
        // experimentalInlineEdit: 实验性内联编辑选项
        // smartSelect: 智能选择选项
        // gotoLocation: 跳转到位置选项
        // quickSuggestions: 启用快速建议
        // quickSuggestionsDelay: 快速建议显示延迟
        // padding: 控制编辑器的边距
        // parameterHints: 参数提示选项
        // autoClosingBrackets: 自动闭合括号的选项
        // autoClosingComments: 自动闭合注释的选项
        // autoClosingQuotes: 自动闭合引号的选项
        // autoClosingDelete: 自动闭合删除的选项
        // autoClosingOvertype: 自动闭合覆盖的选项
        // autoSurround: 自动环绕的选项
        // autoIndent: 控制自动缩进
        // stickyTabStops: 插入和删除空白时遵循制表符停止
        // formatOnType: 启用输入时格式化
        // formatOnPaste: 启用粘贴时格式化
        // dragAndDrop: 允许通过拖放移动选择
        // suggestOnTriggerCharacters: 在触发字符上弹出建议框
        // acceptSuggestionOnEnter: 在 Enter 键上接受建议的方式
        // acceptSuggestionOnCommitCharacter: 在提供者定义的字符上接受建议
        // snippetSuggestions: 启用片段建议
        // emptySelectionClipboard: 无选择时复制当前行
        // copyWithSyntaxHighlighting: 复制时包含语法高亮
        // suggestSelection: 建议的历史模式
        // suggestFontSize: 建议小部件的字体大小
        // suggestLineHeight: 建议小部件的行高
        // tabCompletion: 启用 Tab 完成
        // selectionHighlight: 启用选择高亮
        // occurrencesHighlight: 启用语义发生高亮
        // codeLens: 显示代码透镜
        // codeLensFontFamily: 代码透镜的字体系列
        // codeLensFontSize: 代码透镜的字体大小
        // lightbulb: 控制代码操作灯泡的行为
        // codeActionsOnSaveTimeout: 保存时运行代码操作的超时时间
        // folding: 启用代码折叠
        // foldingStrategy: 选择折叠策略
        // foldingHighlight: 启用折叠区域高亮
        // foldingImportsByDefault: 默认折叠导入区域
        // foldingMaximumRegions: 最大可折叠区域数
        // showFoldingControls: 折叠控制的显示方式
        // unfoldOnClickAfterEndOfLine: 单击折行后展开
        // matchBrackets: 启用匹配括号高亮
        // experimentalWhitespaceRendering: 实验性空白渲染
        // renderWhitespace: 渲染空白字符
        // renderControlCharacters: 渲染控制字符
        // renderLineHighlight: 渲染当前行高亮
        // renderLineHighlightOnlyWhenFocus: 仅当编辑器聚焦时渲染当前行高亮
        // useTabStops: 插入和删除空白时遵循制表符停止
        // fontFamily: 字体系列
        // fontWeight: 字体粗细
        // fontSize: 字体大小
        // lineHeight: 行高
        // letterSpacing: 字母间距
        // showUnused: 控制未使用变量的高亮
        // peekWidgetDefaultFocus: 默认聚焦预览窗口的小部件
        // placeholder: 编辑器为空时显示的占位符
        // definitionLinkOpensInPeek: 定义链接是否在预览窗口中打开
        // showDeprecated: 控制废弃变量的高亮
        // matchOnWordStartOnly: 是否允许单词中间匹配
        // inlayHints: 控制内联提示的行为和渲染

      });

      // 编辑器内容变更时回调
      editor.value.onDidChangeModelContent(() => {
        console.log('编辑器内容变更')
        // 获取编辑器内容
        // editor.value.getValue();
      })
    }
  });

  // 当组件被卸载时调用该回调函数
  onUnmounted(() => {
    // 检查 editor 是否已初始化
    if (editor.value) {
      // 清理 editor 资源,避免内存泄漏
      editor.value.dispose();
    }
  });

</script>

<template>
  <div ref="editorContainer" >
  </div>
</template>

<style scoped>
*{
  height: 100vh;
  width: 100vh;
}
</style>


3. 效果

在这里插入图片描述

这里只演示如何使用,实际开发中可以将编辑器封装成一个组件,方便复用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2204666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【linux 多进程并发】0201 Linux进程fork内存空间,父子进程变量内存地址居然是一样的

0201 Linux进程fork方式详解 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章…

学习记录:js算法(五十七):二叉树中所有距离为 K 的结点

文章目录 二叉树中所有距离为 K 的结点思路一思路二 二叉树中所有距离为 K 的结点 给定一个二叉树&#xff08;具有根结点 root&#xff09;&#xff0c; 一个目标结点 target &#xff0c;和一个整数值 k &#xff0c;返回到目标结点 target 距离为 k 的所有结点的值的数组。&…

matlab002

新建工程test001 例如&#xff1a; 脚本&#xff08;Script&#xff09; 概念 脚本是一系列按顺序执行的 MATLAB 命令的集合。它就像是一个记录了你在命令行中输入的一系列指令的文件。用途 适用于简单的任务&#xff0c;例如数据处理、可视化等一次性的操作。例如&#xff0c…

重学SpringBoot3-集成Redis(四)之Redisson

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-集成Redis&#xff08;四&#xff09;之Redisson 1. 添加 Redisson 依赖2. 配置 Redisson 客户端3. 使用 Redisson 实现分布式锁4. 调用分布式锁5. 为什…

Java 获取热搜并生成图片

效果图如下&#xff1a; 第一步获取热搜 public List<String> getHotNews4(Integer size) {if (size < 0 || StringUtils.isEmpty(size)) {return null;}try {//set 转listreturn new ArrayList<>(getHotNews(size));} catch (Exception e) {logger.error(&qu…

如何基于审批实现文件外发管控,阻断数据违规外流?

FTP可以说是实际中企业运用最广泛的文件传输方式&#xff0c;很多企业不仅内部传输文件使用FTP&#xff0c;在与外部合作伙伴协作时&#xff0c;也多采用FTP进行文件的外发和收取。例如半导体行业&#xff0c;默认的都是使用FTP进行文件外发&#xff0c;这时候&#xff0c;替换…

卷积神经网络细节问题及知识点

一、Batch Normalization Batch Normalization&#xff08;BN&#xff0c;批归一化&#xff09; 是深度学习中的一种技术&#xff0c;主要用于加速神经网络的训练过程&#xff0c;同时提高网络的稳定性和收敛速度。它通过对每一层的输出进行归一化&#xff0c;减少梯度消失和梯…

本地部署Docsify生成文档网站并实现公网环境远程访问

文章目录 前言1. 本地部署Docsify2. 使用Docsify搭建个人博客3. 安装Cpolar内网穿透工具4. 配置公网地址5. 配置固定公网地址 前言 本文主要介绍如何在Windows环境本地部署 Docsify 这款以 markdown 为中心的文档编辑器&#xff0c;并即时生成您的文档博客网站&#xff0c;结合…

ubuntu22.04 安装wine9.0 全网首发

wine官网推荐安装方式&#xff1a;https://gitlab.winehq.org/wine/wine/-/wikis/zh_CN/Debian-Ubuntu 博主按照这种方式是失败的&#xff0c;虽然开启了“低调上网”&#xff0c;貌似代理对于终端不起作用&#xff0c;后面会介绍替代方案&#xff0c;一样完美。 一、官网的安…

Pycharm里设置关于designer.exe以及pyuic5.exe的外部工具

文章目录 1.Pycharm与Pyuic5介绍(1)Pycharm(2)Pyuic5 2.Pycharm里设置外部工具(1)切换到外部工具(2)designer创建外部工具(3)pyuic5创建外部工具(4)使用designer和pyuic5 3.本章总结 1.Pycharm与Pyuic5介绍 (1)Pycharm Pycharm是专门用于python编程语言的编辑软件&#xff0c;…

QT的核心机制 对话框资源

案例 1、键盘按下w&#xff0c;s&#xff0c;a&#xff0c;d键分别为标签向上&#xff0c;下&#xff0c;左&#xff0c;右移动 鼠标按下获取本地坐标&#xff0c;全局坐标 鼠标双击获取本地坐标&#xff0c;全局坐标 鼠标移动获取本地坐标&#xff0c;全局坐标 让鼠标跟踪…

C语言 ——— oj题:有效的括号

目录 题目要求 代码实现 题目要求 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个…

【靶点Talk】为什么联合用药喜欢用VEGF+VEGFR?

血管生成对肿瘤发生、发展的重要影响的发现&#xff0c;使肿管生成变为肿瘤研究的热点之一。今天给大家带来VEGF、VEGFR相关介绍&#xff0c;更多靶点科普视频请关注义翘神州B站和知乎官方账号。 1、VEGFR的“简历” VEGFR包括VEGFR-1、VEGFR-2和VEGFR-3。VEGFR-2可与多种VEGF…

leetcode hot100_part03_滑动窗口

滑动窗口是有一个基本的模版的&#xff0c;不要自己想当然哦~ 滑动窗口算法思想&#xff08;附经典例题&#xff09;_滑动窗口的思想-CSDN博客 滑动窗口也叫同向双指针&#xff1b;可以先看一下灵山视频&#xff1a;滑动窗口【基础算法精讲 03】_哔哩哔哩_bilibili 3.无重复字…

springboot如何自动生成mybatis映射文件、dao、pojo层文件?

背景&#xff1a;以前一直是直接cv一个项目中现成的xml文件&#xff0c;然后再去自己配置mapper等数据。自己准备做一个单独的例子试一下。 步骤1&#xff1a;在pom.xml文件中插入mybatis-generator插件&#xff0c;这里选的版本是1.3.2&#xff0c;然后指定的generator文件是在…

ChatGPT 4o with Canvas — 新特性详解

# ChatGPT 4o with Canvas — 新特性详解 最近猫哥也感受到 Canvas 的强大&#xff0c;顺手开了个会员体验了一天&#xff0c;今天给大家简单分享一下&#xff0c;有想体验的伙伴可以文末名片私信我哈&#xff01; 关键词&#xff1a; #ChatGPT4o #Canvas新特性 #AI写作工具 …

[论文笔记]DAPR: A Benchmark on Document-Aware Passage Retrieval

引言 今天带来论文DAPR: A Benchmark on Document-Aware Passage Retrieval的笔记。 本文提出了一个基准&#xff1a;文档感知段落检索(Document-Aware Passage Retrieval,DAPR)以及介绍了一些上下文段落表示的方法。 为了简单&#xff0c;下文中以翻译的口吻记录&#xff0c…

Best HTTP V3

Best HTTP是Unity的权威网络解决方案,专为需要多功能性和强大功能的开发人员而设计。它与Unity 2021.1及更高版本无缝兼容,提供无与伦比的跨平台支持,包括桌面、移动设备、UWP和Web浏览器。凭借其高级功能集,它超越了基本的HTTP请求,支持HTTPS、HTTP/2,并通过传统的回调、…

2024年10月11日历史上的今天大事件早读

1038年10月11日李元昊称帝&#xff0c;国号大夏&#xff0c;西夏建立 1086年10月11日北宋政治家、史学家司马光逝世 1889年10月11日英国物理学家焦耳逝世 1900年10月11日李鸿章开始与八国联军的艰难谈判 1937年10月11日淞沪战线大场之战爆发 1944年10月11日日军包围桂林 …

The 2024 ICPC Kunming Invitational Contest K. Permutation(交互 期望)

在知乎内查看 题目 思路来源 题解 首先特判n1的情况&#xff0c;其实也不用问 分治&#xff0c;假设当前解决到[l,r]&#xff0c;要递归的vector是x&#xff0c; 维护两个vector L、R&#xff0c;代表下一步要在[l,mid]和[mid1,r]分治的vector 每次将x random_shuffle后&a…