在给定的光标位置插入新文本

时间:2014-05-19 08:49:32

标签: codemirror

我正在为我的新语言模式定制代码镜像。作为这种新模式实现的一部分,我正在编写一个新工具栏,用户可以在其中选择一些文本并说出插入。在单击工具栏之前,此命令应插入用户正在键入的文本。

我找不到任何API级别支持。如果还有其他方法可以帮助我吗?

基本上获取当前光标位置编号和当前光标所在的位置。可能是一个位置对象

用于插入文字的API,例如insertText("Text", PositionObject)

7 个答案:

答案 0 :(得分:12)

replaceSelectionhttp://codemirror.net/doc/manual.html#replaceSelection)怎么样?

  

doc.replaceSelection(replacement:string,?select:string)   用给定的字符串替换选择。默认情况下,新选择在插入的文本后结束。可选的select参数可用于更改此传递" around"将导致选择新文本,传递"开始"将选择内容折叠到插入文本的开头。

答案 1 :(得分:11)

以下是我的表现:

function insertTextAtCursor(editor, text) {
    var doc = editor.getDoc();
    var cursor = doc.getCursor();
    doc.replaceRange(text, cursor);
}

答案 2 :(得分:10)

在最后添加新行 -

$this->db->error();

通话功能

function updateCodeMirror(data){
    var cm = $('.CodeMirror')[0].CodeMirror;
    var doc = cm.getDoc();
    var cursor = doc.getCursor(); // gets the line number in the cursor position
    var line = doc.getLine(cursor.line); // get the line contents
    var pos = { // create a new object to avoid mutation of the original selection
        line: cursor.line,
        ch: line.length - 1 // set the character position to the end of the line
    }
    doc.replaceRange('\n'+data+'\n', pos); // adds a new line
}

答案 3 :(得分:4)

您想使用replaceRange功能。即使这个名字用"替换",它也用作"插入"取决于参数。从我写这篇文章时的文档:

  

将文档的一部分替换为给定的和   串。 from和to必须是{line,ch}对象。可以留下来   只需将字符串插入位置即可。当给出原点时,它   将被传递给"改变"事件,它的第一封信将是   用于确定此更改是否可以与之前合并   历史事件,以选择起源描述的方式。

答案 4 :(得分:2)

改进的功能,如果选择存在,则替换文本,如果没有,则插入当前光标位置

function insertString(editor,str){

        var selection = editor.getSelection();

        if(selection.length>0){
            editor.replaceSelection(str);
        }
        else{

            var doc = editor.getDoc();
            var cursor = doc.getCursor();

            var pos = {
               line: cursor.line,
               ch: cursor.ch
            }

            doc.replaceRange(str, pos);

        }

    }

答案 5 :(得分:1)

以高效方式在当前光标位置插入文本的最终功能。 希望能帮助到你。

function insertStringInTemplate(str)
{
    var doc = editor_template.getDoc();
    var cursor = doc.getCursor();

    var pos = {
        line: cursor.line,
        ch: cursor.ch
    }

    doc.replaceRange(str, pos);
}

答案 6 :(得分:0)

此功能用于插入到指定位置并将光标移动到插入文本的末尾。

  function insertToCodeMirror(text) {
    const doc = codeMirrorInstance.getDoc();
    const cursor = codeMirrorInstance.getCursor();
    doc.replaceRange(text, cursor);
    codeMirrorInstance.focus();
    setTimeout(() => {
      cursor.ch += text.length;
      codeMirrorInstance.setCursor(cursor);
    }, 0);
  }