anchor.diff:      | Redo
       | JoinLines
       | InsertLine of BeforeOrAfter
  +    | ReplaceChar of string
       | ResetKeys
       | NextTab
       | PreviousTab
  
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:             | 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"
  