Emacs搜索并打开多个文件,并搜索所有缓冲区
我目前正处于向Emacs转换的开始阶段。但是我有两个基本问题Emacs搜索并打开多个文件,并搜索所有缓冲区,emacs,elisp,Emacs,Elisp,我目前正处于向Emacs转换的开始阶段。但是我有两个基本问题 如何从特定路径递归搜索多个文件?我假设我必须使用find/grep/dired,但我不确定。例如,我希望在路径C:/src/xxx中找到所有*.scala文件。找到这些文件后,我还希望立即在缓冲区中打开它们。我目前唯一熟悉的方法是C-xC-f 当所有这些文件都在缓冲区中时,如何在所有缓冲区中搜索,并获得某种结果列表和/或可能能够在结果之间导航?我想找到所有带有case Int=>文本的地方 对于A部分,你可以看看 对于第B部分,您可以
find
/grep
/dired
,但我不确定。例如,我希望在路径C:/src/xxx
中找到所有*.scala
文件。找到这些文件后,我还希望立即在缓冲区中打开它们。我目前唯一熟悉的方法是C-xC-fcase Int=>
文本的地方对于A部分,你可以看看
对于第B部分,您可以查看匹配缓冲区中的
multi-occure
,您可以指定要使用哪些缓冲区(例如,要在所有scala文件中查找的所有缓冲区*.scala
)以及要查找的内容(例如case Int=>
)。这将为您提供所有事件的列表。我同意Phimueme的回答,但我也要指出M-x rgrep
,它将运行必要的find/grep,以便在不实际打开文件的情况下显示所有匹配项。选择匹配项,然后在该行号处打开相关文件。在某些情况下,这可能比打开所有这些文件更好
另请参见以下内容:
- 我认为你是在人为地限制答案。您不需要将所有文件加载到Emacs中来查找这些事件。并且,一旦您找到了regexp的引用,您就可以轻松地通过击键跳转到文件中的行
我最喜欢的方法是使用M-x igrep find,因为我更喜欢
igrep
界面,而不是Emacs的grep find
您可以在emacswiki上找到igrep库:
而且用法是
M-x igrep-find case Int => RET
这将用所有匹配项填充缓冲区,然后(如在“发生”、“grep查找”、“编译”等)您可以使用C-x`或M-x next error循环遍历匹配项。您尝试在C:/src中的*.scala文件中查找所有出现的“case Int=>” 最简单的方法(假设默认的Emacs设置)是使用
M-x rgrep
。它将要求您输入搜索字符串、文件类型和目录(按此顺序,并且提示已标记,因此不会出现混淆)。只需输入case Int=>
,*.scala
和C:/src/xxx
您应该看到的是一个新的缓冲区,其中包含该目录中所有.scala文件中出现的“case Int=>”列表。如果单击某个引用,Emacs将打开该文件并导航到包含该文件的行
请注意,如果您试图跨多个文件进行搜索和替换,可以使用dired
选项进行搜索和替换。您可以找到关于该选项的信息。*关于问题A***
在冰柱中,默认情况下,C-x C-f是一个多命令。这意味着当您完成一组文件名时:
- 您可以有选择地(例如C-RET、C-mouse-2)对多个候选对象采取行动(例如访问)
- 您可以对名称与当前输入匹配的所有文件执行操作,例如,访问所有文件
M-x冰柱定位文件
对给定目录下的所有文件执行相同的操作
(您始终可以将multi命令用作普通命令:如果您使用RET或mouse-2,C-x C-f将正常工作。如果您不使用额外的键绑定来处理多个文件,那么您永远不会知道其中的区别。)
看
*对于问题B*** 您需要的是冰柱搜索
- 命令
搜索指定集合的所有文件冰柱搜索文件
- 命令
搜索指定集合的所有缓冲区冰柱搜索缓冲区
- 命令
同时执行两项操作:带有负前缀arg的文件,带有非负前缀arg的缓冲区冰柱搜索
*
意味着搜索每一行
定义搜索上下文后,在迷你缓冲区中键入一些文本,它会将候选搜索上下文缩小为与文本匹配的文本。您可以点击M-SPC组合多个这样的模式
然后,您可以导航到选定的搜索点击:C-RET或C-mouse-2访问,或使用C-down循环/访问。您甚至可以以各种方式对匹配的候选对象进行排序,以便轻松地进行比较或更改循环顺序
参见,