CodeMirror:如何在光标位置之前或之后阅读编辑器文本
CodeMirror: How to read editor text before or after cursor position
我正在尝试找到一种方法来测试光标前面是否有特定字符串,然后触发事件。
我正在尝试做的事情的例子:
用户点击编辑器内的某处,触发了 cursorActivity
(光标或编辑器已更改)事件,我捕获该事件并测试前 6 个字符是否与字符串匹配 'color:'
如果那我做点什么吧。
除了捕获每次键入字符或输入字符串时触发的 readInput
事件外,我似乎找不到任何一种方法可以让您实际直接从编辑器中读取内容粘贴。这在一定程度上有效,但当用户通过单击鼠标移动光标时会失败。
长话短说;博士
如何检测光标何时移动到特定字符串之后的某处?
好的,终于找到解决办法了。您可以使用 editor.doc
检索实际文档,这样您就可以获取光标行和字符位置。然后您可以使用 editor.doc.getLine(n)
检索所需的行并比较您的子字符串
这是我的测试用例:
<!-- Create a simple CodeMirror instance -->
<link rel="stylesheet" href="lib/codemirror.css">
<script src="lib/codemirror.js"></script>
<textarea id="myTextarea"></textarea>
<script>
var editor = CodeMirror.fromTextArea(myTextarea, {
lineNumbers: true
});
//Catch cursor change event
editor.on('cursorActivity',function(e){
var line = e.doc.getCursor().line, //Cursor line
ch = e.doc.getCursor().ch, //Cursor character
stringToMatch = "color:",
n = stringToMatch.length,
stringToTest = e.doc.getLine(line).substr(Math.max(ch - n,0),n);
if (stringToTest == stringToMatch) console.log("SUCCESS!!!");
});
</script>
我正在尝试找到一种方法来测试光标前面是否有特定字符串,然后触发事件。
我正在尝试做的事情的例子:
用户点击编辑器内的某处,触发了 cursorActivity
(光标或编辑器已更改)事件,我捕获该事件并测试前 6 个字符是否与字符串匹配 'color:'
如果那我做点什么吧。
除了捕获每次键入字符或输入字符串时触发的 readInput
事件外,我似乎找不到任何一种方法可以让您实际直接从编辑器中读取内容粘贴。这在一定程度上有效,但当用户通过单击鼠标移动光标时会失败。
长话短说;博士 如何检测光标何时移动到特定字符串之后的某处?
好的,终于找到解决办法了。您可以使用 editor.doc
检索实际文档,这样您就可以获取光标行和字符位置。然后您可以使用 editor.doc.getLine(n)
检索所需的行并比较您的子字符串
这是我的测试用例:
<!-- Create a simple CodeMirror instance -->
<link rel="stylesheet" href="lib/codemirror.css">
<script src="lib/codemirror.js"></script>
<textarea id="myTextarea"></textarea>
<script>
var editor = CodeMirror.fromTextArea(myTextarea, {
lineNumbers: true
});
//Catch cursor change event
editor.on('cursorActivity',function(e){
var line = e.doc.getCursor().line, //Cursor line
ch = e.doc.getCursor().ch, //Cursor character
stringToMatch = "color:",
n = stringToMatch.length,
stringToTest = e.doc.getLine(line).substr(Math.max(ch - n,0),n);
if (stringToTest == stringToMatch) console.log("SUCCESS!!!");
});
</script>