Emacs命令用于search文件

我想从当前文件夹的所有文件中searchmacrosCODE_INIT_PARAMETERS。 我可以做Mx发生CODE_INIT_PARAMETERS,但是这只显示来自打开缓冲区的条目。

有没有办法从Emacs目前的文件夹中search所有文件,而无需切换到Mx shell然后grep? 我想避免grep,因为对于一些命令(Mx发生),Emacs会跳转到违规代码,我也想这样做。 谢谢。

你可以试试Mx rgrep

它会要求:

  • 您要recursionsearch的目录
  • search中要包含的文件的文件模式
  • 你想要search的模式

作为一个额外的,它会从您的search排除源控制私人目录(如CVS,.svn或.git)。

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

 Mx grep RET CODE_INIT_PARAMETERS *.c 

(和'grep-find查找子目录)

尽pipe我更喜欢由外部软件包igrep提供的接口(它提供命令igrepigrep-find )。

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

我已经设置了几个elisp函数来标记文件的各种子集(.h文件,.cpp文件等),并创build一个recursiondiredsearch整个树…

这是Trey Jackson的build议的一个改进。

Mx grep

你会看到grep命令,例如grep -nH -e

将R添加到第一组标志(用于recursion),并在-e之后放置search词

 grep -nHR -e CODE_INIT_PARAMETERS 

点击RET。 Emacs的结果是可以理解的 – 你可以点击或者导航到他们,就像Mx发生的一样。 您可能需要将search目录放在命令的末尾:

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

在哪里

  1. 你可能会反复search;
  2. etags 工作

您可以考虑使用etags并调用find-tag (默认绑定到M-. )或者tags-search (没有默认绑定,但可以用M-,继续)。

emacs还有ack-grep模式 ,它使用专为“grepping”编程语言devise的ack-grep工具,而且IMHO看起来比Mx grep的输出更好。

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

Mx find-grep-dired也与rgrep类似