So my affair with Vim continues - and I seem to have discovered VIM’s macro super powers. The obvious next step is to shout from the rooftops and hence this blog post (and there’s hardly anything original - apart from the fact that I’ve just had a 'aha' moment when it comes to macros and thought it might help other budding vimmers out there…
A little primer - Macros let you repeat a set of commands. The way to go
about it is to press q<macro_letter>
where <macro_letter>
is between
lowercase a-z. This starts recording a macro in Vim (and you see a
recording
message at the bottom). Now hit commands you want to repeat
later and press q
when done to finish recording. VIM records all the
keystrokes you enter in the register you specified as the macro name. To
now execute the macro, position the macro on the line and then hit
@<macro_letter>
and Vim will faithfully replay your commands.
Its a great time saver - especially for complex editing tasks where search/replace doesn’t cut it. But, if you’re feeling a dissappointed after coming this far (after all, I promised a aha moment), then hang on.
Today’s discovery was that you can edit macros that you’ve recorded
quite easily and save them back!!! THIS IS HUGE. Why so? Because
when you record a macro, its quite normal to jump around quite a bit or
get one or two keystrokes wrong. In fact, its for this reason that I
could never use Emacs’s macro facility and failed to just 'get it'.
However, in VIM, you could just open a scratch pad editor and hit
"<macro_letter>p
- that’s double quote-letter-p to paste the contents
of register containing your macro. You see your macro keystrokes - so go
ahead and edit them and then use "<register>y<movement>
to save your
edits back to the register. You can now execute the macro with a
@<macro_letter>
as if that’s the way it was recorded in the first
place.
Another obvious tip - you can execute
the contents of any register as
if it were a macro with a @. Not sure when that could be helpful - but
knowing that its possible is good.