K.7.4 Query Replace
- M-% string RET newstring RET
- M-x query-replace RET string RET newstring RET
- Replace some occurrences of string with newstring.
- C-M-% regexp RET newstring RET
- M-x query-replace-regexp RET regexp RET newstring RET
- Replace some matches for regexp with newstring.
If you want to change only some of the occurrences of `foo' to
`bar', not all of them, then you cannot use an ordinary
replace-string. Instead, use M-% (
This command finds occurrences of `foo' one by one, displays each
occurrence and asks you whether to replace it. Aside from querying,
query-replace works just like
preserves case, like
case-replace is non-
nil, as it normally is. A numeric
argument means consider only occurrences that are bounded by
C-M-% performs regexp search and replace (
The characters you can type when you are shown a match for the string
or regexp are:
- to replace the occurrence with newstring.
- to skip to the next occurrence without replacing this one.
- , (Comma)
- to replace this occurrence and display the result. You are then asked
for another input character to say what to do next. Since the
replacement has already been made, DEL and SPC are
equivalent in this situation; both move to the next occurrence.
You can type C-r at this point (see below) to alter the replaced
text. You can also type C-x u to undo the replacement; this exits
query-replace, so if you want to do further replacement you
must use C-x ESC ESC RET to restart
(see section E.5 Repeating Minibuffer Commands).
- to exit without doing any more replacements.
- . (Period)
- to replace this occurrence and then exit without searching for more
- to replace all remaining occurrences without asking again.
- to go back to the position of the previous occurrence (or what used to
be an occurrence), in case you changed it by mistake. This works by
popping the mark ring. Only one ^ in a row is meaningful, because
only one previous replacement position is kept during
- to enter a recursive editing level, in case the occurrence needs to be
edited rather than just replaced with newstring. When you are
done, exit the recursive editing level with C-M-c to proceed to
the next occurrence. See section AC.26 Recursive Editing Levels.
- to delete the occurrence, and then enter a recursive editing level as in
C-r. Use the recursive edit to insert text to replace the deleted
occurrence of string. When done, exit the recursive editing level
with C-M-c to proceed to the next occurrence.
- to edit the replacement string in the minibuffer. When you exit the
minibuffer by typing RET, the minibuffer contents replace the
current occurrence of the pattern. They also become the new
replacement string for any further occurrences.
- to redisplay the screen. Then you must type another character to
specify what to do with this occurrence.
- to display a message summarizing these options. Then you must type
another character to specify what to do with this occurrence.
Some other characters are aliases for the ones listed above: y,
n and q are equivalent to SPC, DEL and
Aside from this, any other character exits the
and is then reread as part of a key sequence. Thus, if you type
C-k, it exits the
query-replace and then kills to end of
To restart a
query-replace once it is exited, use C-x
ESC ESC, which repeats the
query-replace because it
used the minibuffer to read its arguments. See section C-x ESC ESC.
See also AB.9 Transforming File Names in Dired, for Dired commands to rename,
copy, or link files by replacing regexp matches in file names.
This document was generated
on April 2, 2002