void (@NotNull Editor editor, int columnShift, int lineShift, boolean withSelection) { Rectangle visibleArea = getVisibleArea(editor); VisualPosition pos = editor.getCaretModel().getVisualPosition(); Point caretLocation = editor.visualPositionToXY(pos); int caretVShift = caretLocation.y - visibleArea.y; editor.getCaretModel().moveCaretRelatively(columnShift, lineShift, withSelection, false, false); VisualPosition caretPos = editor.getCaretModel().getVisualPosition(); Point caretLocation2 = editor.visualPositionToXY(caretPos); final boolean scrollToCaret = !(editor instanceof EditorImpl) || ((EditorImpl)editor).isScrollToCaret(); if (scrollToCaret) { editor.getScrollingModel().scrollVertically(caretLocation2.y - caretVShift); } }