Ich bin gerade am Anfang eines Wechselprozesses, weiter Emacs. Allerdings habe ich zwei grundlegende Probleme.
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
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.
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:
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.
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 .
* 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.
icicle-search-file
durchsucht alle Dateien eines von Ihnen angegebenen Sets. icicle-search-buffer
durchsucht alle Puffer eines angegebenen Satzes. 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 Ссылка
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