anchor.diff:              let visibleLineCount = getVisibleLineCount editor
               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
           | _ -> 0,0
   
   type XSVim() =
  
positive.code:     | Nothing
      | HalfPageUp
      | HalfPageDown
  
  type VimAction = {
      repeat: int
  
negative.code:             | NormalMode, [ "c"; "c" ] -> [ run Delete WholeLine; run (SwitchMode InsertMode) Nothing ]
              | NormalMode, [ "C" ] -> [ run Delete EndOfLine; run (SwitchMode InsertMode) Nothing ]
              | NormalMode, [ "D" ] -> [ run Delete EndOfLine ]
              | NormalMode, [ "x" ] -> [ run Delete CurrentLocation ]
              | NormalMode, [ Action action; FindChar m; c ] -> [ run action (m c) ]
              | NormalMode, [ Action action; "i"; BlockDelimiter c ] -> [ run action (InnerBlock c) ]
              | NormalMode, [ ModeChange mode ] -> [ run (SwitchMode mode) Nothing ]
              | VisualMode, [ ModeChange mode ] -> [ run (SwitchMode mode) Nothing ]
              | NormalMode, [ "a" ] -> [ run Move Right; run (SwitchMode InsertMode) Nothing ]
              | NormalMode, [ "A" ] -> [ run Move EndOfLine; run (SwitchMode InsertMode) Nothing ]
              | NormalMode, [ "o" ] -> [ run InsertLineBelow Nothing; run (SwitchMode InsertMode) Nothing ]
  