Вставка нового текста в заданную позицию курсора

Я работаю над настройкой codemirror для моего нового языкового режима. В рамках этой новой реализации режима я пишу новую панель инструментов, где пользователь может выбрать какой-то текст и сказать "вставить". Эта команда должна вставить текст, который пользователь вводил, прежде чем нажимать на панель инструментов.

Я не смог найти поддержку уровня API для этого. Если есть какой-либо другой способ, кто-то может помочь мне в этом?

В основном получить текущий номер позиционирования курсора и позицию, в которой в данный момент присутствует курсор. Может быть объектом Position

API для вставки текста, что-то вроде insertText("Text", PositionObject)

Ответ 1

Как насчет replaceSelection (http://codemirror.net/doc/manual.html#replaceSelection)?

doc.replaceSelection(replace: string,? select: string) Заменить выбор заданной строкой. По умолчанию новый выбор заканчивается после вставленного текста. Необязательный аргумент select можно использовать для изменения этого: передача "вокруг" приведет к выделению нового текста, а передача "start" свернет выделение до начала вставленного текста.

Ответ 2

Чтобы добавить новую строку в конец -

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
}

Функция вызова

updateCodeMirror("This is new line");

Ответ 3

Вот как я это сделал:

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

Ответ 4

Вы хотите использовать функцию replaceRange. Несмотря на то, что имя говорит "replace", оно также используется как "insert" в зависимости от аргументов. Из документации в то время я пишу это:

Заменить часть документа между и от строка. от и до должно быть {line, ch} объектов. может быть просто вставьте строку в позицию из. Когда источник дается, это будут переданы на "изменение" событий, и его первая буква будет используется для определения того, может ли это изменение быть объединено с предыдущим истории событий, описанным для происхождения выбора.

Ответ 5

Улучшенная функция, которая при выборе присутствует, заменяет текст, если нет, вставляет в текущую позицию курсора

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);

        }

    }

Ответ 6

Заключительная функция для вставки текста в текущую позицию курсора. Надеюсь, поможет.

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

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

    doc.replaceRange(str, pos);
}