]> code.delx.au - gnu-emacs/blobdiff - man/search.texi
Add a provide statement.
[gnu-emacs] / man / search.texi
index 6eafedf774982545652046cd6befafaeeafebfe0..2cc273fd4a463b58664556dda444576732b91f24 100644 (file)
@@ -1,5 +1,5 @@
 @c This is part of the Emacs manual.
-@c Copyright (C) 1985, 86, 87, 93, 94, 95, 97, 2000, 2001
+@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001, 2004
 @c   Free Software Foundation, Inc.
 @c See file emacs.texi for copying conditions.
 @node Search, Fixit, Display, Top
@@ -78,7 +78,7 @@ would exit the search and then move to the beginning of the line.
 @key{RET} is necessary only if the next command you want to type is a
 printing character, @key{DEL}, @key{RET}, or another character that is
 special within searches (@kbd{C-q}, @kbd{C-w}, @kbd{C-r}, @kbd{C-s},
-@kbd{C-y}, @kbd{M-y}, @kbd{M-r}, @kbd{M-s}, and some other
+@kbd{C-y}, @kbd{M-y}, @kbd{M-r}, @kbd{M-c}, @kbd{M-e}, and some other
 meta-characters).
 
   Sometimes you search for @samp{FOO} and find one, but not the one you
@@ -95,7 +95,9 @@ incremental search, and the second @kbd{C-s} means ``search again.''
   To reuse earlier search strings, use the @dfn{search ring}.  The
 commands @kbd{M-p} and @kbd{M-n} move through the ring to pick a search
 string to reuse.  These commands leave the selected search ring element
-in the minibuffer, where you can edit it.  Type @kbd{C-s} or @kbd{C-r}
+in the minibuffer, where you can edit it.  To edit the current search
+string in the minibuffer without replacing it with items from the
+search ring, type @kbd{M-e}.  Type @kbd{C-s} or @kbd{C-r}
 to terminate editing the string and search for it.
 
   If your string is not found at all, the echo area says @samp{Failing
@@ -181,7 +183,7 @@ a key runs a command (@code{isearch-backward}) to search backward.  A
 backward search finds matches that are entirely before the starting
 point, just as a forward search finds matches that begin after it.
 
-  The characters @kbd{C-y} and @kbd{C-w} can be used in incremental
+  The characters @kbd{C-w} and @kbd{C-y} can be used in incremental
 search to grab text from the buffer into the search string.  This
 makes it convenient to search for another occurrence of text at point.
 @kbd{C-w} copies the character or word after point as part of the
@@ -191,9 +193,19 @@ repeat the search will then search for a string including that
 character or word.
 
   @kbd{C-y} is similar to @kbd{C-w} but copies all the rest of the
-current line into the search string.  Both @kbd{C-y} and @kbd{C-w}
-convert the text they copy to lower case if the search is currently
-not case-sensitive; this is so the search remains case-insensitive.
+current line into the search string.  If point is already at the end
+of a line, it grabs the entire next line.  Both @kbd{C-y} and
+@kbd{C-w} convert the text they copy to lower case if the search is
+currently not case-sensitive; this is so the search remains
+case-insensitive.
+
+  @kbd{C-M-w} and @kbd{C-M-y} modify the search string by only one
+character at a time: @kbd{C-M-w} deletes the last character from the
+search string and @kbd{C-M-y} copies the character after point to the
+end of the search string.  An alternative method to add the character
+after point into the search string is to enter the minibuffer by
+@kbd{M-e} and to type @kbd{C-f} at the end of the search string in the
+minibuffer.
 
   The character @kbd{M-y} copies text from the kill ring into the search
 string.  It uses the same text that @kbd{C-y} as a command would yank.
@@ -205,6 +217,10 @@ string.  It uses the same text that @kbd{C-y} as a command would yank.
 there.  In Transient Mark mode, incremental search sets the mark without
 activating it, and does so only if the mark is not already active.
 
+  @kbd{M-%} typed in incremental search invokes @code{query-replace}
+or @code{query-replace-regexp} (depending on search mode) with the
+current search string used as the string to replace.
+
 @cindex lazy search highlighting
 @vindex isearch-lazy-highlight
   When you pause for a little while during incremental search, it
@@ -231,18 +247,18 @@ of bindings, look at the documentation of @code{isearch-mode} with
 
   Vertical scrolling during incremental search can be enabled by
 setting the customizable variable @code{isearch-allow-scroll} to a
-non-nil value.
+non-@code{nil} value.
 
   You can then use the vertical scroll-bar or certain keyboard
 commands such as @kbd{@key{PRIOR}} (@code{scroll-down}),
 @kbd{@key{NEXT}} (@code{scroll-up}) and @kbd{C-l} (@code{recenter})
 within the search, thus letting you see more of the text near the
 current match.  You must run these commands via their key sequences to
-stay in the search - typing M-x @var{comand-name} will always
+stay in the search---typing M-x @var{comand-name} will always
 terminate a search.
 
   You can give prefix arguments to these commands in the usual way.
-The current match cannot be scrolled out of the window - this is
+The current match cannot be scrolled out of the window---this is
 intentional.
 
   Several other commands, such as @kbd{C-x 2}
@@ -371,14 +387,16 @@ nonincremental ways to search for a match for a regexp.
 @kindex C-M-r
 @findex isearch-backward-regexp
   Incremental search for a regexp is done by typing @kbd{C-M-s}
-(@code{isearch-forward-regexp}), or by invoking @kbd{C-s} with a
-prefix argument (whose value does not matter).  This command reads a
+(@code{isearch-forward-regexp}), by invoking @kbd{C-s} with a
+prefix argument (whose value does not matter), or by typing @kbd{M-r}
+within a forward incremental search.  This command reads a
 search string incrementally just like @kbd{C-s}, but it treats the
 search string as a regexp rather than looking for an exact match
 against the text in the buffer.  Each time you add text to the search
 string, you make the regexp longer, and the new regexp is searched
 for.  To search backward for a regexp, use @kbd{C-M-r}
-(@code{isearch-backward-regexp}), or @kbd{C-r} with a prefix argument.
+(@code{isearch-backward-regexp}), @kbd{C-r} with a prefix argument,
+or @kbd{M-r} within a backward incremental search.
 
   All of the control characters that do special things within an
 ordinary incremental search have the same function in incremental regexp
@@ -417,7 +435,7 @@ Search}.
   This manual describes regular expression features that users
 typically want to use.  There are additional features that are
 mainly used in Lisp programs; see @ref{Regular Expressions,,,
-elisp, the same manual}.
+elisp, The Emacs Lisp Reference Manual}.
 
   Regular expressions have a syntax in which a few characters are
 special constructs and the rest are @dfn{ordinary}.  An ordinary
