anchor.diff:              | Undo -> MiscActions.Undo editor
               | Redo -> MiscActions.Redo editor
               | JoinLines -> Vi.ViActions.Join editor
  +            | ReplaceChar c ->
  +                editor.SetSelection(editor.Caret.Offset, editor.Caret.Offset+1)
  +                editor.DeleteSelectedText true
  +                editor.InsertAtCaret c
  +                CaretMoveActions.Left editor
               | InsertLine Before -> MiscActions.InsertNewLineAtEnd editor
               | InsertLine After -> editor.Caret.Column <- 1; MiscActions.InsertNewLine editor; CaretMoveActions.Up editor
               | GoToDeclaration -> dispatch "MonoDevelop.Refactoring.RefactoryCommands.GotoDeclaration"
  
positive.code:             | NormalMode, [ "p" ] -> [ run (Put After) Nothing ]
              | NormalMode, [ "P" ] -> [ run (Put Before) Nothing ]
              | NormalMode, [ "J" ] -> [ run JoinLines Nothing ]
              | NormalMode, [ Action action; FindChar m; c ] -> [ run action (m c) ]
              | NormalMode, [ Action action; "i"; BlockDelimiter c ] -> [ run action (InnerBlock c) ]
              | NormalMode, [ Action action; "a"; BlockDelimiter c ] -> [ run action (ABlock c) ]
  
negative.code: 
      let (|Escape|_|) character =
          match character with
          | "<esc>" | "<C-c>" | "<C-[>" -> Some Escape
          | _ -> None
  
      let (|Keys|_|) (keys:string) =
  