react-codemirror2 代码编辑器
CodeMirror是一款在线的支持语法高亮的代码编辑器。官网: http://codemirror.net/
安装:
npm install react-codemirror2 codemirror --save
使用:
1 import 'codemirror/lib/codemirror.js';2 import 'codemirror/lib/codemirror.css';
3 // 主题风格
4 import 'codemirror/theme/solarized.css';
5 // 设置代码语言模式(比如JS,SQL,python,java等)
6 import 'codemirror/mode/javascript/javascript';
7 import 'codemirror/mode/sql/sql.js';
8 import 'codemirror/mode/python/python.js';
9 import 'codemirror/mode/shell/shell.js';
10 import 'codemirror/mode/clike/clike.js';
11 // 代码模式,clike是包含java,c++等模式的
12 import 'codemirror/mode/clike/clike';
13 import 'codemirror/mode/css/css';
14 //ctrl+空格代码提示补全
15 import 'codemirror/addon/hint/show-hint.css'; // start-ctrl+空格代码提示补全
16 import 'codemirror/addon/hint/show-hint.js';
17 import 'codemirror/addon/hint/anyword-hint.js'; // end
18 //代码高亮
19 import 'codemirror/addon/selection/active-line';
20 //折叠代码
21 import 'codemirror/addon/fold/foldgutter.css';
22 import 'codemirror/addon/fold/foldcode.js';
23 import 'codemirror/addon/fold/foldgutter.js';
24 import 'codemirror/addon/fold/brace-fold.js';
25 import 'codemirror/addon/fold/comment-fold.js';
26
27 function ScriptTask() {
28 const [instance, setInstance] = useState(null);
29 const [codeData, setCodeData] = useState('');
30
31 return (
32 <CodeMirror
33 editorDidMount={(editor) => {
34 setInstance(editor);
35 }}
36 value={codeData}
37 options={{
38 // mode: { name: 'text/sql' }, //定义mode
39 mode: 'sql', //定义mode
40 theme: 'solarized', //选中的theme
41 autofocus: true, //自动获取焦点
42 styleActiveLine: true, //光标代码高亮
43 lineNumbers: true, //显示行号
44 smartIndent: true, //自动缩进
45 //start-设置支持代码折叠
46 lineWrapping: true,
47 foldGutter: true,
48 gutters: ['CodeMirror-linenumbers', 'CodeMirror-foldgutter'], //end
49 extraKeys: {
50 Ctrl: 'autocomplete',
51 'Ctrl-S': function(editor) {
52 this.codeSave(editor);
53 },
54 'Ctrl-Z': function(editor) {
55 editor.undo();
56 }, //undo
57 F8: function(editor) {
58 editor.redo();
59 } //Redo
60 },
61 matchBrackets: true, //括号匹配,光标旁边的括号都高亮显示
62 autoCloseBrackets: true //键入时将自动关闭()[]{}''""
63 }}
64 // onChange={changeCode}
65
66 // 在失去焦点的时候触发,这个时候放数据最好
67 // onBlur={this.codeOnBlur}
68
69 // 这个必须加上,否则在一些情况下,第二次打开就会有问题
70 // onBeforeChange={(editor, data, value) => {
71 // console.log("onBeforeChange fresh")
72 // console.log(JSON.stringify(data));
73 // }}
74 />
75 )
76 }
CodeMirror 事件
1.onChange(instance,changeObj):codeMirror文本被修改后触发。instance是一个当前的codemirror对象,changeObj是一个{from,to,text[,removed][,origin]}对象。其中from,to分别表示起始行对象和结束行对象,行对象包括ch:改变位置距离行头的间隔字符,line:改变的行数。text是一个字符串数组表示被修改的文本内容,即你输入的内容。
2.onBeforeChange(instance,changObj):内容改变前被调用
3.onCursorActivity(instance):当鼠标点击内容区、选中内容、修改内容时被触发
4.onKeyHandled:(instance,name,event):当一个都dom元素的事件触发时调用,name为操作名称。
5.onInputRead(insatance,changeObj):当一个新的input从隐藏的textara读取出时调用
6.onBeforeSelectionChange(instance,obj):当选中的区域被改变时调用,obj对象是选择的范围和改变的内容(本人未测试成功)
7.onUpdate(instance):编辑器内容被改变时触发
8.onFocus(instance):编辑器获得焦点式触发
9.onBlur(instance):编辑器失去焦点时触发
CodeMirror 常用方法
getValue():获取编辑器文本内容
setValue(text):设置编辑器文本内容
getRange({line,ch},{line,ch}):获取指定范围内的文本内容第一个对象是起始坐标,第二个是结束坐标
replaceRange(replaceStr,{line,ch},{line,ch}):替换指定区域的内容
getLine(line):获取指定行的文本内容
lineCount():统计编辑器内容行数
firstLine():获取第一行行数,默认为0,从开始计数
lastLine():获取最后一行行数
getLineHandle(line):根据行号获取行句柄
getSelection():获取鼠标选中区域的代码
replaceSelection(str):替换选中区域的代码
setSelection({line:num,ch:num1},{line:num2,ch:num3}):设置一个区域被选中
somethingSelected():判断是否被选择
getEditor():获取CodeMirror对像
undo():撤销
redo():回退
以上是 react-codemirror2 代码编辑器 的全部内容, 来源链接: utcz.com/z/381345.html