ErgoEmacsEmacsLispBlogEmacsLispBuy Tutorial
Web Hosting by 1&1

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.

blog comments powered by Disqus