我想在当前文件夹中的所有文件中搜索宏CODE_INIT_PARAMETERS。
我可以使用Alt+Xoccur,Return CODE_INIT_PARAMETERS Return,但这只显示已打开的缓冲器中的条目。
是否有一种方法可以从Emacs中搜索当前文件夹中的所有文件,而不需要切换到M-x shell,然后使用grep?我想要避免使用grep,因为对于某些命令(如M-x occur),Emacs会跳转到有问题的代码,我也希望如此。
M-x rgrep
。Emacs提供了一个内置命令:
M-x grep RET CODE_INIT_PARAMETERS *.c
虽然我更喜欢外部包igrep
提供的界面(它提供了命令igrep
和igrep-find
,并且可以搜索子目录)。
M-x grep "CODE_INIT_PARAMETERS" *.c
值得一提的是,使用前缀参数将自动设置搜索以寻找光标所在位置和你所处文件类型的内容。C-U M-x grep
- justinhjM-x grep
的缺点显而易见。 - Trey JacksonM-x find-grep-dired与rgrep类似,也是用于搜索文本的命令。
grep -nH -e
在第一组标志中添加R(递归),并在-e后放置您的搜索词。grep -nHR -e CODE_INIT_PARAMETERS
按下RET键。结果将被Emacs解释并且你可以像M-x occur一样点击或者导航到它们,这个和IT技术有关。你可能需要在命令的末尾加上搜索目录:
grep -nHR -e CODE_INIT_PARAMETERS /path/to/root/of/search
'igrep
,它的界面更加直观。 - Trey Jackson在以下情况下:
您可以考虑使用 etags
并调用 find-tag
(默认绑定为 M-.
)或 tags-search
(没有默认绑定,但可以使用 M-,
继续)。
Emacs 也有 ack-grep mode,它使用专门为“grepping”编程语言设计的ack-grep工具,并且在我看来比 M-x grep 的输出更漂亮。
但是如前所述,etags 应该是正确的方法!
rgrep
有些问题。例如,当我输入文件的模式时,它找不到任何内容。经过一番努力,我发现了原因:它不知道点的含义。也就是说,我想在.h
、.c
、.cpp
文件中搜索一个模式,但是我输入的模式.*\.[ch].*
是错误的,正确的应该是*\.[ch]*
。 - Hi-Angel