anchor.diff:          | _ -> None
   
       let keys = ResizeArray<_>()
  -
  +    let mutable textEditorData = null
       let getCommand (repeat: int option) commandType textObject =
           Some { repeat=(match repeat with | Some r -> r | None -> 1); commandType=commandType; textObject=textObject }
   
  -    //let doOnce = getAction 1
  -    //let doTimes n = getAction n
  +    member x.RunCommand command =
  +        let start, finish = VimHelpers.getRange textEditorData command.textObject
  +        match command.commandType with
  +        | Move -> x.Editor.CaretOffset <- finish
  +        | _ -> ()
   
  -    override x.Initialize() = ()
  +    override x.Initialize() =
  +        textEditorData <- x.Editor.GetContent<ITextEditorDataProvider>().GetTextEditorData()
   
       override x.KeyPress(descriptor:KeyDescriptor) =
           if descriptor.KeyChar = 'q' then
  
positive.code:     | Select
      | Delete
      | Change
      | DoNothing
  
  type Repeater =
      | Repeat of int
  
  //type Motion =
    
  type TextObject =
      | Character
      | AWord
  
negative.code:             | Digit d1 :: Digit d2 :: Digit d3 :: t -> Some (d1 * 100 + d2 * 10 + d3), t
              | Digit d1 :: Digit d2 :: t -> Some (d1 * 10 + d2), t
              | Digit d :: t -> Some d,t
              | _ -> None, keyList
  
          let action =
              match keyList with
              | [ Movement m ] -> getCommand multiplier Move m
              | [ Action action; 'd' ] -> getCommand multiplier action WholeLine
              | [ Action action; 't'; c ] -> getCommand multiplier action (ToCharInclusive c)
              | [ Action action; 'f'; c ] -> getCommand multiplier action (ToCharExclusive c)
              | _ -> None
  