Vue3 集成Monaco Editor编辑器

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. 效果

在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微深节能 料场堆取料无人操作系统 格雷母线

微深节能的料场堆取料无人操作系统采用了格雷母线定位系统&#xff0c;这是一种高精度位移检测技术&#xff0c;用于提升料场作业的自动化水平和精确性。该系统通过精准定位和自动化控制&#xff0c;大幅减少了人工操作中的误差和延误&#xff0c;提高了作业效率和精确性。格雷…

Jenkins入门(二):流水线方式部署多模块Springboot项目

目录 一、环境准备 1. 搭建配置Jenkins (在上一篇基础上进行) 2. 安装mysql 3. 安装redis 4. 配置docker-componse 5. 启动docker-componse 二、脚本准备 1. Jenkinsfile 2. deploy.sh 3. Dockerfile 三、Jenkins流水线配置 新增版本号参数 流水线选择代码里面的Je…

Python酷库之旅-第三方库Pandas(158)

目录 一、用法精讲 721、pandas.Timedelta.round方法 721-1、语法 721-2、参数 721-3、功能 721-4、返回值 721-5、说明 721-6、用法 721-6-1、数据准备 721-6-2、代码示例 721-6-3、结果输出 722、pandas.Timedelta.to_pytimedelta方法 722-1、语法 722-2、参数…

农作物苹果叶片病虫害识别数据集

农作物苹果叶片病虫害识别数据集 一、引言 农作物病虫害是影响农业生产的重要因素之一&#xff0c;其中苹果作为广泛种植的水果品种&#xff0c;其叶片病虫害问题尤为突出。为了有效应对苹果叶片病虫害&#xff0c;提高苹果产量和品质&#xff0c;农业科研机构和学者不断开展…

服务端负载均衡和客户端负载

负载均衡分为服务端负载均衡和客户端负载均衡&#xff0c;图解&#xff1a; 客户端的负载均衡还需要从注册中心获取集群部署的服务地址&#xff0c;其中客户的负载均衡器定时读取注册中心的IP和端口&#xff0c;然后缓存起来&#xff0c;这样以后可以先判断缓存IP和端口是否可用…

Java基于SSM微信小程序物流仓库管理系统设计与实现(源码+lw+数据库+讲解等)

选题背景 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…

#数据结构(二)

栈和队列 一.栈的顺序存储结构 特点&#xff1a;先进后出 栈是一种只能在一端进行插入或删除操作的线性表。 表中允许插入删除操作的一端为栈顶&#xff08;top&#xff09;&#xff0c;表的另一端为栈底&#xff08;bottom&#xff09;&#xff0c; 1 结构体的定义 #incl…

10月18日

二次型矩阵要是对称矩阵 通解要带入特解 集体化 逆反思维 先定特解&#xff0c;再求通解 反函数...我谢谢你 依旧是原函数

Vision China 2024 | 移远通信以一体化的AI训练及部署能力,引领3C电子制造智能升级

10月14日&#xff0c;由机器视觉产业联盟(CMVU)主办的中国机器视觉展(Vision China)在深圳国际会展中心盛大开幕。作为全球领先的物联网整体解决方案供应商&#xff0c;移远通信应邀参加展会首日举办的“智造引领数质并进”3C电子制造自动化与数字化论坛。 论坛上&#xff0c;移…

立仪科技:光谱共焦传感器精准测量玻璃

光谱共焦测量技术作为一种创新的光学检测方法&#xff0c;近年来在工业领域引起了广泛关注。 它以其高精度、非接触式的特点&#xff0c;特别适用于透明或半透明材料如玻璃的厚度和表面形貌测量。 接下来&#xff0c;立仪科技小编将深入探讨光谱共焦技术在玻璃测量上的应用及其…

火山引擎数智平台 VeDI:A/B 实验互斥域流量分配体系上线

近日&#xff0c;火山引擎 A/B 测试平台(DataTester)完成了一次重要升级&#xff0c;推出互斥域流量分配体系&#xff0c;这一功能意味着企业在产品优化策略上有新的突破空间。此次升级的核心亮点是允许企业根据实际需求&#xff0c;灵活地将用户流量分割成多个独立的区块&…

探索 Jupyter 笔记本转换的无限可能:nbconvert 库的神秘面纱

文章目录 探索 Jupyter 笔记本转换的无限可能&#xff1a;nbconvert 库的神秘面纱背景&#xff1a;为何选择 nbconvert&#xff1f;库简介&#xff1a;nbconvert 是什么&#xff1f;安装指南&#xff1a;如何安装 nbconvert&#xff1f;函数用法&#xff1a;简单函数示例应用场…

简单概述Ton链开发路径

区块链开发领域发展迅速&#xff0c;各种平台为开发人员提供不同的生态系统。其中一个更有趣且越来越相关的区块链是TON&#xff08;开放网络&#xff09;区块链。TON 区块链最初由 Telegram 构思&#xff0c;旨在提供快速、安全且可扩展的去中心化应用程序 (dApp)。凭借其独特…

LangGraph - Hierarchical Agent Teams

本文翻译整理自 Hierarchical Agent Teams https://langchain-ai.github.io/langgraph/tutorials/multi_agent/hierarchical_agent_teams/ 文章目录 一、前言二、设置三、创建工具四、Helper Utilities五、定义代理 Team研究 Team文档写作Team 六、添加图层 一、前言 在前面的…

恋爱脑讲编程:Rust 的生命周期概念

从前有两个年轻人&#xff1a;Alice 和 Bob。他们的爱情故事有几个阶段&#xff0c;代表不同的生命周期。Rust 的生命周期规则在这个故事中可以形象地表现为“爱情的时间线”&#xff0c;其中每一段关系都有明确的起始和结束时机&#xff0c;避免“未定义的情感”。 第一个阶段…

学习中,师傅b站泷羽sec——xss挖掘过程

某职业技术学院网站xss挖掘&#xff1a; 资产归纳 例如&#xff1a;先把功能点都看一遍&#xff0c;大部分都是文章 根据信息搜集第一课学习到一般主站的防御力是比较强的&#xff0c;出现漏洞的点不是对新手不友好。 在资产验证过程中还是把主站看了一遍 没有发现有攻击的机会…

如何看一个flutter项目的具体flutter版本

查看pubspec.lock文件 这个项目实际运行的就是 flutter 3.16.6 版本的

试用cursor的简单的记录

快下班时又饿了&#xff0c;饿了几个小时了。中午那点饭&#xff0c;没够顶到下班。难怪店家说饭可以随便加。 所以不编码了&#xff0c;本周任务也超额完成了&#xff0c;这种状态再去编码调试&#xff0c;搞不好会写出自己不认识的代码。 本周工作中&#xff0c;新的事务是…

Flink有状态计算

前言 状态是什么&#xff1f;状态就是数据&#xff0c;准确点说&#xff0c;状态是指 Flink 作业计算时依赖的历史数据或中间数据。如果一个 Flink 作业计算依赖状态&#xff0c;那它就是有状态计算的作业&#xff0c;反之就是无状态计算的作业。 举个例子&#xff0c;服务端…

鸿蒙开发(NEXT/API 12)【公共事件订阅与取消】进程间通信

CES&#xff08;Common Event Service&#xff0c;公共事件服务&#xff09;为应用程序提供订阅、发布、退订公共事件的能力。 公共事件分类 公共事件从系统角度可分为&#xff1a;系统公共事件和自定义公共事件。 系统公共事件&#xff1a;CES内部定义的公共事件&#xff0…