Next: , Previous: Compilation Shell, Up: Building


32.4 Searching with Grep under Emacs

Just as you can run a compiler from Emacs and then visit the lines with compilation errors, you can also run grep and then visit the lines on which matches were found. This works by treating the matches reported by grep as if they were “errors.”

M-x grep
Run grep asynchronously under Emacs, with matching lines listed in the buffer named ‘*grep*’.
M-x grep-find
M-x find-grep
Run grep via find, with user-specified arguments, and collect output in the buffer named ‘*grep*’.
M-x kill-grep
Kill the running grep subprocess.

To run grep, type M-x grep, then enter a command line that specifies how to run grep. Use the same arguments you would give grep when running it normally: a grep-style regexp (usually in single-quotes to quote the shell's special characters) followed by file names, which may use wildcards. If you specify a prefix argument for M-x grep, it figures out the tag (see Tags) around point, and puts that into the default grep command.

The output from grep goes in the ‘*grep*’ buffer. You can find the corresponding lines in the original files using C-x `, <RET>, and so forth, just like compilation errors.

Some grep programs accept a ‘--color’ option to output special markers around matches for the purpose of highlighting. You can make use of this feature by setting grep-highlight-matches to t. When displaying a match in the source buffer, the exact match will be highlighted, instead of the entire source line.

The command M-x grep-find (also available as M-x find-grep) is similar to M-x grep, but it supplies a different initial default for the command—one that runs both find and grep, so as to search every file in a directory tree. See also the find-grep-dired command, in Dired and Find.