       if markerForTrackChange?
         @setMarkForChange(range) if (range = markerForTrackChange.getBufferRange())
 
+  # called by operationStack
+  setOperatorModifier: ({occurence, wise}) ->
+    if occurence? and @withOccurrence isnt occurence
+      @withOccurrence = occurence
+
+    if wise? and @forceWise isnt wise
+      @forceWise = wise
+
   # @target - TextObject or Motion to operate on.
   setTarget: (@target) ->
     unless _.isFunction(@target.select)
       @vimState.emitter.emit('did-fail-to-set-target')
       throw new OperatorError("#{@getName()} cannot set #{@target.getName()} as target")
     @target.setOperator(this)
+    @overrideTargetWise(@forceWise) if @forceWise?
     @emitDidSetTarget(this)
     this
 
-  forceWise: (wise) ->
+  overrideTargetWise: (wise) ->
     switch wise
       when 'characterwise'
         if @target.linewise

        @target.linewise = true

  isWithOccurrence: ->
    @vimState.getOperatorModifier('occurence') or @withOccurrence

  # Return true unless all selection is empty.
  # -------------------------
  selectTarget: ->
    @observeSelectAction()

    if @isMode('operator-pending') and wise = @vimState.getOperatorModifier('wise')
      @forceWise(wise)
    @emitWillSelectTarget()

    @target.select()

  finalMode: "normal"
  finalSubmode: null
  withOccurrence: false
  forceWise: null
  patternForOccurence: null

  setMarkForChange: (range) ->
