anchor.diff:  type VimMode =
       | NormalMode
       | VisualMode
  +    | VisualLineMode
       | InsertMode
   
   type CommandType =
  
positive.code:         | SwitchMode mode ->
              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; visualStartOffset = textEditorData.Caret.Offset }
              | InsertMode ->
                  textEditorData.Caret.Mode <- CaretMode.Insert
                  textEditorData.Caret.PreserveSelection <- false
                  { vimState with mode = mode; keys = [] }
          | _ -> vimState
  
  
negative.code:         | Selection -> 
              let selection = editor.Selections |> Seq.head
              selection.GetLeadOffset editor, selection.GetAnchorOffset editor
          | _ -> editor.Caret.Offset, editor.Caret.Offset
  
  type XSVim() =
      inherit TextEditorExtension()
      let setSelection vimState (editor:TextEditorData) start finish =
          match vimState.mode with
          | VisualMode ->
              let start = if finish > vimState.visualStartOffset then vimState.visualStartOffset+1 else vimState.visualStartOffset
              editor.SetSelection(start, finish)
          | VisualLineMode ->
              let startPos = Math.Min(finish, vimState.visualStartOffset)
              let endPos = Math.Max(finish, vimState.visualStartOffset)
              let startLine = editor.GetLineByOffset startPos
              let endLine = editor.GetLineByOffset endPos
              editor.SetSelection(startLine.Offset, endLine.EndOffsetIncludingDelimiter)
          | _ -> ()
  
      let runCommand vimState editor command =
          for i in [1..command.repeat] do
              let start, finish = VimHelpers.getRange editor command.textObject
              match command.commandType with
              | Move -> 
                  editor.Caret.Offset <- finish
                  setSelection vimState editor start finish
              | Delete ->
                  editor.SetSelection(start, finish)
                  ClipboardActions.Cut editor
              | Visual -> editor.SetSelection(start, finish)
              | Undo -> MiscActions.Undo editor
              | InsertLineBelow -> MiscActions.InsertNewLineAtEnd editor
              | InsertLineAbove -> editor.Caret.Column <- 1; MiscActions.InsertNewLine editor; CaretMoveActions.Up editor
              | _ -> ()
  
          match command.commandType with
  