Vim macros are a powerful thing — they let us record keystrokes and play them back later. These macros are recorded to named registers.
One thing I realised about them, is that they can be edited after they have been recorded. This is possible because macros “lives” in the register.
Say, for example, you record a macro of 20+ keystrokes, play it back, only to realize that there’s a single error in the steps. Re-recording the entire macro can be difficult. Instead, paste the contents of that register somewhere, edit it, and then yank it back to that same register.
For a simple example, let’s assume we want to add
* around words. We record it to the register
a by typing
^[ is the literal escape character):
Play it back with
@a and — oh no! that’s not a
*, that’s a
Vim macro editing to the rescue:
:new # to open a new split "ap # take the register named "a" and paste from it :%s/&/*/g # replace all & with * ^v$"ay # jump to start of line, visual mode, jump to end of line, take the named register "a" and yank to it
If we now play back the macro again with
@a, we see the
*s wrapping the word on which the cursor was, just what we wanted.