Emacs sucht und öffnet mehrere Dateien und sucht nach allen Puffern

8

Ich bin gerade am Anfang eines Wechselprozesses, weiter Emacs. Allerdings habe ich zwei grundlegende Probleme.

  1. Wie suche ich rekursiv nach mehreren Dateien von einem bestimmten Pfad? Ich nehme an, dass ich find / grep / dired verwenden muss, aber ich bin mir nicht sicher. Zum Beispiel möchte ich alle *.scala Dateien im Pfad C:/src/xxx finden. Wenn diese Dateien gefunden werden, möchte ich sie auch alle im Puffer auf einmal öffnen. Der einzige Weg, den ich derzeit kenne, ist C-x C-f

  2. Wenn alle diese Dateien im Puffer sind, wie suche ich dann über alle Puffer hinweg und erhalte eine Art Liste des Ergebnisses und / oder kann ich vielleicht von Ergebnis zu Ergebnis navigieren? Sprich ich möchte alle Orte mit dem Text case Int => auftreten.

StefanE 25.09.2010, 20:34
quelle

5 Antworten

8

Ich stimme der Antwort von phimuemue zu, aber ich werde auch auf M-x rgrep hinweisen, die den notwendigen find / grep ausführen wird, um alle Übereinstimmungen darzustellen, ohne die Dateien tatsächlich zu öffnen. Wenn Sie eine Übereinstimmung auswählen, wird die entsprechende Datei unter dieser Zeilennummer geöffnet. In einigen Situationen ist dies möglicherweise vorzuziehen, wenn Sie alle diese Dateien öffnen.

Siehe auch:

phils 25.09.2010, 22:18
quelle
3

Für Teil A könnten Sie hier .

Für Teil B können Sie sich multi-occur-in-matching-buffers ansehen, mit dem Sie angeben können, welche Puffer Sie verwenden möchten (z. B. alle Puffer .*.scala in allen scala-Dateien) und nach was Sie suchen sollen (zB case Int => ). Dies gibt Ihnen eine Liste aller Vorkommen.

    
phimuemue 25.09.2010 20:53
quelle
1

Sie versuchen, alle Vorkommen von "case Int = & gt;" in * .scala-Dateien in C: / src

Am einfachsten ist es (unter der Annahme eines Standard-Emacs-Setups), M-x rgrep zu verwenden. Sie werden nach Suchzeichenfolge, Dateityp und Verzeichnis gefragt (in dieser Reihenfolge, und die Eingabeaufforderungen sind beschriftet, damit es keine Verwirrung gibt). Geben Sie einfach case Int => , *.scala und C:/src/xxx ein.

Was Sie sehen sollten, ist ein neuer Puffer mit einer Liste von Vorkommen von "case Int = & gt;" in allen .scala-Dateien in diesem Verzeichnis. Wenn Sie auf ein Vorkommen klicken, öffnet Emacs diese Datei und navigiert zu der Zeile, die sie enthält.

Wenn Sie versuchen, mehrere Dateien zu durchsuchen und zu ersetzen, können Sie dies mit dired options tun. Sie finden Informationen zu dieser Option hier .

    
Inaimathi 27.09.2010 16:55
quelle
1

* Für Frage A ***

In Eiszapfen ist C-x C-f standardmäßig ein Mehrfachbefehl . Das bedeutet, wenn Sie zu einer Reihe von Dateinamen vervollständigen:

  • Sie können selektiv mehrere Kandidaten bearbeiten (zB besuchen) (zB C-RET <, C-mouse-2 ).

  • Sie können auf alle Dateien reagieren, deren Namen mit Ihrer aktuellen Eingabe übereinstimmen - z. B. alle besuchen.

Dasselbe gilt für andere Icicles Dateibefehle, einschließlich solcher, mit denen Sie einen absoluten Dateinamen zuordnen können, was bedeutet, dass Ihre Minibuffermuster nicht nur mit dem nicht-verzeichnismäßigen Teil des Dateinamens übereinstimmen können Verzeichnisbestandteile auch.

Zum Beispiel stimmt C-x C-f mit einem Präfix arg mit absoluten Dateinamen überein. Und M-x icicle-locate-file macht dasselbe für alle Dateien in einem bestimmten Verzeichnis.

(Sie können einen Mehrfachbefehl immer als normalen Befehl verwenden: Cx Cf wirkt normal, wenn Sie RET oder mouse-2 verwenden Wenn Sie die zusätzlichen Tastenbelegungen nicht verwenden, um auf mehrere Dateien zu reagieren, werden Sie den Unterschied nie bemerken.)

Siehe Ссылка

* Für Frage B ***

Was Sie wollen, ist Eiszapfen Suche.

  • Der Befehl icicle-search-file durchsucht alle Dateien eines von Ihnen angegebenen Sets.
  • Der Befehl icicle-search-buffer durchsucht alle Puffer eines angegebenen Satzes.
  • Der Befehl icicle-search bewirkt beides: Dateien mit einem negativen Präfix arg, Puffer mit einem nicht negativen Präfix arg.

Mit diesen Befehlen können Sie eine Regexp angeben, um die Suchkontexte zu definieren: die Teile der Dateien oder Puffer, die Sie durchsuchen möchten. Zum Beispiel bedeutet .* Suche nach jeder Zeile.

Nachdem Sie die Suchkontexte definiert haben, geben Sie einen Text in den Minipuffer ein und verengen die Suchkontexte für Kandidaten auf diejenigen, die Ihrem Text entsprechen. Sie können M-SPC verwenden, um mehrere solcher Muster zu kombinieren.

Dann können Sie zu den ausgewählten Suchtreffern navigieren: C-RET oder C-mouse-2 , um zu besuchen oder einen Zyklus / Besuch mit C-down durchzuführen Sie können die übereinstimmenden Kandidaten sogar auf verschiedene Arten sortieren, sie einfach vergleichen oder die Zyklusreihenfolge ändern.

Siehe Ссылка

    
Drew 20.08.2011 22:38
quelle
0

Ich denke, dass Sie die Antwort künstlich einschränken. Sie müssen nicht alle Dateien in Emacs laden, um diese Vorkommen zu finden. Und sobald Sie die Vorkommen der Regexp gefunden haben, können Sie einfach mit einem Tastendruck zur Zeile in der Datei springen.

Meine bevorzugte Methode ist M-x igrep-find , weil mir die Schnittstelle igrep besser gefällt als Emacs grep-find .

Sie finden die igrep-Bibliothek auf emacswiki: igrep.el

Und die Verwendung wäre

%Vor%

, das einen Puffer mit allen Übereinstimmungen auffüllen würde, und dann (wie in auftreten, grep-find, Kompilierung usw.) können Sie Cx ' oder Mx next-error durch die Matches zu fahren.

    
Trey Jackson 27.09.2010 03:34
quelle

Tags und Links