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():回退

原文地址:https://www.cnblogs.com/minjh/p/15044706.html