Next: Search Customizations, Previous: Replace, Up: Search [Contents][Index]

### 15.11 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 multi-isearch-files`

  Prompt for one or more file names, ending with `RET`; then, begin a multi-file incremental search in those files. (If the search fails in one file, the next `C-s` tries searching the next specified file, and so forth.) With a prefix argument, prompt for a regexp and begin a multi-file incremental search in files matching that regexp.

`M-x multi-isearch-files-regexp`

  This command is just like `multi-isearch-files`, except it performs an incremental regexp search.

  In some modes that set the buffer-local variable `multi-isearch-next-buffer-function` (e.g., in Change Log mode) a multi-file incremental search is activated automatically.

`M-x occur`

  Prompt for a regexp, and display a list showing each line in the buffer that contains a match for it. The text that matched is highlighted using the `match` face. 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. The default number of context lines is specified by the variable `list-matching-lines-default-context-lines`.

  In the `*Occur*` buffer, you can click on each entry, or move point there and type `RET`, to visit the corresponding position in the buffer that was searched. `o` and `C-o` display the match in another window; `C-o` does not select it. Alternatively, you can use the `C-x `` (`next-error`) command to visit the occurrences one by one (see Compilation Mode).

  Typing `e` in the `*Occur*` buffer switches to Occur Edit mode, in which edits made to the entries are also applied to the text in the originating buffer. Type `C-c C-c` to return to Occur mode.

  The command `M-x list-matching-lines` is a synonym for `M-x occur`.

`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 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.

Next: Search Customizations, Previous: Replace, Up: Search [Contents][Index]