       @items.selectItem(item)
       @moveToSelectedItem(ignoreCursorMove: false)
 
+  moveToNextFileItem: ->
+    @moveToDifferentFileItem('next')
+
+  moveToPreviousFileItem: ->
+    @moveToDifferentFileItem('previous')
+
   moveToPromptOrSelectedItem: ->
-    row = @items.getRowForSelectedItem()
-    if (row is @editor.getCursorBufferPosition().row) or not (row >= 0)
+    if @isAtSelectedItem()
       @moveToPrompt()
     else
-      # move to current item
-      @editor.setCursorBufferPosition([row, 0])
+      @moveToBeginningOfSelectedItem()
+
+  moveToBeginningOfSelectedItem: ->
+    @editor.setCursorBufferPosition(@items.getFirstPositionForSelectedItem())
 
   moveToPrompt: ->
     @withIgnoreCursorMove =>
       @editor.setCursorBufferPosition(@getPromptRange().end)
       @setReadOnly(false)
       @emitDidMoveToPrompt()
+  # -------------------------
 
   isPromptRow: (row) ->
     row is 0

      if @items.hasNormalItem()
        if (not selectFirstItem) and item = @items.findItem(oldSelectedItem)
          @items.selectItem(item)
          if wasCursorSyncWithSelectedItem
            @moveToSelectedItem(ignoreCursorMove: not @isActive())
            row = @editor.getCursorBufferPosition().row
            @editor.setCursorBufferPosition([row, oldColumn])

        @highlighter.flashItem(editor, item) if flash
        @emitDidConfirm({editor, item})

  # Cursor move and position status
  # ------------------------------
  isAtSelectedItem: ->
    @editor.getCursorBufferPosition().row is @items.getRowForSelectedItem()

  moveToDifferentFileItem: (direction) ->
    unless @isAtSelectedItem()
      @moveToSelectedItem(ignoreCursorMove: false)
      return

