当前位置: 首页 > news >正文

vue2 使用代码编辑器插件 vue-codemirror

vue 使用代码编辑器插件 vue-codemirror

之前用过一次,当时用的一知半解的,所以也没有成文,前几天又因为项目有需求,所以说有用了一次,当然,依旧是一知半解,但是还是稍微写一下子吧!万一以后用到,不用满网找资料了,个人学习记录,仅供参考,切勿尽信!

vue-codemirror 说明

首先我的项目是 vue2 版本的,vue codemirror v5/v6已经发布。这是一个基于以下内容的新版本CodeMirror@6并且仅对Vue3可用。自从CodeMirror@6新版本将不再支持直接浏览器引用UMD模块。简而言之,新版本是与之前的版本完全不兼容。如果您希望继续使用Vue2或更低版本的CodeMirror。

任意门

vue-codemirror Github 地址: https://github.com/surmon-china/vue-codemirror
codemirror 中文文档:https://olindk.gitbooks.io/codemirror/content/configuration.html
codemirror 英文文档:https://codemirror.net/doc/manual.html#config

vue-codemirror 安装

因为最新版本已经不支持 vue2 了,所以我不能安装最细版本的,只能指定支持 vue2 版本的插件,因此,安装下面两个插件,必须两个都安装哈,不能只安装一个嗷!

npm i vue-codemirror@4.x --savenpm i codemirror@5.x --save 

vue-codemirror 使用

具体根据上面提供的官方文档去看哈,我这就不展开说了,我就简单贴一下我的代码哈;

首先在需要代码编辑器的组件里面引入插件:

import { codemirror } from 'vue-codemirror'components: {codemirror
},

然后在 HTML 部分使用一下:

<codemirror v-model="code" @ready="onCmReady" :style="codemirrorStyle" :options="cmOptions"></codemirror>

其中 v-model 就是你要绑定编辑的代码;@ready 绑定了一个函数,目的是在完成之后添加一个事件,用来代码提示用;style 绑定的是这个编辑器的样式,比如字体样式、字体大小之类的;options 很重要,是对编辑器的配置信息;

再一个就是引入一下必要的文件,我用到了这一些,一些样式,代码校验啥的:

import 'codemirror/lib/codemirror.css'
import 'codemirror/addon/lint/lint'
import 'codemirror/addon/lint/lint.css'
import 'codemirror/addon/lint/json-lint'
import 'codemirror/addon/lint/javascript-lint'
import 'codemirror/mode/javascript/javascript.js'
import 'codemirror/theme/base16-dark.css'
import 'codemirror/addon/fold/foldgutter.css'
import 'codemirror/addon/fold/foldcode'
import 'codemirror/addon/fold/foldgutter'
import 'codemirror/addon/fold/brace-fold'
import 'codemirror/addon/fold/comment-fold'
import 'codemirror/addon/fold/markdown-fold'
import 'codemirror/addon/fold/xml-fold'
import 'codemirror/addon/fold/indent-fold'
import 'codemirror/addon/hint/show-hint.css'
import 'codemirror/addon/hint/show-hint.js'
import 'codemirror/addon/hint/javascript-hint'
import 'codemirror/addon/hint/xml-hint'
import 'codemirror/addon/hint/sql-hint'
import 'codemirror/addon/hint/anyword-hint'
import 'codemirror/addon/search/match-highlighter'
import 'codemirror/addon/edit/matchbrackets'
import 'codemirror/addon/edit/closebrackets'
import 'codemirror/mode/css/css.js'
import 'codemirror/mode/vue/vue.js'

