如何在许多打开的缓冲区中查找文本?


36

可以说我有10个缓冲区打开,并且我想查找blah所有10个缓冲区中所有出现的事件。我该怎么做?

Answers:


31

坚持使用内置的Emacs命令,您可以使用multi-occurmulti-occur-in-matching-buffersM-x multi-occur- TAB RET)。multi-occur通过提示每个缓冲区要使用来给您很好的控制,但这很繁琐。multi-occur-in-matching-buffers使您可以输入正则表达式来匹配文件名(它仅在访问文件的缓冲区中搜索);输入.作为文件regexp来搜索正在访问文件的所有缓冲区。

还有一些用于在缓冲区或文件列表中进行增量搜索的功能,但是它们很繁琐,就像multi-occur它们需要一一列出缓冲区或文件一样。

要搜索目录中的所有文件或匹配某些模式的文件(无论它们是否打开),可以使用grep。有变体rgrepgrep-find递归搜索子目录。


5
提及+1 .是匹配所有文件的正则表达式。
user2699

12

除了其他人提到的内容以外,这里还有其他两个资源。

  1. M-x multi-isearch-buffersM-x multi-isearch-buffers-regexp(香草Emacs)-跨多个缓冲区进行增量搜索。

  2. 如果您使用Icicles,则可以使用icicle-search(或icicle-occur,或任何其他icicle-search专业名称)在多个文件或缓冲区中搜索。

(除了在任意缓冲区中搜索和替换外,当然还有命令可以在多个文件中执行grep例如,其他人也提到过。当然ADired中也有。但是您并没有询问搜索文件。)


10

这可以通过命令helm来完成helm-multi-occur。您可以从melpa安装头盔,然后按如下所示调用命令:

M-x helm-multi-occur RET M-a RET

这将打开helm-multi-occur,然后选择所有缓冲区。M-a您可以选择一次选择一个感兴趣的缓冲区,而不用标记所有缓冲区。导航向上和向下的清单,C-nC-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以在文件支持的所有缓冲区中进行多次操作。


3
您可能还需要查看helm-swoopMELPA 中的软件包。它提供了此功能,并允许快速编辑结果。
Vamsi 2014年


6

您可以使用ibuffer模式标记要搜索的缓冲区。调用ibuffer-do-isearchM-s a C-s默认情况下绑定到)以搜索文本,或者ibuffer-do-isearch-regexp如果您需要搜索正则表达式。

如果您不熟悉ibuffer,请将其启动并查看“标记”菜单,以了解选择操作缓冲区的所有方法。


1

这是掌舵的另一种方式:M-x helm-mini M-a C-s blah。调用后helm-miniM-a将标记所有打开的缓冲区,然后C-s blah在标记的缓冲区上执行多次。


0

另外,使用舵模式的解决方案是helm-swoop

使用

M-x helm-swoop RET

然后,要搜索所有打开的缓冲区,请键入

M-i

然后,只需键入blah即可在所有缓冲区中进行搜索。在不同的窗口上将显示所有事件。

另外,您也可以输入

M-x helm-multi-swoop

然后,用M-SPC或标记要搜索的所有缓冲区C-SPC,按RET并搜索blah

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.