anchor.diff:      | Undo
       | InsertLineAbove
       | InsertLineBelow
  +    | RepeatLastAction
  +    | ResetKeys
       | DoNothing
   
   type TextObject =
  
positive.code:         let newState = { state with keys=newKeys }
          let multiplier, action = parseKeys newState
          LoggingService.LogDebug (sprintf "%A %A" multiplier action)
          match multiplier, action with
          | _, actions ->
              let rec performActions actions' state handled =
                  match actions' with
                  | [] -> state, handled
                  | h::t ->
  
                      if h.commandType <> DoNothing then
                          let newState = runCommand state editorData h
                          performActions t { newState with keys = [] } true
                      else 
                          newState, true
              performActions actions newState false
  
      let mutable vimState = { keys=[]; mode=NormalMode; desiredColumn=0; findChar=None }
  
      override x.Initialize() =
          let editorData = x.Editor.GetContent<ITextEditorDataProvider>().GetTextEditorData()
  
negative.code:     mode: VimMode
      desiredColumn: int // If we move up/down, which column did we start at?
      findChar: char option
      lastAction: VimAction list // used by . command to repeat the last action
  }
  
  module VimHelpers =
  