diff --git a/src/display/operations.js b/src/display/operations.js
index 6c4a0e139252fe882876acdb60e2b8827cae903c..e18fd084c9765feabd0519450f5cefa8478caba2 100644
--- a/src/display/operations.js
+++ b/src/display/operations.js
@@ -6,7 +6,6 @@ import { activeElt } from "../util/dom"
 import { finishOperation, pushOperation } from "../util/operation_group"
 
 import { ensureFocus } from "./focus"
-import { alignHorizontally } from "./line_numbers"
 import { measureForScrollbars, updateScrollbars } from "./scrollbars"
 import { setScrollLeft } from "./scroll_events"
 import { restartBlink } from "./selection"
@@ -147,12 +146,7 @@ function endOperation_finish(op) {
     display.scrollbars.setScrollTop(doc.scrollTop)
     display.scroller.scrollTop = doc.scrollTop
   }
-  if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) {
-    doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, op.scrollLeft))
-    display.scrollbars.setScrollLeft(doc.scrollLeft)
-    display.scroller.scrollLeft = doc.scrollLeft
-    alignHorizontally(cm)
-  }
+  if (op.scrollLeft != null) setScrollLeft(cm, op.scrollLeft, true, true)
   // If we need to scroll a specific position into view, do so.
   if (op.scrollToPos) {
     let rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),
diff --git a/src/display/scroll_events.js b/src/display/scroll_events.js
index e85d2a02fd34f6d23417b5ef6bac7f3c9994c38f..38d91441c0a28f8c079b33b5d934c22820073d0e 100644
--- a/src/display/scroll_events.js
+++ b/src/display/scroll_events.js
@@ -18,8 +18,8 @@ export function setScrollTop(cm, val) {
 }
 // Sync scroller and scrollbar, ensure the gutter elements are
 // aligned.
-export function setScrollLeft(cm, val, isScroller) {
-  if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) return
+export function setScrollLeft(cm, val, isScroller, forceScroll) {
+  if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) return
   val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth)
   cm.doc.scrollLeft = val
   alignHorizontally(cm)