anchor.diff:              let halfwayDown = Math.Min(editor.Document.LineCount, editor.Caret.Line + visibleLineCount / 2)
               editor.Caret.Offset, editor.GetLine(halfwayDown).Offset
           | CurrentLocation -> editor.Caret.Offset, editor.Caret.Offset+1
  +        | Selection -> 
  +            let selection = editor.Selections |> Seq.head
  +            selection.GetLeadOffset editor, selection.GetAnchorOffset editor
           | _ -> 0,0
   
   type XSVim() =
  
positive.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 ]
  
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
  