diff --git a/src/search/FindReplace.js b/src/search/FindReplace.js
index <HASH>..<HASH> 100644
--- a/src/search/FindReplace.js
+++ b/src/search/FindReplace.js
@@ -720,11 +720,13 @@ define(function (require, exports, module) {
         this._panel.$panel
             .off(".replaceAll")
             .on("click.replaceAll", ".replace-checked", function (e) {
-                self.matches.reverse().forEach(function (match) {
-                    if (match.isChecked) {
-                        var rw = typeof self.replaceWhat === "string" ? self.replaceWith : FindUtils.parseDollars(self.replaceWith, match.result);
-                        self.editor.document.replaceRange(rw, match.start, match.end, "+replaceAll");
-                    }
+                self.editor.document.batchOperation(function () {
+                    self.matches.reverse().forEach(function (match) {
+                        if (match.isChecked) {
+                            var rw = typeof self.replaceWhat === "string" ? self.replaceWith : FindUtils.parseDollars(self.replaceWith, match.result);
+                            self.editor.document.replaceRange(rw, match.start, match.end);
+                        }
+                    });
                 });
                 self.hideResults();
             });
Use batchOperation() instead of edit op merging for replace all

Logically, this is a single operation, not a set of merged adjacent
operations, and we wouldn't want a second replaceAll done immediately
afterward to merge with it (though it would be difficult to get into that
case).