然后再 data 里面创建一下必要参数:

	  code: '',cmOptions: {mode: 'text/javascript',gutters: ['CodeMirror-lint-markers', 'CodeMirror-linenumbers', 'CodeMirror-foldgutter'],lineNumbers: true,line: true,lint: true,lineWrapping: true,autofocus: true,autoCloseBrackets: true,foldGutter: true, // 块槽hintOptions: { completeSingle: true },matchTags: { bothTags: true },matchBrackets: true,showCursorWhenSelecting: true,styleSelectedText: true,styleActiveLine: true,autoRefresh: true,highlightSelectionMatches: {minChars: 2,trim: true,style: "matchhighlight",showToken: false},},codemirrorStyle: {fontSize: '18px',lineHeight: '150%',height: '450px',border: '1px solid #EBEEF5'}

其中在 option 绑定数据里面的 mode: 'text/javascript', 表示当前编辑器,解析的是 JavaScript 代码,这个很重要。

然后就是代码校验需要使用几个包,可能需要单独安装一下:

# 校验json相关
npm install jsonlint file system# 校验js相关
npm install jshint

安装完成之后呢,把他们引入并且挂载 window 上面就行,他会自己找到使用:

import jsonlint from 'jsonlint'
import { JSHINT } from 'jshint'window.JSHINT = JSHINT
window.jsonlint = jsonlint

最后就是代码提示,比如 js 的代码提示是吧!

    onCmReady(cm) {cm.on("inputRead", (cm, obj) => {if (obj.text && obj.text.length > 0) {let c = obj.text[0].charAt(obj.text[0].length - 1)if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {cm.showHint({ completeSingle:false }) // 自动填充关闭了它}}})},

但是代码提示框的层级可能会比较低,被其他元素盖住,可以提升一下层级:

<style>
.CodeMirror-hints {z-index: 30000!important;  // 其实也不用这么大啦!
}
</style>

然后就完事了!看一下效果:

在这里插入图片描述

其他

这玩意儿啊,除了可以编辑 JavaScript 代码,像是JSON、HTML、CSS都是可以的!

编写JSON

编写JSON的话,需要改一下模式:

mode: 'application/json'

看一下效果哈:

在这里插入图片描述

编写 HTML

编写 HTML 的话,需要改一下模式:

mode: 'text/html'

看一下效果哈:

在这里插入图片描述

编写 CSS

编写 CSS 的话,需要改一下模式:

mode: 'text/css'

看一下效果哈:

在这里插入图片描述

行,大体就这些东西!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 力扣题解(组合总和IV)
  • spark shell
  • 汽车及零部件研发项目管理系统:一汽东机工选择奥博思 PowerProject 提升研发项目管理效率
  • 人是一个AI Agent吗?
  • React Hook 总结(React 萌新升级打怪中...)
  • python打包exe文件-实现记录
  • Linux下如何安装配置Elastic Stack日志收集系统
  • 【Rust光年纪】解锁Rust语言核心库奥秘:加密、数字签名和数据库操作全面解析
  • spark 动态资源分配dynamicAllocation
  • Linux cd 和 pwd 命令
  • ESP8266模块(2)
  • [图解]《分析模式》漫谈16-“我用的”不能变成“我的”
  • python基础知识点(蓝桥杯python科目个人复习计划71)
  • C的预编译指令
  • LabVIEW和Alicat Scientific质量流量计实现精确流量控制
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Bootstrap JS插件Alert源码分析
  • CentOS从零开始部署Nodejs项目
  • C学习-枚举(九)
  • ES6简单总结(搭配简单的讲解和小案例)
  • express.js的介绍及使用
  • Java编程基础24——递归练习
  • js ES6 求数组的交集,并集,还有差集
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • webpack+react项目初体验——记录我的webpack环境配置
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 基于组件的设计工作流与界面抽象
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 实现简单的正则表达式引擎
  • 数据科学 第 3 章 11 字符串处理
  • 消息队列系列二(IOT中消息队列的应用)
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​补​充​经​纬​恒​润​一​面​
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #stm32整理(一)flash读写
  • (39)STM32——FLASH闪存
  • (纯JS)图片裁剪
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (一)SvelteKit教程:hello world
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)关于多人操作数据的处理策略
  • .ai域名是什么后缀?
  • .Net 4.0并行库实用性演练
  • .NET 8.0 中有哪些新的变化?
  • .NET C# 操作Neo4j图数据库
  • .NET Core 发展历程和版本迭代
  • .NET Remoting学习笔记(三)信道