简体   繁体   中英

Emacs command for search in files

I want to search in all files from current folder for macro CODE_INIT_PARAMETERS. I can do Mx 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 Mx shell and then grep ? I want to avoid grep, because for some commands (Mx occur) Emacs do jumps to offending code, and I want that too. Thanks.

You can try Mx 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).

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

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

This is an improvement on Trey Jackson's suggestion.

Mx grep

You will see the grep command, eg 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 Mx 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

Mx find-grep-dired的工作方式与rgrep类似

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-, ).

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 Mx grep.

But as mentioned earlier etags should be the proper way!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM