emacs:交互式搜索开放缓冲区

iob*_*lix 21 emacs

有没有办法搜索特定模式的所有打开缓冲区?

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)

(当然,相应地更新文档字符串.)

  • 非常好.人们可以花费无限的时间来调整和定制emacs ...... (3认同)

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的终身粉丝.现在去吧!

  • 您不需要ibuffer - "标准"缓冲区菜单的行为方式相同:标记一些缓冲区并执行Ms Cs(或Mx Buffer-menu-isearch-buffers).如果将这个功能推广到一个没有标记缓冲区那就太好了.它应该很容易实现 - 存在一个multi-isearch-buffers函数,只需要提供一个打开缓冲区列表作为其参数. (4认同)

sco*_*zer 7

从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以过滤您想要忽略的任何其他类型的缓冲区.