   delete: (range) ->
     @change(range, '')
 
-  # Given a position, this clips it to a real position.
-  #
-  # For example, if `position`'s row exceeds the row count of the buffer,
-  # or if its column goes beyond a line's length, this "sanitizes" the value
-  # to a real position.
-  #
-  # Returns the new, clipped {Point}. Note that this could be the same as `position` if no clipping was performed.
-  clipPosition: (position) -> super
-
-  # Given a range, this clips it to a real range.
-  #
-  # For example, if `range`'s row exceeds the row count of the buffer,
-  # or if its column goes beyond a line's length, this "sanitizes" the value
-  # to a real range.
-  #
-  # range - The {Range} to clip
-  #
-  # Returns the new, clipped {Range}. Note that this could be the same as `range` if no clipping was performed.
-  clipRange: (range) ->
-    range = Range.fromObject(range)
-    new Range(@clipPosition(range.start), @clipPosition(range.end))
-
-  undo: -> super
-
-  redo: -> super
-
   # Saves the buffer.
   save: ->
     @saveAs(@getPath()) if @isModified()

    else
      new Range([row, 0], [row, @lineLengthForRow(row)])

  # Gets the number of lines in a file.
  #
  # Returns a {Number}.
  getLineCount: -> super

  # Gets the row number of the last line.
  #
  # Returns a {Number}.
  getLastRow: -> super

  # Finds the last line in the current buffer.
  #
  # Returns a {String}.

    lastRow = @getLastRow()
    new Range([0, 0], [lastRow, @lineLengthForRow(lastRow)])

  suggestedLineEndingForRow: (row) ->
    if row is @getLastRow()
      @lineEndingForRow(row - 1)
    else
      @lineEndingForRow(row)

  # Given a row, returns the length of the line ending
  #
