在不选择整个编辑器的情况下为 ace 编辑器设置值

Posted

技术标签:

【中文标题】在不选择整个编辑器的情况下为 ace 编辑器设置值【英文标题】:Set Value for ace editor without selecting the whole editor 【发布时间】:2013-09-07 23:31:10 【问题描述】:

所以你可以用setValue设置一个ace编辑器的值,但是在设置值之后,编辑器会选择编辑器的整个值。你如何禁用它?这意味着当我将 ace 编辑器的值设置为 Hello world 时,它不会突出显示 Hello world

【问题讨论】:

【参考方案1】:

setValue后可以使用第二个参数控制光标位置

editor.setValue(str, -1) // moves cursor to the start
editor.setValue(str, 1) // moves cursor to the end

【讨论】:

这个答案现在已经过时了。自 2013 年以来,Ace 发生了变化。请参阅 Danial 的回答:***.com/a/65754932/8910547 这在 2022 年依然正确!!!【参考方案2】:

您甚至可以在执行 setValue() 后使用 clearSelection();

editor.setValue("Hello World");
editor.clearSelection(); // This will remove the highlight over the text

【讨论】:

这不再是设置编辑器内容的正确方法。见丹尼尔的回答:***.com/a/65754932/8910547 @Inigo 为什么不是正确的方法? Ace's own documentation 仍然有 editor.setValue() 作为设置编辑器内容的第一个选项。【参考方案3】:

这对我有用!

editor.setValue(editor.getValue(), 1);

【讨论】:

【参考方案4】:

我不确定 editor.setValue() 是否是过去的遗留物还是什么,但设置编辑器内容的正确方法是

editor.session.setValue(text);

editor.getSession().setValue(text);

这不会选择文本,因此无需执行此页面上提到的任何操作。

editor.setValue() 明确选择所有(并忘记取消选择它);但没有理由使用它。

【讨论】:

好吧,Ace's own documentation 仍然说要使用editor.setValue() 来设置内容。它还说使用editor.getSession().setValue() 设置一个值并重置撤消历史记录,仅此而已。 文档是最好的计划。事实是 editor.setValue() 是一个调用 session.setValue() 并执行许多其他操作的函数。 session函数是原始函数【参考方案5】:

我也遇到了同样的问题。

即使您可以将第二个参数设置为 1-1,我认为您也应该检查一下:https://ace.c9.io/api/editor.html#Editor.setValue

Editor.setWrapBehavioursEnabled(Boolean enabled)

在创建编辑器后立即使用它。

这对我来说非常有效。 此方法与a user 分享的方法的区别在于插入符号的位置没有改变,您可以使用Editor.selection.moveTo(row, column) 自己移动它,这样用户在使用例如CTRL时不会遇到奇怪的插入符号位置变化+Z 撤消操作:)

【讨论】:

这个答案不清楚,你的意思是说在编辑器初始化之后用某个值调用Editor.setWrapBehavioursEnabled(Boolean enabled)会阻止调用editor.setValue时所有文本被选中吗?【参考方案6】:
 var prevtext = $("#editor").val();
 prevtext = prevtext + "<br/>";
 $("#editor").val(prevtext).blur();

【讨论】:

以上是关于在不选择整个编辑器的情况下为 ace 编辑器设置值的主要内容,如果未能解决你的问题,请参考以下文章

如何在不覆盖先前值的情况下为同一个键设置多个值?

ace编辑器如何设置焦点?

如何在不丢失现有值的情况下编辑复选框

如何在不重新启动 apache 的情况下为站点重新加载 apache 配置?

是否可以在不刷新定制器编辑窗口的情况下更改值?

Ace 编辑器暂停/禁用 UndoManager