52 Recursive Editing Levels
A recursive edit is a situation in which you are using Emacs
commands to perform arbitrary editing while in the middle of another
Emacs command. For example, when you type C-r inside of a
query-replace, you enter a recursive edit in which you can change
the current buffer. On exiting from the recursive edit, you go back to
Exiting the recursive edit means returning to the unfinished
command, which continues execution. The command to exit is C-M-c
You can also abort the recursive edit. This is like exiting,
but also quits the unfinished command immediately. Use the command
abort-recursive-edit) to do this. See Quitting.
The mode line shows you when you are in a recursive edit by displaying
square brackets around the parentheses that always surround the major and
minor mode names. Every window's mode line shows this in the same way,
since being in a recursive edit is true of Emacs as a whole rather than
any particular window or buffer.
It is possible to be in recursive edits within recursive edits. For
example, after typing C-r in a
query-replace, you may type a
command that enters the debugger. This begins a recursive editing level
for the debugger, within the recursive editing level for C-r.
Mode lines display a pair of square brackets for each recursive editing
level currently in progress.
Exiting the inner recursive edit (such as with the debugger c
command) resumes the command running in the next level up. When that
command finishes, you can then use C-M-c to exit another recursive
editing level, and so on. Exiting applies to the innermost level only.
Aborting also gets out of only one level of recursive edit; it returns
immediately to the command level of the previous recursive edit. If you
wish, you can then abort the next recursive editing level.
Alternatively, the command M-x top-level aborts all levels of
recursive edits, returning immediately to the top-level command reader.
The text being edited inside the recursive edit need not be the same text
that you were editing at top level. It depends on what the recursive edit
is for. If the command that invokes the recursive edit selects a different
buffer first, that is the buffer you will edit recursively. In any case,
you can switch buffers within the recursive edit in the normal manner (as
long as the buffer-switching keys have not been rebound). You could
probably do all the rest of your editing inside the recursive edit,
visiting files and all. But this could have surprising effects (such as
stack overflow) from time to time. So remember to exit or abort the
recursive edit when you no longer need it.
In general, we try to minimize the use of recursive editing levels in
GNU Emacs. This is because they constrain you to “go back” in a
particular order—from the innermost level toward the top level. When
possible, we present different activities in separate buffers so that
you can switch between them as you please. Some commands switch to a
new major mode which provides a command to switch back. These
approaches give you more flexibility to go back to unfinished tasks in
the order you choose.