开箱即用的代码编辑器:Vue-Codemirror 完全使用指南
一、vue-codemirror 简介
-
支持 Vue2 和 Vue3,无侵入式集成; -
内置 100+ 种编程语言语法高亮(JavaScript、Python、Java、JSON、SQL、Markdown 等); -
支持代码折叠、行号显示、主题切换、只读模式、代码格式化; -
轻量按需引入,避免打包体积过大; -
支持双向绑定,无缝对接 Vue 数据响应式。
二、快速安装
# 核心组件npm install vue-codemirror# 核心依赖(CodeMirror6 原生包)npm install @codemirror/state @codemirror/view# 按需安装语言包、主题包(根据需求选择)npm install @codemirror/lang-javascript @codemirror/lang-json @codemirror/lang-sqlnpm install @codemirror/theme-one-dark
三、基础使用(全局注册 + 局部使用)
1. 全局注册(推荐)
import { createApp } from 'vue'import App from './App.vue'// 引入 vue-codemirror 核心import { Codemirror } from 'vue-codemirror'// 引入基础样式import 'codemirror/lib/codemirror.css'const app = createApp(App)// 全局注册组件app.component('Codemirror', Codemirror)app.mount('#app')
2. 基础代码编辑器(JSON 示例)
<template><divclass="editor-container"><h3>基础 JSON 代码编辑器</h3><!-- codemirror 组件 --><Codemirrorv-model="code":extensions="extensions"placeholder="请输入 JSON 代码"/><!-- 实时预览编辑内容 --><divclass="preview"><h4>实时预览:</h4><pre>{{ code }}</pre></div></div></template><scriptsetup>import { ref } from 'vue'// 引入语言包import { json } from '@codemirror/lang-json'// 编辑器配置(语法高亮、行号、基础功能)const extensions = [json(), // JSON 语法高亮]// 双向绑定的代码数据const code = ref('{"name":"vue-codemirror","version":"6.x","usage":"code editor"}')</script><stylescoped>.editor-container {max-width: 800px;margin: 20px auto;}/* 编辑器高度 */:deep(.cm-editor) {height: 300px;border: 1px solid #eee;}.preview {margin-top: 20px;padding: 10px;background: #f5f5f5;}</style>
四、核心配置与高级功能
1. 切换编辑器主题
// 引入主题包import { oneDark } from '@codemirror/theme-one-dark'// 引入主题样式import '@codemirror/theme-one-dark/style.css'// 扩展配置中加入主题const extensions = [json(),oneDark // 启用深色主题]
2. 只读 / 禁用编辑模式
import { EditorState, Compartment } from '@codemirror/state'import { editable } from '@codemirror/view'// 定义只读配置const editableComp = new Compartment()const extensions = [json(),oneDark,// 禁用编辑:editableComp.of(editable.of(false))// 可编辑:editableComp.of(editable.of(true))editableComp.of(editable.of(false))]
3. 显示行号、代码折叠
import { lineNumbers, foldGutter } from '@codemirror/view'import { foldKeymap } from '@codemirror/language'const extensions = [json(),oneDark,lineNumbers(), // 显示行号foldGutter(), // 代码折叠foldKeymap // 折叠快捷键]
4. 多语言支持(JavaScript/SQL/Markdown)
// JavaScript 语法import { javascript } from '@codemirror/lang-javascript'// SQL 语法import { sql } from '@codemirror/lang-sql'// Markdown 语法import { markdown } from '@codemirror/lang-markdown'// 按需切换const extensions = [javascript()] // JS 编辑器// const extensions = [sql()] // SQL 编辑器// const extensions = [markdown()] // Markdown 编辑器
5. 自定义事件监听
<Codemirrorv-model="code":extensions="extensions"@change="handleChange"@focus="handleFocus"@blur="handleBlur"/><scriptsetup>const handleChange = (value) => {console.log('代码变化:', value)}const handleFocus = () => {console.log('编辑器聚焦')}const handleBlur = () => {console.log('编辑器失焦')}</script>
五、企业级实战场景
场景 1:后台 JSON 配置编辑器
<template><divclass="json-editor"><el-button @click="formatCode">格式化代码</el-button><el-button @click="toggleEditable">{{ isEditable ? '禁用编辑' : '启用编辑' }}</el-button><Codemirrorv-model="jsonCode":extensions="extensions"placeholder="请输入合法 JSON"/></div></template><scriptsetup>import { ref, computed } from 'vue'import { json } from '@codemirror/lang-json'import { oneDark } from '@codemirror/theme-one-dark'import { editable } from '@codemirror/view'import { Compartment } from '@codemirror/state'const jsonCode = ref('{}')const isEditable = ref(true)const editableComp = new Compartment()// 格式化 JSON 代码const formatCode = () => {try {jsonCode.value = JSON.stringify(JSON.parse(jsonCode.value), null, 2)} catch (err) {alert('JSON 格式不合法')}}// 切换编辑状态const toggleEditable = () => {isEditable.value = !isEditable.value}// 动态扩展配置const extensions = computed(() => [json(),oneDark,editableComp.of(editable.of(isEditable.value))])</script>
场景 2:SQL 脚本编辑器
// 核心配置import { sql } from '@codemirror/lang-sql'const extensions = [sql(), // SQL 语法高亮lineNumbers(),foldGutter()]
六、常见问题与优化
打包体积过大:按需引入语言包 / 主题包,不要全量引入;
七、总结
开箱即用,零门槛集成到 Vue 项目;
按需扩展,体积可控,支持 100+ 种语言;
双向绑定 + 事件系统,完美适配 Vue 开发习惯;
企业级稳定,支持生产环境复杂场景。
夜雨聆风