anchor.diff:              | NormalMode, [ "g"; "g" ] -> [ run Move StartOfDocument ]
               | NormalMode, [ "." ] -> [ run RepeatLastAction Nothing ]
               | NormalMode, [ "g" ] -> wait
  +            | VisualMode, [ Movement m ] -> [ run Move m ]
  +            | VisualMode, [ ModeChange mode ] -> [ run (SwitchMode mode) Nothing ]
  +            | VisualMode, [ "<esc>" ] -> [ run (SwitchMode NormalMode) Nothing ]
  +            | VisualMode, [ "x" ] -> [ run Delete Selection; run (SwitchMode NormalMode) Nothing ]
  +            | VisualMode, [ "d" ] -> [ run Delete Selection; run (SwitchMode NormalMode) Nothing ]
  +            | VisualMode, [ "c" ] -> [ run Delete Selection; run (SwitchMode InsertMode) Nothing ]
               | _         , _ :: _ :: _ :: _ :: t -> [ run ResetKeys Nothing ]
               | _ -> []
           multiplier, action, newState
  
positive.code:             | VisualMode -> 
                  textEditorData.Caret.Mode <- CaretMode.Block
                  textEditorData.Caret.PreserveSelection <- true
                  { vimState with mode = mode }
              | InsertMode ->
                  textEditorData.Caret.Mode <- CaretMode.Insert
                  textEditorData.Caret.PreserveSelection <- false
  
negative.code:         for i in [1..command.repeat] do
              let start, finish = VimHelpers.getRange textEditorData command.textObject
              match command.commandType with
              | Move -> 
                  textEditorData.Caret.Offset <- finish
                  if vimState.mode = VisualMode then
                      let start = if finish > vimState.visualStartOffset then vimState.visualStartOffset+1 else vimState.visualStartOffset
                      textEditorData.SetSelection(start, finish)
              | Delete ->
                  textEditorData.SetSelection(start, finish)
                  ClipboardActions.Cut textEditorData
  