     if @direction is 'down' # auto insert new linew at last row
       endRow = selection.getBufferRange().end.row
       if endRow >= getVimLastBufferRow(@editor)
-        eof = @editor.getEofBufferPosition()
-        @editor.setTextInBufferRange([eof, eof], "\n")
+        @insertTextAtPoint(@editor.getEofBufferPosition(), "\n")
 
     range = selection.getBufferRange().translate(translation...)
     selection.setBufferRange(range)

          when 'up', 'down'
            for blockwiseSelection in @vimState.getBlockwiseSelections()
              @duplicateCharacterwise(blockwiseSelection)

  setTextInRangeAndSelect: (range, text, selection) ->
    newRange = @editor.setTextInBufferRange(range, text)
    selection.setBufferRange(newRange)

  insertTextAtPointAndSelect: (point, text, selection) ->
    @setTextInRangeAndSelect([point, point], text, selection)

  insertTextAtPoint: (point, text) ->
    @editor.setTextInBufferRange([point, point], text)

  duplicateText: (selection, direction, count) ->
    rows = swrap(selection).lineTextForBufferRows()

  getSelectedTexts: ->
    @editor.getSelections().map((selection) -> selection.getText()).join("\n")

  insertTextAtPoint: (point, text) ->
    @editor.setTextInBufferRange([point, point], text)

  isOverwrite: ->
    atom.config.get('vim-mode-plus-move-selected-text.overwrite')

