anchor.diff:              match mode with
               | NormalMode -> 
                   textEditorData.Caret.Mode <- CaretMode.Block
  +                textEditorData.Caret.PreserveSelection <- false
                   { vimState with mode = mode }
               | VisualMode -> 
                   textEditorData.Caret.Mode <- CaretMode.Block
  +                textEditorData.Caret.PreserveSelection <- true
                   { vimState with mode = mode }
               | InsertMode ->
                   textEditorData.Caret.Mode <- CaretMode.Insert
  +                textEditorData.Caret.PreserveSelection <- false
                   { vimState with mode = mode; keys = [] }
           | _ -> vimState
   
  
positive.code:             | NormalMode, [ Action action ] -> wait
              | NormalMode, [ "g"; "g" ] -> [ run Move StartOfDocument ]
              | NormalMode, [ "." ] -> [ run RepeatLastAction Nothing ]
              | NormalMode, [ "g"; "d" ] -> wait
              | NormalMode, [ ";" ] -> [ run RepeatLastFindCommand Nothing ]
  
              | NormalMode, [ _; _; _; _ ] -> [ run ResetKeys Nothing ]
              | _ -> []
          multiplier, action, newState
  
  
negative.code:         let action =
              match state.mode, keyList with
              | InsertMode, [ "<esc>" ] -> [ run (SwitchMode NormalMode) Nothing ]
              | VisualMode, [ "<esc>" ] -> [ run (SwitchMode NormalMode) Nothing ]
              | NormalMode, [ Movement m ] -> [ run Move m ]
              | VisualMode, [ Movement m ] -> [ run Move m ]
              | NormalMode, [ FindChar m; c ] -> [ run Move (m c) ]
              | NormalMode, [ ";" ] -> match state.findCharCommand with Some command -> [ command ] | None -> []
              | NormalMode, [ "c"; Movement m ] -> [ run Delete m; run (SwitchMode InsertMode) Nothing ]
  