Wie finde ich Text in vielen offenen Puffern?

36

Nehmen wir an, ich habe 10 Puffer geöffnet, und ich möchte alle Vorkommen blahin allen 10 Puffern finden. Wie würde ich das machen?

Nixeagle
quelle

Antworten:

31

Wenn Sie sich an die integrierten Emacs-Befehle halten, können Sie multi-occuroder multi-occur-in-matching-buffers( M-x multi-occur- TAB RET) verwenden. multi-occurErmöglicht Ihnen eine genaue Kontrolle, indem Sie zur Verwendung jedes Puffers auffordern, dies ist jedoch mühsam. multi-occur-in-matching-buffersErmöglicht die Eingabe eines regulären Ausdrucks, der den Dateinamen entspricht (es wird nur in Puffern gesucht, die Dateien besuchen). Geben Sie .als Datei regexp in alle Puffer zu suchen , die eine Datei besuchen.

Es gibt auch Funktionen für die inkrementelle Suche in einer Liste von Puffern oder Dateien, die jedoch langwierig sind, multi-occurda die Puffer oder Dateien nacheinander aufgelistet werden müssen.

Mit dieser Option können Sie alle Dateien in einem Verzeichnis durchsuchen oder Dateien, die bestimmten Mustern entsprechen, unabhängig davon, ob sie geöffnet sind oder nicht grep. Es gibt Varianten rgrepund grep-findUnterverzeichnisse rekursiv zu durchsuchen.

Gilles 'SO - hör auf böse zu sein'
quelle
5
+1 für die Erwähnung, dass dies .der reguläre Ausdruck ist, der allen Dateien entspricht.
user2699
12

Zusätzlich zu dem, was andere erwähnt haben, sind hier zwei weitere Ressourcen dafür.

  1. M-x multi-isearch-buffersoder M-x multi-isearch-buffers-regexp(Vanille-Emacs) - Inkrementelle Suche über mehrere Puffer.

  2. Wenn Sie Eiszapfen verwenden , können Sie mit icicle-search(oder einer icicle-occurbeliebigen Anzahl anderer icicle-searchSpezialisierungen) mehrere Dateien oder Puffer durchsuchen.

(Zusätzlich zum Suchen und Ersetzen in beliebigen Puffern gibt es natürlich Befehle, die dies in mehreren Dateien tun . Andere haben dies grepzum Beispiel erwähnt. Und natürlich Ain Dired. Aber Sie haben nicht nach dem Durchsuchen von Dateien gefragt.)

Drew
quelle
10

Dies kann mit dem Befehl helm erfolgenhelm-multi-occur . Sie können helm von melpa installieren und dann den Befehl wie folgt aufrufen:

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

Dadurch werden helm-multi-occuralle Puffer geöffnet und ausgewählt. Anstatt M-aalle Puffer zu markieren, können Sie die gewünschten Puffer auch einzeln auswählen. Navigieren Sie mit und in der Liste auf C-nund ab C-pund markieren Sie die Puffer mit C-SPC. Sobald alle Puffer markiert sind, drücken Sie RET, um die markierten Puffer zu akzeptieren und die Suche zu starten.

Wenn Sie Ihrer Init-Datei Folgendes hinzufügen:

(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)))))

Sie können dann den Befehl binden my-helm-multi-occur-buffers, um in allen Puffern, die von Dateien gesichert werden, ein mehrfaches Auftreten durchzuführen.

Nispio
quelle
3
Vielleicht möchten Sie sich auch das helm-swoopPaket in MELPA ansehen. Es bietet diese Funktionalität und ermöglicht eine schnelle Bearbeitung der Ergebnisse.
Vamsi
9

swiper-allaus dem swiper-paket liefert ein tool dafür. Es ist sogar inkrementell, sodass es während der Eingabe aktualisiert wird.

Bildbeschreibung hier eingeben

Wilfred Hughes
quelle
das ist toll ! nice find
abourget
6

Mit ibuffermode können Sie die Puffer markieren, die Sie durchsuchen möchten. Rufen Sie ibuffer-do-isearch( M-s a C-sstandardmäßig gebunden ) auf, um nach Text zu suchen, oder ibuffer-do-isearch-regexpwenn Sie nach einem regulären Ausdruck suchen müssen.

Wenn Sie mit dieser Funktion nicht vertraut ibuffersind, rufen Sie sie auf und sehen Sie sich das Markierungsmenü an, um zu erfahren, wie Sie eine Reihe von Puffern auswählen können, mit denen Sie arbeiten möchten.

Glucas
quelle
1

Hier ist eine andere Art und Weise mit Helm: M-x helm-mini M-a C-s blah. Nach dem Aufruf helm-mini, M-aalle Öffnung Puffer markieren dann C-s blahauf markierten Puffer Multi tun auftreten.

xuchunyang
quelle
0

Auch eine Lösung im Steuermodus ist mit helm-swoop.

Verwenden

M-x helm-swoop RET

Geben Sie dann für die Suche in allen offenen Puffern Folgendes ein

M-i

blahGeben Sie dann einfach ein , um in allen Puffern zu suchen. In einem anderen Fenster werden alle Vorkommen angezeigt.

Alternativ können Sie einfach eingeben

M-x helm-multi-swoop

Markieren Sie dann alle Puffer, nach denen Sie suchen möchten, mit M-SPCoder C-SPC, drücken Sie RETund suchen Sie blah.

Lucas Moreira
quelle