Вставка нового текста в заданное положение курсора
Я работаю над настройкой codemirror для моего нового языкового режима. В рамках реализации этого нового режима я пишу новую панель инструментов, где пользователь может выбрать некоторый текст и сказать insert. Эта команда должна вставить текст, который пользователь набирал непосредственно перед щелчком на панели инструментов.
Я не смог найти никакой поддержки уровня API, чтобы сделать это. Если есть какой-то другой способ, может ли кто-то помочь мне в этом?
В основном получаем текущее положение курсора - номер строки и положение, при котором курсор в данный момент присутствует. Может быть объектом позиции
API для вставки текста, что-то вроде insertText("Text", PositionObject)
6 ответов:
Как насчет
replaceSelection
(http://codemirror.net/doc/manual.html#replaceSelection)?
Чтобы добавить новую строку в конце -
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");
Вот как я это сделал:
function insertTextAtCursor(editor, text) { var doc = editor.getDoc(); var cursor = doc.getCursor(); doc.replaceRange(text, cursor); }
Вы хотите использовать функциюreplaceRange . Даже если имя говорит "заменить", оно также служит" вставить " в зависимости от аргументов. Из документации на тот момент я пишу следующее:
Заменить часть документа между ОТ и до на заданную строка. from и to должны быть объектами {line, ch}. чтобы можно было остановиться на просто вставьте строку в позицию from. Когда дано происхождение, оно будут переданы на "изменение" события, и его первая буква будет быть используется для определения возможности слияния этого изменения с предыдущим история событий, в том виде, как описано для отбора истоков.
Улучшена функция, которая, если выделение присутствует, заменяет текст, если нет, вставляет в текущую позицию курсора
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); } }