Emacs 如何在目录下的c文件中搜索文本

Emacs 如何在目录下的c文件中搜索文本,emacs,Emacs,我看过几个类似的问题,但不是我不理解他们的答案,就是我的问题与他们的不同。因此,我有一个项目包含许多子目录和不同类型的文件。我只想在这些.C文件中搜索函数名 web上的一些信息建议使用“Esc x dired do query replace regexp”。然而,这不仅会搜索C文件,还会搜索其他文件,比如.elf,这在我的例子中是没有帮助的。其他人建议使用标记函数,但它要求我为每个子目录键入“etags*.c”,这也是不可能的 在从事那些大型软件项目时,我应该如何做到这一点 谢谢 Lee在li

我看过几个类似的问题,但不是我不理解他们的答案,就是我的问题与他们的不同。因此,我有一个项目包含许多子目录和不同类型的文件。我只想在这些.C文件中搜索函数名

web上的一些信息建议使用“Esc x dired do query replace regexp”。然而,这不仅会搜索C文件,还会搜索其他文件,比如.elf,这在我的例子中是没有帮助的。其他人建议使用标记函数,但它要求我为每个子目录键入“etags*.c”,这也是不可能的

在从事那些大型软件项目时,我应该如何做到这一点

谢谢 Lee

在linux上使用ack grep

ack-grep "keyword" -G *.c

我的最爱:
igrep find
,在包中找到。用途是:

M-x igrep-find some_thing RET *.C
有内置的
grep find
,docs,但我发现它很难使用


要获得更一般的答案,请参阅这个类似的问题:。

如果您在linux上,您可以使用grep查找其中包含特定文本的文件。然后在emacs之外的shell/命令提示符中执行此操作。这里有一个很好的语法:

grep --color=auto --include=*.c -iRnH 'string to search for' /dir/to/search/
要搜索的目录可以指定为相对目录,因此如果您所在的目录要用作递归搜索的根目录,则可以跳过整个目录地址并指定一个点

grep --color=auto --include=*.c -iRnH 'string to search for' .

部分--color=auto使一些文本高亮显示--include=*.c是指定要搜索的文件的部分。在本例中,仅显示具有c扩展名的文件。标志i使内容不区分大小写,标志R使搜索递归,标志n将行号添加到报告中,标志H将文件路径添加到报告中。

您可以使用cscope和xscope.el:

来繁殖find和grep有find grep功能,在那里,您可以将调用字符串更改为
find-名称*.c
等。如果愿意,将其作为函数。然后使用例如C-x等来导航结果


要在我使用的一个目录中的文件中进行搜索,它会提示您在哪个目录中搜索文件。

尝试使用dired:将光标放在要搜索的目录名上,键入A,并在小缓冲区中找到要查找的文本。

您使用emacs的事实让我觉得您在使用linux。这是真的吗?@davogotland:为什么?我正在使用;我也在Windows上使用Emacs(无论何时出于什么不正当的原因,我被迫在Windows上工作),ack()非常出色。默认情况下,它执行递归的find+grep,并为您处理所有的细节(例如忽略版本控制目录和备份文件;忽略二进制文件也很简单,就像--nobinary)。过滤搜索很简单,扩展集可以在一个名称下分组(例如--[no]perl将排除或包括.pl.pm.pod.t)。简言之,用最少的精力做你想做的事情是很简单的。这提醒了我,我真的必须检查一下Emacs集成。我总是使用
M-xrgrep
(它还负责排除我不想搜索的内容)。