anchor.diff:              | _, _ -> editor.Caret.Offset, editor.Caret.Offset
           | ABlock (startChar, endChar) ->
               match findCharRange editor startChar endChar with
  -            | Some start, Some finish -> start, finish+1
  +            | Some start, Some finish when finish < editor.Text.Length -> start, finish+1
               | _, _ -> editor.Caret.Offset, editor.Caret.Offset
           | _ -> 0,0
   
  
positive.code:         | StartOfLine -> editor.Caret.Offset, line.Offset
          | FirstNonWhitespace -> editor.Caret.Offset, line.Offset + editor.GetLineIndent(editor.Caret.Line).Length
          | WholeLine -> line.Offset, line.EndOffset
          | ToCharInclusive c ->
              match findCharForwardsOnLine editor line c with
              | Some index -> editor.Caret.Offset, index+1
              | None -> editor.Caret.Offset, editor.Caret.Offset
          | ToCharExclusive c ->
              match findCharForwardsOnLine editor line c with
  
negative.code:         | '_' -> Some FirstNonWhitespace
          | _ -> None
  
      let (|FindChar|_|) character =
          match character with
          | 'f' -> Some ToCharInclusive
          | 'F' -> Some FindCharBackwards
          | 't' -> Some ToCharExclusive
          //| 'T' -> Some Right
          | _ -> None
  
      let (|Action|_|) character =
          match character with
          | 'd' -> Some Delete
          | 'c' -> Some Change
          | 'v' -> Some Visual
          //| 'v' -> Some FindForwards
          | _ -> None
  
      let keys = ResizeArray<_>()
      let mutable textEditorData = Unchecked.defaultof<TextEditorData>
      let getCommand (repeat: int option) commandType textObject =
          Some { repeat=(match repeat with | Some r -> r | None -> 1); commandType=commandType; textObject=textObject }
  
  