zoukankan      html  css  js  c++  java
  • 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():回退

  • 相关阅读:
    php流程控制
    php运算符
    php数据类型
    php基础
    谈谈2019年
    聊聊这三年
    第二次作业(源代码)
    个人介绍
    22.python匿名函数详解
    11.python内置模块之json模块
  • 原文地址:https://www.cnblogs.com/minjh/p/15044706.html
Copyright © 2011-2022 走看看