@@ -725,16 +743,16 @@ determines which characters these are.  @xref{Syntax}.
 matches any character that is not a word-constituent.
 
 @item \_<
-matches the empty string, but only at the beginning of a symbol.  A
-symbol is a sequence of one or more word or symbol constituent
-characters.  @samp{\_<} matches at the beginning of the buffer only if
-a symbol-constituent character follows.
+matches the empty string, but only at the beginning of a symbol.
+A symbol is a sequence of one or more symbol-constituent characters.
+A symbol-constituent character is a character whose syntax is either
+@samp{w} or @samp{_}.  @samp{\_<} matches at the beginning of the
+buffer only if a symbol-constituent character follows.
 
 @item \_>
-matches the empty string, but only at the end of a symbol.  A symbol
-is a sequence of one or more word or symbol constituent characters.
-@samp{\_>} matches at the end of the buffer only if the contents end
-with a symbol-constituent character.
+matches the empty string, but only at the end of a symbol.  @samp{\_>}
+matches at the end of the buffer only if the contents end with a
+symbol-constituent character.
 
 @item \s@var{c}
 matches any character whose syntax is @var{c}.  Here @var{c} is a
@@ -762,13 +780,13 @@ matches any character that does @emph{not} belong to category
   The constructs that pertain to words and syntax are controlled by the
 setting of the syntax table (@pxref{Syntax}).
 
