6.2. Tips for Creating Good Macros
It's easy to learn how to record and
reuse your keystrokes. However, when
you're starting out, you make a few mistakes: you
create a macro, use it, and then find out that it
doesn't do exactly what you thought. With a little
care, it's easy to make your macros more useful and
less vulnerable to mistakes.
Good macros work in all situations. Therefore, within a macro, you
should use commands that are absolute rather than relative. For
example, if you write a macro that puts a formatting string around
the word the cursor is on, you want the macro to work no matter how
long the word is. Therefore, you would use an absolute command such
as M-f (for forward-word) rather than a few C-fs to move forward one character at a time.
Similarly, commands such as C-e and
C-a are good for finding the
beginning or end of a line rather than moving the cursor forward or
backward.
Often, macros start with a search command that brings you to the
place in the file you want the macro to start. It's
a good idea to type the search argument (as in C-s searchstring)
rather than using the command to repeat the last search (C-s C-s). You may have changed the search
string between the time you define the macro and the time you execute
it, and C-s C-s remembers only what
the last search string was.
It is often a good idea to add extra commands (typically C-a and C-e)
that aren't strictly necessary, just to make sure
that you're positioned correctly on the line. The
fewer assumptions that a macro makes, the better it works. So, if a
sequence of commands works correctly only if you start at the end of
the line, start the macro with C-e,
even if you already "know" that you
want to give the command only when you're at the end
of the line.
Finally, while we're reciting rules and cautions,
here's one more: keep in mind that you probably want
to execute macros repeatedly. With a little foresight,
you'll be able to create macros that can be executed
in long chains without problems.
In general, good macros have three parts:
They find the place you want the macro to start working (often using
search). They do the work that needs to be done on the text. They prepare themselves to repeat.
How can a macro prepare itself to repeat? For example, assume that
you're writing a macro to delete the third column of
a table. After deleting the column, the macro should position itself
at the beginning of the next line (or wherever it needs to be) so you
don't have to reposition the cursor before reusing
it.
Here's a slightly more complex example. If you start
a macro with a search, you have to make sure that the end of the
macro moves the cursor past the last spot you searched for. If you
don't, the macro will keep finding the same place in
the file and never go on to the next occurrence of what
you're searching for. As a general rule, if your
macro operates on a line of text, it should end by moving to the
beginning of the next line. Remember that your goal is to create a
sequence of keystrokes that can be executed many times in a row, with
no interruption.
|