anchor.diff:                  editor.LocationToOffset (new DocumentLocation(line, editor.Caret.Column))
               else
                   editor.Caret.Offset
  +        | EndOfLine ->
  +            let line = editor.GetLine editor.Caret.Line
  +            editor.Caret.Offset, line.EndOffset
  +        | StartOfLine ->
  +            let line = editor.GetLine editor.Caret.Line
  +            editor.Caret.Offset, line.Offset
  +        | FirstNonWhitespace ->
  +            let line = editor.GetLine editor.Caret.Line
  +            editor.Caret.Offset, line.Offset + editor.GetLineIndent(editor.Caret.Line).Length
           | _ -> 0,0
   
   type XSVim() =
  
positive.code:     | Down
      | Left
      | Right
      | ToCharInclusive of c:char
      | ToCharExclusive of c:char
      | WordForwards of c:char
  
negative.code:         else
              None
  
      let (|OneToNine|_|) character =
          if character > '1' && character < '9' then
              Some (CharUnicodeInfo.GetDecimalDigitValue character)
          else
              None
  
      let (|Movement|_|) character =
          match character with
          | 'h' -> Some Left
          | 'j' -> Some Down
          | 'k' -> Some Up
          | 'l' -> Some Right
          | '$' -> Some EndOfLine
          | '^' -> Some StartOfLine
          | '0' -> Some StartOfLine
          | '_' -> Some FirstNonWhitespace
          | _ -> None
  
      let (|Action|_|) character =
  