VIM macro super powers

· Read in about 2 min · (370 words) ·

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.