当前位置:首页 » 《我的小黑屋》 » 正文

vue3中使用codemirror6增加代码提示功能

24 人参与  2024年03月29日 13:00  分类 : 《我的小黑屋》  评论

点击全文阅读


1、安装依赖

// 安装codemirror、语言包、主题、自动补全

npm i codemirrornpm i @codemirror/lang-javascriptnpm i @codemirror/autocompletenpm i @codemirror/theme-one-dark

本人安装的版本是

"dependencies": {    "@codemirror/autocomplete": "^6.0.0",    "@codemirror/lang-javascript": "^6.0.2",    "@codemirror/theme-one-dark": "^6.0.0",    "codemirror": "^6.0.1",    ...},

2、创建编辑器

<template>  <el-select    placeholder="请选择分组"    v-model="group"    clearable    @change="insertGroup"  >    <el-option      v-for="dict in groupList      :key="dict.id"      :label="dict.dgName + '(' + dict.dgCode + ')'"      :value="dict.dgCode"    ></el-option>  </el-select>  <el-button @click="codeBeauty" style="margin-bottom: 0.5rem">代码格式化</el-button>  <div id="coder"></div>  <el-button type="primary" @click="submitForm" v-if="!testFlag">确 定</el-button></template>
<style scoped>#coder{  margin-top: 10px;  width: 100%;}</style>
<script setup name="Command">import { javascript } from "@codemirror/lang-javascript";import { oneDark } from "@codemirror/theme-one-dark";import { basicSetup, EditorView } from "codemirror";import { autocompletion } from "@codemirror/autocomplete"; const { proxy } = getCurrentInstance();const allKeyList = ref([]);const groupList = ref([]);const group = ref("");const data = reactive({  form: {},});const { form } = toRefs(data);let editor = null;// 获取自定义提示内容function getCommandList() {    groupList.value = [        { id: '1', label: '分组1', value: 'group1' },        { id: '2', label: '分组2', value: 'group2' },    ];     allKeyList.value = [      { label: "@match", type: "keyword", apply: "match", detail: "match" },      { label: "@hello", type: "variable", apply: "hello", detail: "hellodetail" },      { label: "@magic", type: "text", apply: "⠁⭒*.✩.*⭒⠁", detail: "macro" },    ];}// 代码美化function codeBeauty() {  editor.dispatch({    changes: {         from: 0,         to: editor.state.doc.length,         insert:js_beautify(getCommanContent() || "")     },  });}// 获取当前编辑器中的内容字符串function getCommanContent() {  let str = ""  editor.state.doc.children.forEach((el,index) => {    str += el.text.join("\n") + "\n"  })  return str.slice(0,-1);}// 初始化编辑器function initCodeContent(){  setTimeout(() => {    if(!editor) {      editor = new EditorView({        doc: "Press Ctrl-Space in here...\n",        extensions: [          basicSetup,          javascript(),          oneDark,          autocompletion({ override: [myCompletions] }),          // EditorView.updateListener.of((v) => {          //   console.log(v.state.doc.toString())           // }),        ],        parent: document.getElementById("coder"),        options: {          lineNumbers: true,          line: true,          //ctrl-space唤起智能提示          extraKeys: {            Ctrl: "autocomplete",          },          //括号匹配          matchBrackets: true,        },      });    }    editor.dispatch({      changes: {         from: 0,         to: editor.state.doc.length,         insert: form.value.commandContent || "Press Ctrl-Space in here...\n"       },    });  }, 500);}// 自定义的代码不全,options为自定义内容,以@开头进行匹配function myCompletions(context) {  let word = context.matchBefore(/@\w*/);  if (!word && !context.explicit) return null;  return {    from: word.from ? word.from : context.pos,    options: allKeyList.value,  };}// 选择分组添加到编辑其中function insertGroup() {  insertCommandContant(group.value);  group.value = "";}// 外部输入内容,添加到编辑器当前光标(或选中内容)所在的位置function insertCommandContant(insertContent) {  editor.dispatch({    changes: {         from: editor.state.selection.ranges[0].from,         to: editor.state.selection.ranges[0].to,         insert: insertContent     },  });}/** 提交按钮 */function submitForm() {  proxy.$modal.loading("正在保存,请稍候...");  form.value.commandContent = getCommanContent();  addForm(form.value).then((response) => {    proxy.$modal.msgSuccess("新增成功");    proxy.$modal.closeLoading();  }).catch((err) => {proxy.$modal.closeLoading();});}getCommandList();initCodeContent();</script>


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/87624.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 身份的鸿沟,数不清的误会:+后续+番外桑南星顾彦珩无删减小说在线无广告高口碑小说
  • 苏南初沈璟之是什么小说(纵她玩,纵她闹,纵她谋权篡位)(苏南初沈璟之)全本完整清爽版在线+无广告结局
  • 新章速递姜昕如是什么小说(儿子帮小三抢老公?我转身带出天才儿童)完本阅读无广告(姜昕如)
  • 凰九歌小说全篇完整在线阅读(剜心弃徒?呵,涅槃凰主杀回来了!)热门章节列表
  • 高分_夏晚歌陆秋(震惊!玄学大佬被读心了)(夏晚歌陆秋)全本完整阅读
  • 空有相思无尽处小说(燕婉娴容珩)后续+番外精编之作无删减_(燕婉娴容珩)空有相思无尽处小说结局+番外看点十足_笔趣阁
  • 大盛的繁荣景象尽收于眼底孟莹姝陆鼎鸿小说无删减阅读无干扰(孟莹姝陆鼎鸿)番外+续集
  • (头条)竹马抑郁后,未婚妻疯狂报复我小说(沈星眠陆景行)整本免费版阅读无广告(竹马抑郁后,未婚妻疯狂报复我)
  • 与君来生再相爱后续+完结_小说后续在线阅读_无删减免费完结_
  • 却道无情胜有情后续更新+番外_墨宸灵珠阿宸内容精选_小说后续在线阅读_无删减免费完结_
  • 新章速递可我不想再等你了是什么小说(沈疏月傅沉舟)完本阅读无广告(可我不想再等你了)
  • 春风不渡无心人最后结局(林至南霍以峦)_春风不渡无心人最后结局

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1