diff --git a/lib/buffer-search.js b/lib/buffer-search.js index daa7e405..02b699d0 100644 --- a/lib/buffer-search.js +++ b/lib/buffer-search.js @@ -95,17 +95,27 @@ class BufferSearch { replacePattern = escapeHelper.unescapeEscapeSequence(replacePattern); } + const replacementChunks = []; + const text = this.editor.getText(); + const buffer = this.editor.getBuffer(); + + let end = 0; + for (let i = 0, n = markers.length; i < n; i++) { - const marker = markers[i] + const marker = markers[i]; const bufferRange = marker.getBufferRange(); - const replacementText = findRegex ? - this.editor.getTextInBufferRange(bufferRange).replace(findRegex, replacePattern) : - replacePattern; - this.editor.setTextInBufferRange(bufferRange, replacementText); + const start = buffer.characterIndexForPosition(bufferRange.start); + replacementChunks.push(text.substring(end, start)); + end = buffer.characterIndexForPosition(bufferRange.end); + replacementChunks.push(findRegex ? + text.substring(start, end).replace(findRegex, replacePattern) + : replacePattern); marker.destroy(); this.markers.splice(this.markers.indexOf(marker), 1); } + replacementChunks.push(text.substring(end)); + this.editor.setText(replacementChunks.join('')); }); return this.emitter.emit('did-update', this.markers.slice());