changeset 56251:651f09f1cac0

(Regexp Replace): Rewrite description of \# \, and \?.
author Richard M. Stallman <rms@gnu.org>
date Fri, 25 Jun 2004 21:27:55 +0000
parents b7af6a88f099
children f52c939b9d35
files man/search.texi
diffstat 1 files changed, 39 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/man/search.texi	Fri Jun 25 14:45:00 2004 +0000
+++ b/man/search.texi	Fri Jun 25 21:27:55 2004 +0000
@@ -993,13 +993,15 @@
 single string.  The similar command @kbd{M-x replace-regexp} replaces
 any match for a specified pattern.
 
-  In @code{replace-regexp}, the @var{newstring} need not be constant: it
-can refer to all or part of what is matched by the @var{regexp}.
-@samp{\&} in @var{newstring} stands for the entire match being replaced.
-@samp{\@var{d}} in @var{newstring}, where @var{d} is a digit, stands for
-whatever matched the @var{d}th parenthesized grouping in @var{regexp}.
-To include a @samp{\} in the text to replace with, you must enter
-@samp{\\}.  For example,
+  In @code{replace-regexp}, the @var{newstring} need not be constant:
+it can refer to all or part of what is matched by the @var{regexp}.
+@samp{\&} in @var{newstring} stands for the entire match being
+replaced.  @samp{\@var{d}} in @var{newstring}, where @var{d} is a
+digit, stands for whatever matched the @var{d}th parenthesized
+grouping in @var{regexp}.  @samp{\#} refers to the count of
+replacements already made in this command, as a decimal number.  In
+the first replacement, @samp{\#} stands for @samp{0}; in the second,
+for @samp{1}; and so on.  For example,
 
 @example
 M-x replace-regexp @key{RET} c[ad]+r @key{RET} \&-safe @key{RET}
@@ -1014,17 +1016,26 @@
 @end example
 
 @noindent
-performs the inverse transformation.
+performs the inverse transformation.  To include a @samp{\} in the
+text to replace with, you must enter @samp{\\}.
 
-  You can also use arbitrary Lisp expressions evaluated at replacement
-time by placing @samp{\,} before them in the replacement string.  Inside
-of those expressions, the symbols @samp{\&} and @samp{\@var{n}} refer to
-match and submatch strings like described above (though @var{n} may
-exceed 9 here, and you get @code{nil} if nothing matches).  @samp{\#&}
-and @samp{\#@var{n}} refer to those strings converted to numbers.
-@samp{\#} is short for @samp{replace-count}, the number of already
-completed replacements.  This particular shorthand can also be used
-outside of @samp{\,}.
+  You can also use Lisp expressions to calculate parts of the
+replacement string.  To do this, write @samp{\,} followed by the
+expression in the replacement string.  Each replacement calculates the
+value of the expression, which ought to be a string, and uses it in
+the replacement string in place of the expression itself.  If the
+expression is a symbol, one space in the replacement string after the
+symbol name counts as part of the symbol name, so the value replaces
+them both.
+
+  Inside such an expression, @samp{\&} and @samp{\@var{n}} used as
+subexpressions refer respectively to the entire match as a string, and
+to a submatch as a string.  @var{n} may exceed 9 here, and the value
+of @samp{\@var{n}} is @code{nil} if subexpression @var{n} did not
+match.  You can also use @samp{\#&} and @samp{\#@var{n}} refer to
+those matches converted to numbers (this is valid when the match or
+submatch has the form of a number).  @samp{\#} stands for the number
+of already-completed replacements.
 
   Repeating our example to exchange @samp{x} and @samp{y}, we can thus
 do it also this way:
@@ -1034,21 +1045,21 @@
 \,(if \1 "y" "x") @key{RET}
 @end example
 
-  One function that comes handy in Lisp replacements is @samp{format}
-(@pxref{Formatting Strings,,,elisp, GNU Emacs Lisp Reference Manual}).
-For example, to add consecutively numbered strings like @samp{ABC00042}
-to columns 73 @w{to 80} (unless they are already occupied), you can use
+  The @code{format} function (@pxref{Formatting Strings,,,elisp, GNU
+Emacs Lisp Reference Manual}) comes in handy for computing replacement
+strings for @samp{\,}.  For example, to add consecutively numbered
+strings like @samp{ABC00042} to columns 73 @w{to 80} (unless they are
+already occupied), you can use
 
 @example
 M-x replace-regexp @key{RET} ^.\@{0,72\@}$ @key{RET}
 \,(format "%-72sABC%05d" \& \#) @key{RET}
 @end example
 
-  Another feature you can use in the replacement string of Regexp
-commands is @samp{\?}.  In that case you will be allowed to edit the
-replacement string at the given position before the replacement gets
-performed.  Lisp style replacements are performed before @samp{\?} gets
-executed.  For example,
+  If you want to enter part of the replacement string by hand each
+time, use @samp{\?} in the replacement string.  Each replacement will
+enter a recursive edit, with point at the position where the @samp{\?}
+was.  For example,
 
 @example
 M-x replace-regexp @key{RET} \footnote@{ @key{RET}
@@ -1058,8 +1069,8 @@
 @noindent
 will add labels starting with @samp{\label@{fn:0@}} to occurences of
 @samp{\footnote@{}, but letting you edit each replacement before
-performing it.  If you want labels starting at 1, use @samp{\,(1+ \#)}
-instead of @samp{\#}.
+performing it.  To number the labels starting at 1, use @samp{\,(1+
+\#)} instead of @samp{\#}.
 
 @node Replacement and Case, Query Replace, Regexp Replace, Replace
 @subsection Replace Commands and Case