前几天我发现 Mx 发生了。
(如何在 Emacs 中实现代码折叠效果?)
我想知道我是否可以列出多个文件(或缓冲区)中的所有匹配行,最好以 dired 模式标记。
前几天我发现 Mx 发生了。
(如何在 Emacs 中实现代码折叠效果?)
我想知道我是否可以列出多个文件(或缓冲区)中的所有匹配行,最好以 dired 模式标记。
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))))
它提供了两个功能:
noccur-dired
这将multi-occur
在dired 标记的文件上执行noccur-project
这将对当前项目multi-occur
中的所有文件执行。这是递归的。根据文档,典型用法是:M-x noccur-project RET foo RET
然后可以使用发生编辑模式(绑定到 e)编辑发生缓冲区的内容。要在所有修改过的缓冲区中保存更改并返回发生模式,请按C-c C-c
。
这可以使用内置的ibuffer来完成。用m
key 标记缓冲区,然后在标记的缓冲区O
上启动key 。我个人在我的.ibuffer-do-occur
(defalias 'list-buffers 'ibuffer)
.emacs
您还可以使用将在与 regexp 匹配的缓冲区multi-occur-in-matching-buffers
上执行的内置函数。典型的用法是在 Emacs 中已经打开的缓冲区的正则表达式在哪里,并且是匹配的。multi-occur
M-x multi-occur-in-matching-buffers RET ext$ RET regexp RET
ext$
regexp
让我改进 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))
你可以试试
(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 打开。
Wrt Dired:
不确定您是要求 (a) 正则表达式搜索在 Dired 中标记的文件,还是 (b) 标记内容与正则表达式匹配的文件(在 Dired 中)。- 或 (c) 其他东西。
A
您可以使用(或M-S a C-M-s
用于增量正则表达式搜索)进行前者(搜索标记的文件)。这个答案可以让你搜索所有标记在这里和标记子目录中的文件(递归)。
%q
您可以使用( )执行后者(标记内容匹配的文件dired-mark-files-containing-regexp
)。
在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搜索,它是一种不同类型的增量搜索(和按需替换)。您可以将搜索限制在特定的上下文中(由正则表达式定义)。当您更改搜索模式时,搜索命中会逐渐更新。您可以组合多种搜索模式,逐步细化您的搜索。您可以循环浏览任何一组搜索结果或直接访问它们。您可以更改周期顺序 --- 您不仅限于缓冲发生顺序。