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.