tags:

views:

491

answers:

6

Hello,

I want to search in all files from current folder for macro CODE_INIT_PARAMETERS. I can do M-x occur CODE_INIT_PARAMETERS but this shows only entries from open buffers.

Is there any way to search all files from current folder, from Emacs, without switching to M-x shell and then grep ? I want to avoid grep, because for some commands (M-x occur) Emacs do jumps to offending code, and I want that too. Thanks.

+7  A: 

Emacs provides a built-in command:

M-x grep RET CODE_INIT_PARAMETERS *.c

(and 'grep-find to search sub directories)

Though I prefer the interface provided by an external package igrep (which provides the commands igrep and igrep-find).

Trey Jackson
M-x grep-find will also allow you to iterate through the results, the same way as occur.
seth
Wouldn't you need to do something like this? M-x grep "CODE_INIT_PARAMETERS" *.cIt's worth mentioning that using a prefix argument will automatically set the search up to seek what the cursor is over and for the kind of file you're in. C-U M-x grep
justinhj
@justinhj, so correct. My lack of using `M-x grep` shows through.
Trey Jackson
Thanks, I quite new to emacs, and didn't know about M-x grep and igrep.el They do my job just perfect. Thanks.
grayasm
+1  A: 

if you open a folder in dired, and mark all of the files (with 'm') you can run 'dired-do-search ('A' in my bindings). This will search all marked files. To get to the next one, run tags-loop-continue (M-,)

I have set up several elisp functions to mark various sub-sets of the files (.h files, .cpp files, etc) and to create a recursive dired to search a whole tree...

Brian Postow
I must do something for my bindings. It works but it's not handy for the moment. Thanks.
grayasm
+5  A: 

You can try M-x rgrep.

It will ask for:

  • the directory where you want to search recursively
  • a file pattern for the files you want to include in the search
  • the pattern you want to search

As an extra, it will exclude source control private directories from your search (like CVS, .svn or .git).

Jazz
M-x rgrep works also very well. Thanks for answer.
grayasm
+1  A: 

In cases where

  1. you may be searching repeatedly; and
  2. etags will work

you might consider using etags and invoking either find-tag (bound to M-. by default) or tags-search (no default binding but can be continued with M-,).

dmckee
+1  A: 

This is an improvement on Trey Jackson's suggestion.

M-x grep

You will see the grep command, e.g. grep -nH -e

Add R to the first set of flags (for recursive), and put your search term after -e

grep -nHR -e CODE_INIT_PARAMETERS

Hit RET. The results will be understandable by Emacs -- you will be able to click or otherwise navigate to them, like M-x occur. You may need to put the search directory at the end of the command:

grep -nHR -e CODE_INIT_PARAMETERS /path/to/root/of/search
Steven Huwig
Yah, that's why I like `'igrep`, the interface is much more intuitive.
Trey Jackson
Well, I don't mind to add -R. Thanks.
grayasm
A: 

There is as well ack-grep mode for emacs which use the ack-grep tool which is specifically designed for ''grepping'' programming languages and IMHO looks nicer than the output of M-x grep.

But as mentioned earlier etags should be the proper way!

Chmouel Boudjnah