4

前几天我发现 Mx 发生了。
如何在 Emacs 中实现代码折叠效果?

我想知道我是否可以列出多个文件(或缓冲区)中的所有匹配行,最好以 dired 模式标记

4

6 回答 6

3
M-x multi-occur

M-x multi-occur-in-matching-buffers

并且:

M-x multi-occur-in-this-mode

(defun get-buffers-matching-mode (mode)
  "Returns a list of buffers where their major-mode is equal to MODE"
  (let ((buffer-mode-matches '()))
   (dolist (buf (buffer-list))
     (with-current-buffer buf
       (if (eq mode major-mode)
           (add-to-list 'buffer-mode-matches buf))))
   buffer-mode-matches))

    (defun multi-occur-in-this-mode ()
      "Show all lines matching REGEXP in buffers with this major mode."
      (interactive)
      (multi-occur
       (get-buffers-matching-mode major-mode)
       (car (occur-read-primary-args))))
于 2013-05-21T04:42:17.157 回答
2

文件

这可以使用可以从MELPA安装的包noccur来完成。

它提供了两个功能:

  • noccur-dired这将multi-occurdired 标记的文件上执行
  • noccur-project这将对当前项目multi-occur中的所有文件执行。这是递归的。

根据文档,典型用法是:M-x noccur-project RET foo RET
然后可以使用发生编辑模式(绑定到 e)编辑发生缓冲区的内容。要在所有修改过的缓冲区中保存更改并返回发生模式,请按C-c C-c

缓冲器

这可以使用内置的ibuffer来完成。用mkey 标记缓冲区,然后在标记的缓冲区O上启动key 。我个人在我的.ibuffer-do-occur(defalias 'list-buffers 'ibuffer).emacs

您还可以使用将在与 regexp 匹配的缓冲区multi-occur-in-matching-buffers上执行的内置函数。典型的用法是在 Emacs 中已经打开的缓冲区的正则表达式在哪里,并且是匹配的。multi-occurM-x multi-occur-in-matching-buffers RET ext$ RET regexp REText$regexp

于 2015-05-11T15:13:00.947 回答
1

让我改进 mk1 的答案,因为我认为它是迄今为止最好的答案。这保留了以前搜索发生的相同历史记录,并允许在匹配之后或之前显示更多行的可选参数(在调用函数之前使用 Cu 后跟一个数字),就像在标准发生中一样。

(defun dired-do-multi-occur (regexp &optional nlines)
  "Run `multi-occur' with REGEXP on all dired marked files."
  (interactive (occur-read-primary-args))
  (multi-occur (mapcar 'find-file-noselect (dired-get-marked-files)) regexp nlines))
于 2014-09-24T14:39:59.110 回答
1

你可以试试

(defun dired-do-multi-occur (regexp)
  "Run `multi-occur' with REGEXP on all marked files."
  (interactive (list (read-regexp "Regexp: ")))
  (multi-occur (mapcar 'find-file-noselect (dired-get-marked-files)) regexp))

M-x dired-do-multi-occur使用或绑定到您喜欢的键在 dired 缓冲区中运行它。

警告:所有标记的文件都将被 emacs 打开。

于 2013-05-21T04:44:14.797 回答
1

Wrt Dired:

不确定您是要求 (a) 正则表达式搜索在 Dired 中标记的文件,还是 (b) 标记内容与正则表达式匹配的文件(在 Dired 中)。- 或 (c) 其他东西。

  • A您可以使用(或M-S a C-M-s用于增量正则表达式搜索)进行前者(搜索标记的文件)。这个答案可以让你搜索所有标记在这里和标记子目录中的文件(递归)。

  • %q您可以使用( )执行后者(标记内容匹配的文件dired-mark-files-containing-regexp)。

于 2014-09-27T22:02:43.547 回答
1

Icicles中,使用M-s M-s m(command icicle-search-dired-marked-recursive) 递归搜索当前 Dired 缓冲区和所有标记的子目录中的标记文件。

同样,在您的书签列表中显示相同的键M-s M-s m,搜索所有标记书签的目标。和 Ibuffer 和 Buffer Menu 类似:M-s M-s m搜索标记的缓冲区。

这是Icicles搜索,它是一种不同类型的增量搜索(和按需替换)。您可以将搜索限制在特定的上下文中(由正则表达式定义)。当您更改搜索模式时,搜索命中会逐渐更新。您可以组合多种搜索模式,逐步细化您的搜索。您可以循环浏览任何一组搜索结果或直接访问它们。您可以更改周期顺序 --- 您不仅限于缓冲发生顺序。

于 2013-08-11T23:50:34.540 回答