 class PreviousSelection extends TextObject
   @extend()
   wise: null
-
-  select: ->
+  selectOnce: true
+
+  selectTextObject: (selection) ->
     {properties, submode} = @vimState.previousSelection
     if properties? and submode?
-      @selectSucceeded = true
       @wise = submode
       selection = @editor.getLastSelection()
       swrap(selection).selectByProperties(properties, keepGoalColumn: false)
+      return true
 
 class PersistentSelection extends TextObject
   @extend(false)
   wise: null
 
-  select: ->
-    {persistentSelection} = @vimState
-    unless persistentSelection.isEmpty()
-      persistentSelection.setSelectedBufferRanges()
-      @selectSucceeded = true
-      @wise = swrap.detectWise(@editor)
+  selectTextObject: (selection) ->
+    if @vimState.hasPersistentSelections()
+      @vimState.persistentSelection.setSelectedBufferRanges()
+      return true
 class APersistentSelection extends PersistentSelection
   @extend()
 class InnerPersistentSelection extends PersistentSelection

    if range = @getRange(selection)
      swrap(selection).setBufferRange(range, {reversed: @reversed ? @backward})
      selection.cursor.autoscroll()
      true
    else
      false
class SearchMatchBackward extends SearchMatchForward
  @extend()
  backward: true

      # Prevent autoscroll to closing char on `change-surround-any-pair`.
      autoscroll = selection.isLastSelection() and not @operator.supportEarlySelect
      swrap(selection).setBufferRange(range, {autoscroll})
      return true

  # to override
  getRange: ->
