Jak znaleźć tekst w wielu otwartych buforach?

36

Powiedzmy, że mam otwarte 10 buforów i chcę znaleźć wszystkie wystąpienia blahwszystkich 10 buforów. Jak mam to zrobić?

Nixeagle
źródło

Odpowiedzi:

31

Trzymając się wbudowanych poleceń Emacsa, możesz użyć multi-occurlub multi-occur-in-matching-buffers( M-x multi-occur- TAB RET). multi-occurdaje ci dokładną kontrolę poprzez monitowanie o użycie każdego bufora, ale jest to uciążliwe. multi-occur-in-matching-bufferspozwala wprowadzić wyrażenie regularne w celu dopasowania nazw plików (przeszukuje tylko bufory, które odwiedzają pliki); wprowadź .jako wyrażenie regularne pliku, aby wyszukać we wszystkich buforach, które odwiedzają plik.

Istnieją również funkcje przyrostowego przeszukiwania listy buforów lub plików, ale są one żmudne, multi-occurponieważ wymagają wyświetlania buforów lub plików jeden po drugim.

Aby wyszukać wszystkie pliki w katalogu lub pliki pasujące do określonych wzorców, bez względu na to, czy są otwarte, czy nie, możesz użyć grep. Istnieją warianty rgrepi grep-findrekurencyjne przeszukiwanie podkatalogów.

Gilles „SO- przestań być zły”
źródło
5
+1 za wzmiankę, że .jest to wyrażenie regularne pasujące do wszystkich plików.
user2699,
12

Oprócz tego, co wspomnieli inni - oto dwa inne zasoby na ten temat.

  1. M-x multi-isearch-bufferslub M-x multi-isearch-buffers-regexp(waniliowy Emacs) - Wyszukiwanie przyrostowe w wielu buforach.

  2. Jeśli używasz Sopli , możesz użyć icicle-search(lub icicle-occurdowolnej liczby innych icicle-searchspecjalizacji) do przeszukiwania wielu plików lub buforów.

(Oprócz wyszukiwania i zastępowania dowolnych buforów , istnieją oczywiście polecenia, które robią to w wielu plikach . Inni wspominali grepna przykład. I oczywiście jest Aw Dired. Ale nie pytałeś o wyszukiwanie plików.)

Drew
źródło
10

Można to zrobić za pomocą steru za pomocą polecenia helm-multi-occur. Możesz zainstalować ster z Melpy, a następnie wywołać polecenie w następujący sposób:

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

Otworzy się, helm-multi-occura następnie wybierze wszystkie bufory. Zamiast używać M-ado oznaczania wszystkich buforów, możesz opcjonalnie wybrać bufory będące przedmiotem zainteresowania pojedynczo. Nawiguj w górę i w dół listy za pomocą C-ni C-pi zaznacz bufory za pomocą C-SPC. Po zaznaczeniu wszystkich buforów naciśnij, RETaby zaakceptować zaznaczone bufory i rozpocząć wyszukiwanie.

Jeśli dodasz następujące elementy do pliku 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)))))

Następnie można powiązać polecenie, my-helm-multi-occur-buffersaby wykonać wielokrotne wystąpienie we wszystkich buforach utworzonych przez pliki.

nispio
źródło
3
Możesz także zajrzeć do helm-swooppaczki w MELPA. Zapewnia tę funkcjonalność i umożliwia szybką edycję wyników.
Vamsi
9

swiper-allz pakietu swiper zapewnia narzędzie do tego. Jest nawet przyrostowy, więc aktualizuje się podczas pisania.

wprowadź opis zdjęcia tutaj

Wilfred Hughes
źródło
to jest świetne ! fajne znalezisko
abourget
6

Możesz użyć ibuffertrybu, aby zaznaczyć bufory, które chcesz przeszukać. Zadzwoń ibuffer-do-isearch( M-s a C-sdomyślnie ograniczone), aby wyszukać tekst lub ibuffer-do-isearch-regexpjeśli chcesz wyszukać wyrażenie regularne.

Jeśli nie jesteś zaznajomiony ibuffer, odpal go i spójrz na menu Mark, aby zobaczyć wszystkie sposoby wyboru zestawu buforów, na których chcesz działać.

glucas
źródło
1

Oto inny sposób ze sterem: M-x helm-mini M-a C-s blah. Po wywołaniu helm-mini, M-aoznaczy wszystkie bufory otwarcia wtedy C-s blahzrobi wielo wystąpić na oznakowanych buforów.

Xuchunyang
źródło
0

Dostępne jest również rozwiązanie wykorzystujące tryb steru helm-swoop.

Posługiwać się

M-x helm-swoop RET

następnie, aby wyszukać we wszystkich otwartych buforach, wpisz

M-i

następnie po prostu wpisz, blahaby wyszukać we wszystkich buforach. W innym oknie pokażą się wszystkie wystąpienia.

Możesz też po prostu wpisać

M-x helm-multi-swoop

następnie zaznacz wszystkie bufory, które chcesz przeszukać, M-SPClub C-SPCnaciśnij RETi wyszukaj blah.

Lucas Moreira
źródło