19.10 Other Search-and-Loop Commands
Here are some other commands that find matches for a regular
expression. They all ignore case in matching, if the pattern contains
no upper-case letters and case-fold-search is non-nil.
Aside from occur and its variants, all operate on the text from
point to the end of the buffer, or on the region if it is active.
- M-x multi-isearch-buffers
- Prompt for one or more buffer names, ending with <RET>; then,
begin a multi-buffer incremental search in those buffers. (If the
search fails in one buffer, the next C-s tries searching the
next specified buffer, and so forth.) With a prefix argument, prompt
for a regexp and begin a multi-buffer incremental search in buffers
matching that regexp.
- M-x multi-isearch-buffers-regexp
- This command is just like
multi-isearch-buffers, except it
performs an incremental regexp search.
- M-x occur
- Prompt for a regexp, and display a list showing each line in the
buffer that contains a match for it. To limit the search to part of
the buffer, narrow to that part (see Narrowing). A numeric
argument n specifies that n lines of context are to be
displayed before and after each matching line. Currently,
occur can not correctly handle multiline matches.
The buffer ‘*Occur*’ containing the output serves as a menu for
finding the occurrences in their original context. Click
Mouse-2 on an occurrence listed in ‘*Occur*’, or position
point there and type <RET>; this switches to the buffer that was
searched and moves point to the original of the chosen occurrence.
o and C-o display the match in another window; C-o
does not select it.
After using M-x occur, you can use next-error to visit
the occurrences found, one by one. Compilation Mode.
- M-s o
- Run
occur using the search string of the last incremental
string search. You can also run M-s o when an incremental
search is active; this uses the current search string.
- M-x list-matching-lines
- Synonym for M-x occur.
- M-x multi-occur
- This command is just like
occur, except it is able to search
through multiple buffers. It asks you to specify the buffer names one
by one.
- M-x multi-occur-in-matching-buffers
- This command is similar to
multi-occur, except the buffers to
search are specified by a regular expression that matches visited file
names. With a prefix argument, it uses the regular expression to
match buffer names instead.
- M-x how-many
- Prompt for a regexp, and print the number of matches for it in the
buffer after point. If the region is active, this operates on the
region instead.
- M-x flush-lines
- Prompt for a regexp, and delete each line that contains a match for
it, operating on the text after point. This command deletes the
current line if it contains a match starting after point. If the
region is active, it operates on the region instead; if a line
partially contained in the region contains a match entirely contained
in the region, it is deleted.
If a match is split across lines, flush-lines deletes all those
lines. It deletes the lines before starting to look for the next
match; hence, it ignores a match starting on the same line at which
another match ended.
- M-x keep-lines
- Prompt for a regexp, and delete each line that does not contain
a match for it, operating on the text after point. If point is not at
the beginning of a line, this command always keeps the current line.
If the region is active, the command operates on the region instead;
it never deletes lines that are only partially contained in the region
(a newline that ends a line counts as part of that line).
If a match is split across lines, this command keeps all those lines.