2.4 Macros and Registers

Viper facilitates the use of Emacs-style keyboard macros. @# will
start a macro definition. As you type, the commands will be executed, and
remembered (This is called “learn mode” in some editors.)
@register will complete the macro, putting it into ‘register’,
where ‘register’ is any character from ‘a’ through ‘z’. Then
you can execute this macro using @register. It is, of course,
possible to yank some text into a register and execute it using
@register. Typing @@, @RET, or @C-j will
execute the last macro that was executed using @register.

Viper will automatically lowercase the register, so that pressing the
SHIFT key for @ will not create problems. This is for
@ macros and "ponly. In the case of y,
"Ayy will append to register a. For [,],',`, it
is an error to use a Uppercase register name.

The contents of a register can be seen by ]register. ([textmarker
will show the contents of a textmarker).

The last keyboard macro can also be executed using
*, and it can be yanked into a register using @!register.
This is useful for Emacs style keyboard macros defined using C-x(
and C-x). Emacs keyboard macros have more capabilities.
See Keyboard Macros in The GNU Emacs Manual, for
details.

Keyboard Macros allow an interesting form of Query-Replace:
/pattern or n to go to the next pattern (the query), followed by a
Keyboard Macro execution @@ (the replace).