         # Skip is not activeEditor, important to skip auto-refresh on direct-edit.
         @refresh(force: true) if isActiveEditor(@providerEditor)
 
-      @disposables.add @providerEditor.onDidChangeCursorPosition =>
-        @syncToProviderEditor() if isActiveEditor(@providerEditor)
+      needToSyncToProviderEditor = (event) =>
+        isActiveEditor(@providerEditor) and
+          not event.textChanged and
+          event.oldBufferPosition.row isnt event.newBufferPosition.row
+
+      @disposables.add @providerEditor.onDidChangeCursorPosition (event) =>
+        if needToSyncToProviderEditor(event)
+          @syncToProviderEditor()
 
       @disposables.add @providerEditor.onDidDestroy(@destroy.bind(this))
 


  # vim-mode-plus integration
  autoChangeModeForVimState: (vimState) ->
    @disposables.add @onDidMoveToPrompt -> vimState.activate('insert') unless vimState.isMode('insert')
    @disposables.add @onDidMoveToItemArea -> vimState.activate('normal') if vimState.isMode('insert')

  observeCursorPositionChange: ->
    @editor.onDidChangeCursorPosition (event) =>
      return if @isLocked()

      {oldBufferPosition, newBufferPosition, textChanged, cursor} = event
      return if textChanged or
        (not cursor.selection.isEmpty()) or
