Вставка нового текста в заданную позицию курсора
Я работаю над настройкой 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);
}