用于在文件中搜索的Emacs命令

用于在文件中搜索的Emacs命令,emacs,Emacs,我想在当前文件夹的所有文件中搜索宏代码初始化参数。 我能行 M-x发生代码\初始\参数 但这只显示来自打开缓冲区的条目 有没有办法从当前文件夹、Emacs中搜索所有文件,而不切换到M-XShell和grep?我希望避免使用grep,因为对于某些命令(M-x出现),Emacs会跳转到有问题的代码,我也希望这样。 谢谢。Emacs提供了一个内置命令: M-x grep RET CODE_INIT_PARAMETERS *.c (和'grep-find搜索子目录) 虽然我更喜欢外部软件包提供的界面(

我想在当前文件夹的所有文件中搜索宏代码初始化参数。 我能行 M-x发生代码\初始\参数 但这只显示来自打开缓冲区的条目

有没有办法从当前文件夹、Emacs中搜索所有文件,而不切换到M-XShell和grep?我希望避免使用grep,因为对于某些命令(M-x出现),Emacs会跳转到有问题的代码,我也希望这样。
谢谢。

Emacs提供了一个内置命令:

M-x grep RET CODE_INIT_PARAMETERS *.c
(和
'grep-find
搜索子目录)


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

如果在dired中打开一个文件夹,并标记所有文件(使用“m”),则可以在我的绑定中运行“dired do search”(“a”)。这将搜索所有标记的文件。要转到下一个,请运行标记循环continue(M-,)


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

您可以尝试
M-x rgrep

它将要求:

  • 要在其中递归搜索的目录
  • 要包含在搜索中的文件的文件模式
  • 要搜索的模式
另外,它将从您的搜索中排除源代码管理专用目录(如CVS、.svn或.git)。

在以下情况下

  • 您可能在重复搜索
  • ETag将起作用

  • 您可以考虑使用和调用<代码>查找标记< /> >(绑定到<代码> m- .<代码>默认)或“代码>标签搜索< /代码>(没有默认绑定,但可以继续使用<代码> m-,)。

    < P>这是对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
    
    对于使用专门为“grepping”编程语言设计的工具的emacs来说,还有一种方法,IMHO看起来比M-x grep的输出更好


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

    M-x find grep dired的工作原理与rgrep类似

    M-x grep find还允许您以与发生相同的方式迭代结果。您不需要这样做吗?M-x grep“CODE_INIT_PARAMETERS”*.c值得一提的是,使用前缀参数将自动设置搜索,以查找光标所在的位置以及所处的文件类型。C-U M-xgrep@justinhj,是的。我没有使用
    M-x grep
    这一点可以看出来。谢谢,我对emacs很陌生,不知道M-x grep和igrep。他们把我的工作做得很好。谢谢。耶,这就是为什么我喜欢
    'igrep
    ,界面更直观。我必须为我的绑定做些事情。它可以工作,但目前还不方便。谢谢。您需要grep和find(来自GnuWin32),GNU find必须在路径中的Windows find.exe之前。grep和find是与EmacsW32一起安装的。我还想补充一点,
    rgrep
    坏了一些。也就是说,当我为一个文件输入一个模式时,它什么也找不到。经过一番挣扎,我找到了原因:它不知道这些点意味着什么。也就是说,我想在.h、.c、.cpp文件中搜索一个模式,而不是我的模式
    *.[ch].
    我应该输入
    *.[ch]*.