Eclipse JFace:如何将我的文档中的多项更改视为历史记录中的一项更改?

Eclipse JFace : how to make several changes in my document considered as one single change in the history?

我有一个命令通过调用 IDocument#replace(int offset, int length, String text) 方法在文档中执行多项更改。 它工作正常。

问题是每个更改都是操作历史记录中的一个条目。所以当我撤消命令时,我所有的更改都被一一撤消。例如,如果我的命令进行了 40 次更改,我必须按 CTRL+Z 40 次才能完全反转操作并回到初始状态。

为避免这种情况,我一次替换了所有文档内容,但是当我撤消时,所有编辑器的内容都被选中并滚动到底部。它更方便但不够优雅。

所需的行为与 Eclipse 的 Java 编辑器中的 "Refactor > rename" 相同。在视觉上,很容易跟踪 Undo/redo 操作期间的所有更改。

是否有使用 IDocument API 执行此类任务的简单方法,或者我是否必须使用可能更复杂的 Undo/Redo Eclipse 框架?

谢谢。

您可以使用具有 beginCompoundChange()endCompoundChange() 方法的 IRewriteTarget

使用

从编辑器获取目标
IRewriteTarget target = editor.getAdapter(IRewriteTarget.class);

如果您有 TextViewer(或 SourceViewer)呼叫 TextViewer.getRewriteTarget()