Як знайти текст у багатьох відкритих буферах?


36

Скажімо, у мене відкрито 10 буферів, і я хочу знайти всі входження blahв усіх 10 буферів. Як би я це зробив?

Відповіді:


31

Дотримуючись вбудованих команд Emacs, ви можете використовувати multi-occurабо multi-occur-in-matching-buffers( M-x multi-occur- TAB RET). multi-occurдає точний контроль за допомогою кожного буфера використовувати, але це втомливо. multi-occur-in-matching-buffersдозволяє ввести regexp для відповідності імен файлів (він здійснює пошук лише у буферах, які відвідують файли); введіть .як файл regexp для пошуку у всіх буферах, які відвідують файл.

Існують також функції для поступового пошуку в списку буферів або файлів, але вони стомлюють, як multi-occurвони вимагають перерахування буферів або файлів один за одним.

Для пошуку у всіх файлах у каталозі або файлах, що відповідають певним шаблонам, відкриті вони чи ні, ви можете використовувати grep. Існують варіанти rgrepта grep-findрекурсивно шукати підкаталоги.


5
+1 для згадки, що .це регулярний вираз, який відповідає всім файлам.
користувач2699

12

Окрім того, що згадували інші - ось ще два ресурси для цього.

  1. M-x multi-isearch-buffersабо M-x multi-isearch-buffers-regexp(ванільний Emacs) - поступовий пошук у кількох буферах.

  2. Якщо ви використовуєте Icicles, то ви можете використовувати icicle-search(або icicle-occurабо будь-яку кількість інших icicle-searchспеціалізацій) для пошуку в декількох файлах або буферах.

(Окрім пошуку та заміни в довільних буферах , звичайно, є команди, які роблять це для кількох файлів . Інші згадували grep, наприклад. І, звичайно, є Aв Dired. Але ви не питали про пошук файлів.)


10

Це можна зробити за допомогою керма за допомогою команди helm-multi-occur. Ви можете встановити штурвал від melpa, а потім викликати команду наступним чином:

M-x helm-multi-occur RET M-a RET

Це відкриється, helm-multi-occurа потім виберіть усі буфери. Замість того, M-aщоб використовувати для позначення всіх буферів, ви можете додатково вибрати буфери, що цікавлять один за одним. Перейдіть вгору і вниз по списку з C-nі C-pі мітки буферів C-SPC. Після позначення всіх буферів натисніть, RETщоб прийняти позначені буфери, і почніть пошук.

Якщо ви додасте в файл init таке:

(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щоб зробити багатопотокові у всіх буферах, які підтримуються файлами.


3
Ви також можете подивитися helm-swoopпакет MELPA. Він забезпечує цю функціональність і дозволяє швидко редагувати результати.
Вамсі


6

Ви можете використовувати ibufferрежим для позначення буферів, які ви хочете шукати. Дзвінок ibuffer-do-isearch(прив’язаний до M-s a C-sзамовчування) для пошуку тексту або ibuffer-do-isearch-regexpдля пошуку регулярного виразу.

Якщо ви не знайомі ibuffer, запустіть його та перегляньте меню «Позначити», щоб побачити всі способи вибору набору буферів, якими можна працювати.


1

Ось ще один спосіб з кермом: M-x helm-mini M-a C-s blah. Після виклику helm-mini, M-aвідзначатиме все буфера відкриття , то C-s blahбуде робити мульти відбувається на зазначених буферах.


0

Також рішення з використанням кермового режиму є з helm-swoop.

Використовуйте

M-x helm-swoop RET

потім для пошуку у всіх відкритих буферах введіть

M-i

тоді просто введіть blahдля пошуку в усіх буферах. У іншому вікні відобразяться всі події.

Крім того, ви можете просто ввести

M-x helm-multi-swoop

потім позначте всі буфери, за якими ви хочете шукати, M-SPCабо C-SPCнатисніть RETі шукайте blah.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.