anchor.diff:                  ClipboardActions.Cut textEditorData
               | Visual -> textEditorData.SetSelection(start, finish)
               | Undo -> MiscActions.Undo textEditorData
  +
               | InsertLineBelow -> MiscActions.InsertNewLineAtEnd textEditorData
               | InsertLineAbove -> textEditorData.Caret.Column <- 1; MiscActions.InsertNewLine textEditorData; CaretMoveActions.Up textEditorData
               | _ -> ()
   
           match command.commandType with
  +        | ResetKeys -> { vimState with keys = [] }
           | SwitchMode mode ->
               match mode with
               | NormalMode -> 
  
positive.code:     mode: VimMode
      desiredColumn: int // If we move up/down, which column did we start at?
      findChar: char option
  }
  
  module VimHelpers =
  
negative.code:         let newState = { state with keys=newKeys }
          let multiplier, action = parseKeys newState
          LoggingService.LogDebug (sprintf "%A %A" multiplier action)
          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
          match multiplier, action with
          | _, [ a ] when a.commandType = RepeatLastAction ->
              performActions state.lastAction newState false
          | _, actions ->
              performActions actions { newState with lastAction = actions } false
  
      let mutable vimState = { keys=[]; mode=NormalMode; desiredColumn=0; findChar=None; lastAction=[] }
  
      override x.Initialize() =
          let editorData = x.Editor.GetContent<ITextEditorDataProvider>().GetTextEditorData()
  