Answers:
坚持使用内置的Emacs命令,您可以使用multi-occur或multi-occur-in-matching-buffers(M-x multi-occur- TAB RET)。multi-occur通过提示每个缓冲区要使用来给您很好的控制,但这很繁琐。multi-occur-in-matching-buffers使您可以输入正则表达式来匹配文件名(它仅在访问文件的缓冲区中搜索);输入.作为文件regexp来搜索正在访问文件的所有缓冲区。
还有一些用于在缓冲区或文件列表中进行增量搜索的功能,但是它们很繁琐,就像multi-occur它们需要一一列出缓冲区或文件一样。
要搜索目录中的所有文件或匹配某些模式的文件(无论它们是否打开),可以使用grep。有变体rgrep和grep-find递归搜索子目录。
除了其他人提到的内容以外,这里还有其他两个资源。
M-x multi-isearch-buffers或M-x multi-isearch-buffers-regexp(香草Emacs)-跨多个缓冲区进行增量搜索。
如果您使用Icicles,则可以使用icicle-search(或icicle-occur,或任何其他icicle-search专业名称)在多个文件或缓冲区中搜索。
(除了在任意缓冲区中搜索和替换外,当然还有命令可以在多个文件中执行。grep例如,其他人也提到过。当然ADired中也有。但是您并没有询问搜索文件。)
这可以通过命令helm来完成helm-multi-occur。您可以从melpa安装头盔,然后按如下所示调用命令:
M-x helm-multi-occur RET M-a RET
这将打开helm-multi-occur,然后选择所有缓冲区。M-a您可以选择一次选择一个感兴趣的缓冲区,而不用标记所有缓冲区。导航向上和向下的清单,C-n并C-p与标记的缓冲区C-SPC。标记所有缓冲区后,按RET接受标记的缓冲区并开始搜索。
如果将以下内容添加到您的初始化文件中:
(require 'helm-regexp)
(eval-after-load "helm-regexp"
'(setq helm-source-moccur
(helm-make-source "Moccur" 'helm-source-multi-occur :follow 1)))
;; (source: http://stackoverflow.com/q/14726601)
(defun my-helm-multi-occur-buffers ()
"multi-occur in all buffers backed by files."
(interactive)
(helm-multi-occur
(delq nil
(mapcar (lambda (b)
(when (buffer-file-name b) (buffer-name b)))
(buffer-list)))))
然后,您可以绑定命令my-helm-multi-occur-buffers以在文件支持的所有缓冲区中进行多次操作。
helm-swoopMELPA 中的软件包。它提供了此功能,并允许快速编辑结果。
另外,使用舵模式的解决方案是helm-swoop。
使用
M-x helm-swoop RET
然后,要搜索所有打开的缓冲区,请键入
M-i
然后,只需键入blah即可在所有缓冲区中进行搜索。在不同的窗口上将显示所有事件。
另外,您也可以输入
M-x helm-multi-swoop
然后,用M-SPC或标记要搜索的所有缓冲区C-SPC,按RET并搜索blah。
.是匹配所有文件的正则表达式。