Emacs命令用于搜索文件

时间:2009-08-25 21:15:23

标签: emacs

我想在当前文件夹中搜索宏CODE_INIT_PARAMETERS的所有文件。 我可以 M-x出现CODE_INIT_PARAMETERS 但是这仅显示来自打开缓冲区的条目。

有没有办法从Emacs搜索当前文件夹中的所有文件,而无需切换到M-x shell然后grep?我想避免使用grep,因为对于某些命令(M-x发生),Emacs会跳转到违规代码,我也想要这样做。 感谢。

7 个答案:

答案 0 :(得分:116)

您可以尝试M-x rgrep

它会要求:

  • 要递归搜索的目录
  • 要包含在搜索中的文件的文件模式
  • 您要搜索的模式

作为额外的,它将从搜索中排除源控制私有目录(如CVS,.svn或.git)。

答案 1 :(得分:12)

Emacs提供了一个内置命令:

M-x grep RET CODE_INIT_PARAMETERS *.c

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

虽然我更喜欢外部包igrep提供的界面(提供命令igrepigrep-find)。

答案 2 :(得分:6)

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

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

答案 3 :(得分: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

答案 4 :(得分:4)

M-x find-grep-dired也与rgrep

类似

答案 5 :(得分:2)

的情况下
  1. 你可能会反复搜索;
  2. etags 工作
  3. 您可以考虑使用etags并调用find-tag(默认情况下绑定到M-.)或tags-search(没有默认绑定,但可以使用{{1}继续})。

答案 6 :(得分:1)

对于使用ack-grep mode工具的emacs也有ack-grep,该工具是专门为''grepping''编程语言而设计的,而IMHO看起来比M-x grep的输出更好。

但如前所述,etags应该是正确的方法!