Ответы:
Придерживаясь встроенных команд Emacs, вы можете использовать multi-occur
или multi-occur-in-matching-buffers
( M-x multi-occur- TAB RET
). multi-occur
дает вам прекрасный контроль, запрашивая каждый буфер для использования, но это утомительно. multi-occur-in-matching-buffers
позволяет вам ввести регулярное выражение для сопоставления имен файлов (оно ищет только в буферах, которые посещают файлы); введите .
в качестве файла регулярное выражение для поиска во всех буферах, которые посещают файл.
Есть также функции для инкрементного поиска по списку буферов или файлов, но они утомительны, так multi-occur
как требуют перечисления буферов или файлов один за другим.
Для поиска во всех файлах в каталоге или файлах, соответствующих определенным шаблонам, независимо от того, открыты они или нет, вы можете использовать grep
. Есть варианты rgrep
и grep-find
по подкаталогам искать рекурсивно.
В дополнение к тому, что упоминали другие - здесь есть два других ресурса для этого.
M-x multi-isearch-buffers
или M-x multi-isearch-buffers-regexp
(vanilla Emacs) - добавочный поиск по нескольким буферам.
Если вы используете Icicles, вы можете использовать icicle-search
(или icicle-occur
любое другое количество icicle-search
специализаций) для поиска в нескольких файлах или буферах.
(В дополнение к поиску и замене в произвольных буферах , конечно, есть команды, которые делают это по нескольким файлам . grep
Например, другие упоминали . И, конечно, есть A
в Dired. Но вы не спрашивали о поиске файлов.)
Это можно сделать с помощью команды helmhelm-multi-occur
. Вы можете установить helm из melpa и затем вызвать команду следующим образом:
M-x helm-multi-occur RET M-a RET
Это откроет helm-multi-occur
и затем выберет все буферы. Вместо того, M-a
чтобы использовать для маркировки всех буферов, вы можете по желанию выбрать интересующие буферы по одному. Перемещайтесь вверх и вниз по списку с помощью C-n
и C-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
для многократного использования во всех буферах, которые поддерживаются файлами.
helm-swoop
пакет в MELPA. Это обеспечивает эту функциональность и позволяет быстро редактировать результаты.
swiper-all
Из пакета swiper предоставляется инструмент для этого. Это даже постепенно, поэтому он обновляется по мере ввода.
Вы можете использовать ibuffer
режим, чтобы отметить буферы, которые вы хотели бы искать. Позвоните ibuffer-do-isearch
(привязано M-s a C-s
по умолчанию) для поиска текста или ibuffer-do-isearch-regexp
если вам нужно найти регулярное выражение.
Если вы не знакомы с этим ibuffer
, запустите его и взгляните на меню Mark, чтобы увидеть все способы, которыми вы можете выбрать набор буферов для работы.
Вот еще один способ с рулем: M-x helm-mini M-a C-s blah
. После вызова helm-mini
, M-a
будет отмечать все буфера открытия , то C-s blah
будет делать мульти происходит на отмеченных буферах.
Также решение с использованием helm-mode - с helm-swoop
.
использование
M-x helm-swoop RET
затем для поиска во всех открытых буферах наберите
M-i
затем просто введите blah
для поиска во всех буферах. В другом окне будут отображаться все вхождения.
Кроме того, вы можете просто набрать
M-x helm-multi-swoop
затем отметьте все буферы, которые вы хотите найти, M-SPC
или C-SPC
нажмитеRET
иblah
.
.
это регулярное выражение для соответствия всем файлам.