有没有办法搜索特定模式的所有打开缓冲区?
Cs以交互方式搜索当前缓冲区.同样,是否有搜索所有开放缓冲区的东西?
我知道我可以使用"发生",但"发生"会带来一个新的缓冲区并改变/混乱缓冲组织.
phi*_*ils 30
multi-occur-in-matching-buffers没有提到内置功能.我使用的是这个的修改版本(因为我总是希望搜索所有缓冲区,并且每次指定缓冲区名称模式都很烦人).
(defun my-multi-occur-in-matching-buffers (regexp &optional allbufs)
"Show lines matching REGEXP in all file-visiting buffers.
Given a prefix argument, search in ALL buffers."
(interactive (occur-read-primary-args))
(multi-occur-in-matching-buffers "." regexp allbufs))
(global-set-key (kbd "M-s /") 'my-multi-occur-in-matching-buffers)
Run Code Online (Sandbox Code Playgroud)
要反转前缀参数的行为,以便默认行为是搜索所有缓冲区,请将调用更改为:
(multi-occur-in-matching-buffers "." regexp (not allbufs))
Run Code Online (Sandbox Code Playgroud)
(当然,相应地更新文档字符串.)
off*_*by1 16
我修好了TODO:
;; I know that string is in my Emacs somewhere!
(require 'cl)
(defcustom search-all-buffers-ignored-files (list (rx-to-string '(and bos (or ".bash_history" "TAGS") eos)))
"Files to ignore when searching buffers via \\[search-all-buffers]."
:type 'editable-list)
(require 'grep)
(defun search-all-buffers (regexp prefix)
"Searches file-visiting buffers for occurence of REGEXP. With
prefix > 1 (i.e., if you type C-u \\[search-all-buffers]),
searches all buffers."
(interactive (list (grep-read-regexp)
current-prefix-arg))
(message "Regexp is %s; prefix is %s" regexp prefix)
(multi-occur
(if (member prefix '(4 (4)))
(buffer-list)
(remove-if
(lambda (b) (some (lambda (rx) (string-match rx (file-name-nondirectory (buffer-file-name b)))) search-all-buffers-ignored-files))
(remove-if-not 'buffer-file-name (buffer-list))))
regexp))
(global-set-key [f7] 'search-all-buffers)
Run Code Online (Sandbox Code Playgroud)
Boz*_*sov 11
ibuffer可能会帮助你.看看这篇文章.我想这对你来说可能是最有趣的:
'O' - ibuffer-do-occurrence - 在选定的缓冲区上发生.这会对所有选定的缓冲区执行正则表达式搜索,并在发生的窗口中显示结果.浏览代码时,这是非常有用的.当你将它与ibuffer的"过滤"功能结合起来(即将到来)时,它变得非常棒.例如:Cx Cb,使用(例如)Perl major-mode标记所有文件,确实会找出这些文件中提到某个功能的所有地方.通过Occur窗口随意导航到该点.
'Ms a Cs' - ibuffer-do-isearch - 在标记的缓冲区中进行增量搜索.这太棒了,你必须立即尝试.选择两个或多个缓冲区,点击热键,搜索所有这些缓冲区中出现的内容.仅这两个特征就足以让我成为IBuffer的终身粉丝.现在去吧!
从Leo对Bozhidar的评论中找出线索:
(defun my-isearch-buffers ()
"isearch multiple buffers."
(interactive)
(multi-isearch-buffers
(delq nil (mapcar (lambda (buf)
(set-buffer buf)
(and (not (equal major-mode 'dired-mode))
(not (string-match "^[ *]" (buffer-name buf)))
buf))
(buffer-list)))))
Run Code Online (Sandbox Code Playgroud)
您可能必须调整内部条件and以过滤您想要忽略的任何其他类型的缓冲区.