拒绝重复造轮子!vue-codemirror 助你快速集成代码编辑器

嘿,前端小伙伴!你需要的代码编辑器来了

你是否在Vue项目中需要一个漂亮又好用的代码编辑器?手动写一个太麻烦?今天给你推荐一个超好用的插件——vue-codemirror,让你分分钟搞定代码编辑功能!

什么是vue-codemirror?

简单说,vue-codemirror是基于CodeMirror 6的Vue 3组件,它能让你在Vue项目中轻松集成一个功能强大的代码编辑器,支持:

  • 语法高亮(支持多种编程语言)
  • 主题切换(亮/暗主题等)
  • 代码折叠、行号显示
  • 快捷键支持
  • 实时内容绑定

⚠️ 重要提示:当前版本(v5/v6)只支持Vue 3,不兼容Vue 2!如果你用Vue 2,需要去看旧版(vue-codemirror@4.x)。

手把手教你安装

第一步,安装肯定少不了。打开你的终端,输入下面的命令:

如果你用yarn:

yarn add codemirror vue-codemirror

如果用npm:

npm install codemirror vue-codemirror --save

安装额外的语言和主题

核心包只是基础,比如你想编辑JavaScript代码,还得装对应的语言包:

# 安装JavaScript语言支持
yarn add @codemirror/lang-javascript

# 安装JSON语言支持(如果需要)
yarn add @codemirror/lang-json

想换个好看的主题?安排!比如这个One Dark主题(类似VS Code的暗黑主题):

yarn add @codemirror/theme-one-dark

记住,需要什么语言或主题,就装对应的包,别漏啦!

两种使用方式,任你选

方式一:本地组件引入(推荐单个组件使用)

在你的Vue文件里,先引入组件和需要的扩展:

// 引入组件
import { Codemirror } from 'vue-codemirror'
// 引入JavaScript语言支持
import { javascript } from '@codemirror/lang-javascript'
// 引入One Dark主题
import { oneDark } from '@codemirror/theme-one-dark'

然后在模板里这样写:

<template>
  <div class="editor-container">
    <h3>我的第一个代码编辑器</h3>
    <!-- codemirror组件 -->
    <codemirror
      v-model="code"  <!-- 双向绑定代码内容 -->
      placeholder="写点JavaScript代码吧..."  <!-- 空内容时的提示文字 -->
      :style="{ height: '400px', border: '1px solid #ccc' }"  <!-- 设置高度和边框 -->
      :extensions="[javascript(), oneDark]"  <!-- 启用JS语言支持和暗黑主题 -->
      @change="handleCodeChange"  <!-- 内容变化时触发 -->
    />
  </div>
</template>

脚本部分别忘了定义code变量和事件处理:

import { ref } from 'vue'

export default {
  components: { 
    Codemirror  // 注册组件
  },
  setup() {
    // 初始代码内容
    const code = ref(`// 这是vue-codemirror生成的编辑器
console.log('Hello, 前端开发者!')
function add(a, b) {
  return a + b
}
console.log('1+2=', add(1, 2))`)
    
    // 监听内容变化
    const handleCodeChange = (value) => {
      console.log('代码内容:', value)
      // 这里可以做保存、实时预览等操作
    }
    
    return { 
      code, 
      handleCodeChange 
    }
  }
}

这样,一个带语法高亮、暗黑主题的JS编辑器就出来啦!效果如下(想象一下):

  • 输入JS代码会自动高亮关键字
  • 行号自动显示
  • 支持Tab缩进(默认2个空格)
  • 内容变化时会打印到控制台

方式二:全局组件注册(适合多个组件使用)

如果你的项目很多地方都需要用编辑器,全局注册更方便。在main.js(或main.ts)里:

import { createApp } from 'vue'
import App from './App.vue'
// 引入基础设置(包含行号、折叠等基础功能)
import { basicSetup } from 'codemirror'
// 引入vue-codemirror
import VueCodemirror from 'vue-codemirror'

const app = createApp(App)

// 全局注册
app.use(VueCodemirror, {
  // 全局默认配置
  autofocus: true,  // 默认自动聚焦
  indentWithTab: true,  // 允许用Tab缩进
  tabSize: 2,  // Tab缩进大小
  placeholder: '请输入代码...',  // 默认提示文字
  extensions: [basicSetup]  // 加载基础功能
})

app.mount('#app')

之后在任何组件里直接用,不用再引入:

<template>
  <codemirror v-model="htmlCode" :extensions="[html()]"/>
</template>

核心配置详解

extensions(扩展)—— 最重要的配置

extensions决定了编辑器的功能,比如语言、主题、额外功能等。你可以把它理解为“插件集合”。

比如同时启用多种功能:

import { javascript } from '@codemirror/lang-javascript'
import { oneDark } from '@codemirror/theme-one-dark'
import { lineNumbers } from '@codemirror/view'  // 行号显示

// 组合多个扩展
const extensions = [
  javascript(),  // JS语言支持
  oneDark,       // 暗黑主题
  lineNumbers()  // 显示行号(如果基础设置里没有)
]

常用属性(Props)

属性名作用示例
v-model双向绑定代码内容v-model="code"
placeholder空内容时的提示文字placeholder="请输入代码"
:style设置编辑器样式(必须设置高度):style="{ height: '400px' }"
autofocus加载后自动聚焦:autofocus="true"
disabled禁用编辑:disabled="isDisabled"
tabSizeTab缩进空格数:tabSize="4"

常用事件(Events)

事件名触发时机回调参数
@change内容变化时(value: string) → 最新代码内容
@focus编辑器聚焦时-
@blur编辑器失焦时-
@ready编辑器初始化完成时(view: EditorView) → 编辑器实例

例如,获取编辑器实例(用于高级操作):

<codemirror 
  v-model="code"
  @ready="handleReady"
/>

<script>
const handleReady = (payload) => {
  // 获取编辑器实例
  const editorView = payload.view
  console.log('编辑器已准备好', editorView)
  // 可以调用CodeMirror的API,比如获取光标位置
}
</script>

新手常见问题 & 避坑指南

1. 安装后报错:“Vue is not defined”

→ 原因:你用的是Vue 2,但当前版本只支持Vue 3。
→ 解决:要么升级Vue 3,要么安装旧版:npm install vue-codemirror@4.x --save

2. 代码没有语法高亮

→ 原因:没安装对应语言的扩展包,或没在extensions里配置。
→ 解决:安装语言包(如@codemirror/lang-javascript),并在extensions中添加。

3. 编辑器高度太小,看不到内容

→ 原因:默认没有高度,需要手动设置。
→ 解决:通过:style设置height,比如:style="{ height: '400px' }"

4. 主题不生效

→ 原因:没安装主题包,或没在extensions中配置。
→ 解决:安装主题包(如@codemirror/theme-one-dark),并添加到extensions。

项目地址 & 更多资源

总结

vue-codemirror真的是前端开发的好帮手,不用自己从零开发编辑器,几行代码就能集成一个功能强大的代码编辑组件。无论是做在线代码演示、配置文件编辑,还是开发一个小型IDE,它都能胜任!

快去试试吧,有问题欢迎留言讨论~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值