它支持开箱即用,自带了超过100种语言的库,同时还有很多附加功能,有人针对vue框架,封装了 codemirror,提供了一个面向 vue 的 codemirror 组件:vue-codemirror
,使用起来比较方便。
下图为vue-codemirror 实现的
java 在线编辑器
npm install vue-codemirror --save
import "codemirror/lib/codemirror.css";
// require active-line.js
import "codemirror/addon/selection/active-line.js";
// styleSelectedText
import "codemirror/addon/selection/mark-selection.js";
// hint
import "codemirror/addon/hint/show-hint.js";
import "codemirror/addon/hint/sql-hint.js";
import "codemirror/addon/hint/show-hint.css";
import "codemirror/addon/hint/javascript-hint.js";
// highlightSelectionMatches
import "codemirror/addon/scroll/annotatescrollbar.js";
import "codemirror/addon/search/matchesonscrollbar.js";
import "codemirror/addon/search/match-highlighter.js";
// keyMap
import "codemirror/mode/clike/clike.js";
import "codemirror/mode/sql/sql.js";
import "codemirror/addon/edit/matchbrackets.js";
import "codemirror/addon/comment/comment.js";
import "codemirror/addon/dialog/dialog.js";
import "codemirror/addon/dialog/dialog.css";
import "codemirror/addon/search/searchcursor.js";
import "codemirror/addon/search/search.js";
import "codemirror/keymap/sublime.js";
// foldGutter
import "codemirror/addon/fold/foldgutter.css";
import "codemirror/addon/fold/brace-fold.js";
import "codemirror/addon/fold/comment-fold.js";
import "codemirror/addon/fold/foldcode.js";
import "codemirror/addon/fold/foldgutter.js";
import "codemirror/addon/fold/indent-fold.js";
import "codemirror/addon/fold/markdown-fold.js";
import "codemirror/addon/fold/xml-fold.js";
// 编辑的主题文件 可以从 codemirror/theme/下引入多个
import "codemirror/theme/monokai.css";
import "codemirror/theme/base16-light.css";
//语言模式 可以从 codemirror/mode/下引入多个
// import 'codemirror/mode/javascript/javascript.js'
// import 'codemirror/mode/css/css.js'
// import 'codemirror/mode/vue/vue.js'
// import 'codemirror/mode/sql/sql.js'
//引入codemirror 及上述语言、样式、主题等配置
import { codemirror } from "vue-codemirror";
components: {
codemirror
},
options: {
tabSize: 2, // tab
styleActiveLine: true, // 高亮选中行
lineNumbers: true, // 显示行号
styleSelectedText: true,
line: true,
foldGutter: true, // 块槽
gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"],
highlightSelectionMatches: { showToken: /\w/, annotateScrollbar: true }, // 可以启用该选项来突出显示当前选中的内容的所有实例
mode: "text/x-java", //"text/x-sql" "text/html" "text/css" "text/javascript"
// hint.js options
hintOptions: {
// 当匹配只有一项的时候是否自动补全
completeSingle: false,
},
// 快捷键 可提供三种模式 sublime、emacs、vim
keyMap: "sublime",
matchBrackets: true,
showCursorWhenSelecting: true,
theme: "monokai", // 主题
extraKeys: { Ctrl: "autocomplete" }, // 可以用于为编辑器指定额外的键绑定,以及keyMap定义的键绑定
},
methods: {
inputChange(content) {
this.$nextTick(() => {
console.log("code:" + this.code);
console.log("content:" + content);
this.$emit("input", content);//若需要封装组件,可利用此方法抛出事件
});
},
},
// 使用
自动行高
codemirror默认的高度是300px,如果想要调整默认高度,可以在mounted方法中增加下面一段代码,这段代码的含义是调整cm高度为(当前浏览器高度-200)px,并且在窗口发生变化时,重新再做出调整。
this.$refs.cm.codemirror.setSize("auto", (document.documentElement.clientHeight - 200) + "px")
this.$nextTick(() => {
window.addEventListener('resize', () => {
//监听浏览器窗口大小改变
//浏览器变化执行动作
this.$refs.cm.codemirror.setSize("auto", (document.documentElement.clientHeight - 200) + "px")
});
})