在 Ace Editor 中对多个光标执行方法

Posted

技术标签:

【中文标题】在 Ace Editor 中对多个光标执行方法【英文标题】:Performing methods on multiple cursor in Ace Editor 【发布时间】:2013-09-19 20:15:16 【问题描述】:

我正在使用 Ace 编辑器,我只能在单个光标上执行功能,而不能在多个光标上执行 比如

 editor.navigateLineStart(); 

如果有一个光标,将光标移动到行首,如果有多个光标,则不移动

这可以通过键入 (left-home) 手动完成 因为下面的代码在文档 ace.js 中,但我不明白如何将 multiSelectAction 设置为“forEach”或者这是否会有所帮助

name: "gotolinestart",
bindKey: bindKey("Alt-Left|Home", "Command-Left|Home|Ctrl-A"),
exec: function(editor)  editor.navigateLineStart(); ,
multiSelectAction: "forEach",
readOnly: true

还有一个功能

 forEachSelection(String cmd, String args) 

http://ace.c9.io/#nav=api&api=editor which 为每个选择范围执行一个命令。 但我不知道为 args 输入什么 我认为命令的输入是“gotolinestart”,但我也不确定 我可以使用一个光标但不能用于多个光标的其他功能包括

editor.getSelection().selectLeft();
editor.navigateLeft(args.times);

任何在 ace 编辑器中处理多个光标和选择的函数示例都会非常有帮助。

【问题讨论】:

【参考方案1】:

文档中似乎有一个错误,应该是forEachSelection(exec:function, arg:any)

arg 可以是任何东西,它只是传递给 cmd.exec

也只有在有多个选择时才有效,所以你需要做类似的事情

if (editor.selection.rangeCount > 1)
    editor.forEachSelection(exec: function() 
        editor.editor.navigateLeft(10);
    )
 else
    editor.editor.navigateLeft(10);

另一种方法是使用 execCommand

editor.execCommand(
    exec:function() 
        editor.selection.selectLeft()
    ,
    multiSelectAction: "forEach"
)

【讨论】:

以上是关于在 Ace Editor 中对多个光标执行方法的主要内容,如果未能解决你的问题,请参考以下文章

ACE编辑器可以监听鼠标吗

获取 ace 编辑器的令牌字符串

codemirror - 获取光标下的当前单词

Vue 中往editor光标停留的位置添加元素

Gym 240084E - Correct Bracket Sequence Editor - [线段树]

WebStorm 设置光标位置不随意停靠