2009-08-25 84 views
56

我想从当前文件夹的所有文件中搜索宏CODE_INIT_PARAMETERS。 我可以做 M-x发生CODE_INIT_PARAMETERS 但这只显示来自开放缓冲区的条目。用于搜索文件的Emacs命令

有什么方法可以从Emacs当前文件夹中搜索所有文件,而无需切换到M-x shell然后grep?我想避免grep,因为对于某些命令(M-x发生),Emacs会跳转到有问题的代码,我也想这样做。 谢谢。

回答

105

你可以试试M-x rgrep

它会询问:

  • 要递归搜索目录
  • 为您希望在搜索
  • 您要搜索
  • 模式中包含的文件一个文件模式

作为一个额外的,它将排除您的搜索源代码管理私人目录(如CVS,.svn或.git)。

+1

M-x rgrep的作品也很好。谢谢你的回答。 – grayasm 2009-08-27 19:16:50

+7

不能在Windows工作开箱:( – avp 2011-05-06 07:08:46

+5

你需要grep和发现(来自的GnuWin32),以及GNU发现必须在PATH的Windows FIND.EXE之前,grep和发现都安装了EmacsW32。 – Jazz 2011-05-06 14:47:48

11

的Emacs提供了一个内置的命令:

M-x grep RET CODE_INIT_PARAMETERS *.c 

(和'grep-find搜索子目录)

虽然我更喜欢由外部包igrep(其提供命令提供的接口igrepigrep-find )。

+0

M-X的grep,发现也可以让你通过的结果,同样的方式进行迭代。 – seth 2009-08-26 03:14:27

+1

你不需要做这样的事吗? 的Mx的grep“CODE_INIT_PARAMETERS”的* .c 值得一提的是,使用前缀参数会自动设置搜索了寻求光标在什么和你是什么样的文件。 CU的Mx的grep – justinhj 2009-08-27 04:00:45

+0

@justinhj,如此正确。我没有使用'M-x grep'显示。 – 2009-08-27 05:59:32

5

如果你在dired中打开一个文件夹,并标记所有文件(用'm'),你可以在我的绑定中运行'dired-do-search('A')。这将搜索所有标记的文件。要进入下一个,运行tags-loop-continue(M-,)

我已经设置了几个elisp函数来标记文件的各种子集(.h文件,.cpp文件等)和创建一个递归直接搜索整棵树...

+0

我必须为我的绑定做些事情。它可以工作,但暂时不方便。谢谢。 – grayasm 2009-08-27 19:40:56

1

  1. 可能会反复搜索的情况;
  2. 的ETag 工作

你可以考虑使用etags和调用或者find-tag(默认绑定到M-.)或tags-search(没有默认的约束力,但可以用M-,继续)。

5

这是对Trey Jackson的建议的改进。

M-x grep

您将看到grep命令,例如,grep -nH -e

加上R的第一套标志(递归),并把你的搜索词后-e

grep -nHR -e CODE_INIT_PARAMETERS 

命中RET。 Emacs可以理解结果 - 您将能够点击或以其他方式导航到它们,例如M-x发生。你可能需要把搜索目录在命令的末尾:

grep -nHR -e CODE_INIT_PARAMETERS /path/to/root/of/search 
+0

Yah,这就是为什么我喜欢''igrep',界面更直观。 – 2009-08-26 03:20:16

+0

嗯,我不介意加-R。谢谢。 – grayasm 2009-08-27 19:24:26

1

有以及ack-grep mode对于使用该ack-grep工具,它是专门针对“设计Emacs的grepping“”编程语言和恕我直言看起来更好比Mx grep的输出要低。

但正如前面提到的,etags应该是正确的方法!

1

M-X找到 - grep的-dired也适用同样的rgrep