前言:

codemirror 是一个非常强大的代码编辑器插件,但官方并没有提供 vue 的支持版本,不过跟 vue 集成的步骤并不复杂,以下是具体实现

相关网址

  1. Vue 官方插件库推荐的集成实现

    • 这个实现做的比较全面,但不支持动态语法高亮的切换
  2. codemirror 支持的语言类型
  3. codemirror 官网

实现效果

具体实现

1、安装

cnpm i codemirror --save

2、组件代码

<template><div class="in-coder-panel"><textarea ref="textarea"></textarea><el-select class="code-mode-select" v-model="mode"@change="changeMode"><el-option v-for="mode in modes":key="mode.value" :label="mode.label" :value="mode.value"></el-option></el-select></div>
</template><script type="text/ecmascript-6">// 引入全局实例import _CodeMirror from 'codemirror'// 核心样式import 'codemirror/lib/codemirror.css'// 引入主题后还需要在 options 中指定主题才会生效import 'codemirror/theme/cobalt.css'// 需要引入具体的语法高亮库才会有对应的语法高亮效果// codemirror 官方其实支持通过 /addon/mode/loadmode.js 和 /mode/meta.js 来实现动态加载对应语法高亮库// 但 vue 貌似没有无法在实例初始化后再动态加载对应 JS ,所以此处才把对应的 JS 提前引入import 'codemirror/mode/javascript/javascript.js'import 'codemirror/mode/css/css.js'import 'codemirror/mode/xml/xml.js'import 'codemirror/mode/clike/clike.js'import 'codemirror/mode/markdown/markdown.js'import 'codemirror/mode/python/python.js'import 'codemirror/mode/r/r.js'import 'codemirror/mode/shell/shell.js'import 'codemirror/mode/sql/sql.js'import 'codemirror/mode/swift/swift.js'import 'codemirror/mode/vue/vue.js'// 尝试获取全局实例const CodeMirror = window.CodeMirror || _CodeMirrorexport default {name: 'in-coder',props: {// 外部传入的内容,用于实现双向绑定value: String,// 外部传入的语法类型language: {type: String,default: null}},data () {return {// 内部真实的内容code: '',// 默认的语法类型mode: 'javascript',// 编辑器实例coder: null,// 默认配置options: {// 缩进格式tabSize: 2,// 主题,对应主题库 JS 需要提前引入theme: 'cobalt',// 显示行号lineNumbers: true,line: true},// 支持切换的语法高亮类型,对应 JS 已经提前引入// 使用的是 MIME-TYPE ,不过作为前缀的 text/ 在后面指定时写死了modes: [{value: 'css',label: 'CSS'}, {value: 'javascript',label: 'Javascript'}, {value: 'html',label: 'XML/HTML'}, {value: 'x-java',label: 'Java'}, {value: 'x-objectivec',label: 'Objective-C'}, {value: 'x-python',label: 'Python'}, {value: 'x-rsrc',label: 'R'}, {value: 'x-sh',label: 'Shell'}, {value: 'x-sql',label: 'SQL'}, {value: 'x-swift',label: 'Swift'}, {value: 'x-vue',label: 'Vue'}, {value: 'markdown',label: 'Markdown'}]}},mounted () {// 初始化this._initialize()},methods: {// 初始化_initialize () {// 初始化编辑器实例,传入需要被实例化的文本域对象和默认配置this.coder = CodeMirror.fromTextArea(this.$refs.textarea, this.options)// 编辑器赋值this.coder.setValue(this.value || this.code)// 支持双向绑定this.coder.on('change', (coder) => {this.code = coder.getValue()if (this.$emit) {this.$emit('input', this.code)}})// 尝试从父容器获取语法类型if (this.language) {// 获取具体的语法类型对象let modeObj = this._getLanguage(this.language)// 判断父容器传入的语法是否被支持if (modeObj) {this.mode = modeObj.label}}},// 获取当前语法类型_getLanguage (language) {// 在支持的语法类型列表中寻找传入的语法类型return this.modes.find((mode) => {// 所有的值都忽略大小写,方便比较let currentLanguage = language.toLowerCase()let currentLabel = mode.label.toLowerCase()let currentValue = mode.value.toLowerCase()// 由于真实值可能不规范,例如 java 的真实值是 x-java ,所以讲 value 和 label 同时和传入语法进行比较return currentLabel === currentLanguage || currentValue === currentLanguage})},// 更改模式changeMode (val) {// 修改编辑器的语法配置this.coder.setOption('mode', `text/${val}`)// 获取修改后的语法let label = this._getLanguage(val).label.toLowerCase()// 允许父容器通过以下函数监听当前的语法值this.$emit('language-change', label)}}}
</script><style lang="stylus" rel="stylesheet/stylus">.in-coder-panelflex-grow 1display flexposition relative.CodeMirrorflex-grow 1z-index 1.CodeMirror-codeline-height 19px.code-mode-selectposition absolutez-index 2right 10pxtop 10pxmax-width 130px
</style>

vue-codemirror 代码编辑器相关推荐

  1. vue2使用Codemirror代码编辑器插件

    让我们先看看需求 :一个有SQL语言提示代码编辑器  一 . 我这里用的是vue2 三种方法,得指定版本号,不指定就是默认最新,版本6以上都是vue3的版本,引入使用会报错 vue3的版本叫vue-c ...

  2. vue集成codemirror代码编辑器

    点击上方" 青年码农 "关注 回复"特效源码"可获取各种资料 CodeMirror是一个用 JavaScript 为浏览器实现的通用文本编辑器.它专门用于编辑代 ...

  3. CodeMIrror.js在线代码编辑器简单使用

    代码高亮是程序员的刚需,不管是在笔记类,论坛类,博客类web网站中,都对代码高亮提出要求,不高亮的代码阅读体验很差,codeMirror是一个前端代码高亮库,使用方便.CodeMirror 是一款在线 ...

  4. vue2项目使用codemirror插件实现代码编辑器功能

    1.使用npm安装依赖 npm install --save codemirror 2.在页面中放入如下代码 <template><textarea ref="mycode ...

  5. 通过vue-codemirror和CodeMirror将代码编辑器添加到web项目中

    前言 最近项目中有一个需求是,需要添加一个代码编辑器到项目中.也不知道是谁设计的,将代码编辑器添加到项目中? 费了九牛二虎之力终于找到了 vue-codemirror 和 CodeMirror 感觉是 ...

  6. vue2实现codemirror在线代码编辑器(代码提示,行数显示..)

    项目需求 需要在管理系统模块中实现用户SQL语句自查询,实现一个代码编辑器,要求有执行,清空,代码提示,行数显示功能,,实现效果如下: -------------------------------- ...

  7. 在线js编辑器来喽!CodeMirror页面代码编辑器

    背景介绍:在公司的开发平台使用时需要用到js代码编写输入框,大家都是在vscode之类的编辑器写好后粘贴,在用重构项目的时候想到了这里的弊端,想在页面上也可以有js 的结构可编写代码,就清晰方便很多. ...

  8. CodeMirror 5.26.0 发布,在线代码编辑器

    CodeMirror 5.26.0 已发布,CodeMirror 是一款"Online Source Editor",基于 Javascript,短小精悍,实时在线代码高亮显示,它 ...

  9. 在线代码编辑器 Codemirror 的轻量级 React 组件

    代码编辑器 CodeMirror 的轻量级 React 组件 demo @uiw-react.github.io/react-codem- 特性: ? 自动根据 mode 配置加载 mode 文件. ...

  10. 在线代码编辑器 CodeMirror 配置说明 - javascript开发的代码语法高亮显示引擎

    CodeMirror是一款在线的支持语法高亮的代码编辑器.官网: http://codemirror.net/ 下载后,解压开得到的文件夹中,lib下是放的是核心库和核心css,mode下放的是各种支 ...

最新文章

  1. GAN的基本原理、应用和走向
  2. 006_html元素
  3. 笔记本电池的正确使用方法
  4. linux服务器安装Mysql。看了几个教程,没装上,看这个一下就装上了。
  5. 我的所有邮箱 My all E-mail
  6. 页面制作(PS/HTML/CSS)易错点总结
  7. Node.js:借助formidable文件上传
  8. java读取资源文件(Properties)
  9. 小白都能了解的聚类算法之一(Kmeans与GMM)
  10. html鼠标自动图片放大,css如何实现鼠标放在图片上时图片放大呢?
  11. H G W S哪一个不是状态函数_复变函数学习笔记(13)——单位圆盘上的自同构群(用了近世代数)...
  12. 【性能测试基础】性能专有名词解析及性能瓶颈分析技巧
  13. Linux 基于tar与openssl加密解密压缩包
  14. 柚墨模板PPT干货分享:幻影动画,打造科幻大片前卫PPT
  15. 【T+】畅捷通T+存货档案批量修改存货属性
  16. 今日头条校招2017.7.21编程3,PM、idea、程序员
  17. Kafka(一):概述
  18. 【Convex Optimization (by Boyd) 学习笔记】Chapter 2 - Convex sets(1) 仿射集凸集
  19. 细数二三四五“爆雷”简史:布局金融7年一场空,陈于冰贯穿始终
  20. yii2高级模板使用一个域名管理前后台

热门文章

  1. 送示波器?送各色示波器设计!
  2. 利用IDEA模板快速生成swagger注解
  3. 字节跳动面试题后台_JAVA字节跳动面试题分享,一面
  4. 如何减小电压跟随器输出电阻_运算放大器和比较器还傻傻分不清楚?一篇图文教你轻松辨认...
  5. 2020电子设计大赛——坡道行驶小车
  6. 51单片机频率计c语言程序,基于51单片机的数字频率计(附程序)
  7. 看单片机原理图-最小系统
  8. 数学建模灵敏度分析是什么?为什么获奖论文基本都有!【科研交流】
  9. 在excel中求算风向和风速范围的函数,用origin做风向玫瑰图
  10. 【FFmpeg】转码码率