-  Here is a complicated regexp, stored in @code{sentence-end} and used
-by Emacs to recognize the end of a sentence together with any
-whitespace that follows.  We show its Lisp syntax to distinguish the
-spaces from the tab characters.  In Lisp syntax, the string constant
-begins and ends with a double-quote.  @samp{\"} stands for a
-double-quote as part of the regexp, @samp{\\} for a backslash as part
-of the regexp, @samp{\t} for a tab, and @samp{\n} for a newline.
+  Here is a complicated regexp.  It is a simplified version of the
+regexp that Emacs uses, by default, to recognize the end of a sentence
+together with any whitespace that follows.  We show its Lisp syntax to
+distinguish the spaces from the tab characters.  In Lisp syntax, the
+string constant begins and ends with a double-quote.  @samp{\"} stands
+for a double-quote as part of the regexp, @samp{\\} for a backslash as
+part of the regexp, @samp{\t} for a tab, and @samp{\n} for a newline.
 
 @example
 "[.?!][]\"')]*\\($\\| $\\|\t\\|  \\)[ \t\n]*"
@@ -847,7 +865,7 @@ history matching commands (@pxref{Minibuffer History}).
 @vindex isearch-allow-scroll
 
 Scrolling, etc., during incremental search is enabled by setting the
-customizable variable @code{isearch-allow-scroll} to a non-nil value.
+customizable variable @code{isearch-allow-scroll} to a non-@code{nil} value.
 
 @c See Subject: Info file:  How do I get an itemized list without blank lines?
 @c Date: Sat, 12 Apr 2003 09:45:31 +0000  in gnu.emacs.help
@@ -893,7 +911,7 @@ For example:
 
 You should only thus configure commands which are ``safe'': i.e., they
 won't leave emacs in an inconsistent state when executed within a
-search - that is to say, the following things may be changed by a
+search---that is to say, the following things may be changed by a
 command only temporarily, and must be restored before the command
 finishes:
 
@@ -905,7 +923,8 @@ The buffer contents.
 @item
 The selected window and selected frame.
 @item
-The current match-data @xref{Match Data,,,elisp}.
+The current match-data.  @xref{Match Data,,, elisp, The Emacs Lisp
+Reference Manual}.
 @end enumerate
 
 Additionally, the command must not delete the current window and must
@@ -913,8 +932,8 @@ not itself attempt an incremental search.  It may, however, change the
 window's size, or create or delete other windows and frames.
 
 Note that an attempt by a command to scroll the text
-@emph{horizontally} won't work, although it will do no harm - any such
-scrolling will be overriden and nullified by the display code.
+@emph{horizontally} won't work, although it will do no harm---any such
+scrolling will be overridden and nullified by the display code.
 
 @node Replace, Other Repeating Search, Configuring Scrolling, Search
 @section Replacement Commands
@@ -925,7 +944,7 @@ scrolling will be overriden and nullified by the display code.
 
   Global search-and-replace operations are not needed often in Emacs,
 but they are available.  In addition to the simple @kbd{M-x
-replace-string} command which is like that found in most editors,
+replace-string} command which replaces all occurrences,
 there is a @kbd{M-x query-replace} command which finds each occurrence
 of the pattern and asks you whether to replace it.
 
@@ -993,13 +1012,15 @@ in your text.
 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 +1035,27 @@ M-x replace-regexp @key{RET} \(c[ad]+r\)-safe @key{RET} \1 @key{RET}
 @end example
 
 @noindent
-performs the inverse transformation.
-
-  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{\,}.
+performs the inverse transformation.  To include a @samp{\} in the
+text to replace with, you must enter @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 and converts it to text without quoting (if
+it's a string, this means using the string's contents), 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 goes with the symbol name, so the value replaces them
+both.
+
+  Inside such an expression, you can use some special sequences.
+@samp{\&} and @samp{\@var{n}} refer here, as usual, to the entire
+match as a string, and to a submatch as a string.  @var{n} may be
+multiple digits, 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}} to refer to those matches as numbers (this is valid
+when the match or submatch has the form of a numeral).  @samp{\#} here
+too 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,32 +1065,32 @@ M-x replace-regexp @key{RET} \(x\)\|y @key{RET}
 \,(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
+  For computing replacement strings for @samp{\,}, the @code{format}
+function is often useful (@pxref{Formatting Strings,,, elisp, The 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
 
 @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
+ask you to edit the replacement string in the minibuffer, putting
+point where the @samp{\?} was.  For example,
 
 @example
-M-x replace-regexp @key{RET} \footnote@{ @key{RET}
+M-x replace-regexp @key{RET} \\footnote@{ @key{RET}
 \&\\label@{fn:\#\?@} @key{RET}
 @end example
 
 @noindent
-will add labels starting with @samp{\label@{fn:0@}} to occurences of
+will add labels starting with @samp{\label@{fn:0@}} to occurrences 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
@@ -1257,6 +1288,9 @@ searched and moves point to the original of the chosen occurrence.
 @kbd{o} and @kbd{C-o} display the match in another window; @kbd{C-o}
 does not select it.
 
+Occur mode supports the @code{next-error} functionality described in
+in @ref{Compilation Mode}.
+
 @item M-x list-matching-lines
 Synonym for @kbd{M-x occur}.