我正在为我的新语言模式定制代码镜像。作为这种新模式实现的一部分,我正在编写一个新工具栏,用户可以在其中选择一些文本并说出插入。在单击工具栏之前,此命令应插入用户正在键入的文本。
我找不到任何API级别支持。如果还有其他方法可以帮助我吗?
基本上获取当前光标位置编号和当前光标所在的位置。可能是一个位置对象
用于插入文字的API,例如insertText("Text", PositionObject)
答案 0 :(得分:12)
replaceSelection
(http://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);
}