       @vimState.submode is 'linewise'
 
   select: ->
+    canSelect = true
+    stopSelection = ->
+      canSelect = false
+
     @countTimes =>
-      for selection in @editor.getSelections()
-        @selectTextObject(selection)
+      for selection in @editor.getSelections() when canSelect
+        @selectTextObject(selection, stopSelection)
+    @editor.mergeIntersectingSelections()
     @updateSelectionProperties() if @isMode('visual')
+
+  selectTextObject: (selection, stopSelection) ->
+    range = @getRange(selection, stopSelection)
+    swrap(selection).setBufferRangeSafely(range)
+
+  getRange: ->
+    # I want to
+    # throw new Error('text-object must respond to range by getRange()!')
 
 # -------------------------
 class Word extends TextObject

  getRanges: (selection) ->
    (range for klass in @member when (range = @getRangeBy(klass, selection)))

  getNearestRange: (selection) ->
    ranges = @getRanges(selection)
    _.last(sortRanges(ranges)) if ranges.length

  selectTextObject: (selection) ->
    swrap(selection).setBufferRangeSafely @getNearestRange(selection)

class AAnyPair extends AnyPair
  @extend()

  @extend(false)
  getRange: ->
    @vimState.mark.getRange('[', ']')

class ALatestChange extends LatestChange
  @extend()
