anchor.diff:                      state.keys @ ["<esc>"]
                   | _ -> state.keys
               | _ -> state.keys
  -        
  -        let multiplier, action = parseKeys { state with keys=newKeys }
  +        let newState = { state with keys=newKeys }
  +        let multiplier, action = parseKeys newState
           match multiplier, action with
           | _, Some action' when action'.commandType <> DoNothing->
               LoggingService.LogDebug (sprintf "%A %A" newKeys action')
               let newState = runCommand state editorData action'
               newState, true
  +        | _, Some action' ->
  +            newState, true
           | None, None ->
  -            state, false
  +            newState, false
           | _, _ -> 
               state, false
   
   
  -    // TODO: how can I make this not mutable??
  +    // TODO: how can I make this immutable??
       let mutable vimState = { keys=[]; mode=NormalMode; desiredColumn=0; findChar=None }
   
       override x.Initialize() =
  
positive.code:             | NormalMode, [ Movement m ] -> run Move m
              | NormalMode, [ FindChar m; c ] -> run Move (m c)
              | NormalMode, [ Action action; Movement m ] -> run action m
              | NormalMode, [ Action action; "d" ] -> run action WholeLine //TODO: this only applies for `dd`
              | NormalMode, [ Action action; FindChar m; c ] -> run action (m c)
              | NormalMode, [ Action action; "i"; BlockDelimiter c ] -> run action (InnerBlock c)
              | NormalMode, [ Action action; "a"; BlockDelimiter c ] -> run action (ABlock c)
  
negative.code:         | "^" -> Some StartOfLine
          | "0" -> Some StartOfLine
          | "_" -> Some FirstNonWhitespace
          | "w" -> Some WordForwards
          | "b" -> Some WordBackwards
          | "e" -> Some ForwardToEndOfWord
          | "E" -> Some BackwardToEndOfWord
          | _ -> None
  
      let (|FindChar|_|) character =
  