@Malabarba erwähnte die Verwendung von wgrep
package zur Bearbeitung von grep / ack / ag-Ergebnissen.
Ich möchte eine detaillierte Einführung in die Verwendung des ag
Pakets und der wgrep-ag
Pakete schreiben , um die Bearbeitung von Ergebnissen zu erreichen, die mit dem multiple-cursors
Paket erzielt wurden .
Diese Pakete sind über Melpa erhältlich. Sie müssen auch ag
aka the_silver_searcher auf Ihrem System installiert haben .
Diese Anleitung gilt für Fälle, in denen Sie nach einer Möglichkeit suchen, einzelne Zeilen an allen / ausgewählten gefundenen Stellen zu bearbeiten ag
.
Installieren Sie ag
auf Ihrem System und den oben genannten Emacs-Paketen.
ag
unterstützt das Durchsuchen von Dateien mit Inhalten, die Ihrem angegebenen regulären Ausdruck entsprechen. Die einfachste Möglichkeit, festzustellen, ag
wo sich der Projektstamm befindet, besteht darin, dort einen leeren .git
Ordner abzulegen. Führen Sie dann die Suche mit M-x ag-project-regexp
.
Der Ergebnispuffer von ag search kann standardmäßig nicht bearbeitet werden. Um es bearbeitbar zu machen, M-x wgrep-change-to-wgrep-mode
verwenden Sie die wgrep
Standardbindung C-c C-p
.
Wenn Sie nun in all Ihren Dateien 'abcdef' in 'ghijkl' ändern müssen, suchen Sie nach 'abcdef' und der Ag-Ergebnispuffer zeigt alle Zeilen an, die diese Zeichenfolge enthalten. Anschließend können Sie diesen Puffer bearbeitbar machen und diese Zeichenfolgen manuell ändern. Diese Änderungen wirken sich auf die tatsächlichen Dateipuffer aus, wenn Sie M-x wgrep-finish-edit
die Standardbindung ausführen oder verwenden C-c C-e
. Sie können query-replace-regexp
diese Suche auch verwenden , um zu ersetzen.
Ich bevorzuge die multiple-cursors
schnelle Umgestaltung, damit ich in Echtzeit eine Rückmeldung darüber bekomme, wo meine mehrfachen Bearbeitungen gleichzeitig stattfinden. Markieren Sie die Zeichenfolge, die Sie ersetzen möchten, in diesem Ag-Ergebnispuffer und rufen Sie sie auf, M-x mc/mark-all-like-this
und bearbeiten Sie sie dann voller Ehrfurcht, während Sie sehen, wie Dinge an mehreren Stellen gleichzeitig bearbeitet werden.
Wenn Sie mit den oben erwähnten Änderungen zufrieden sind, müssen Sie C-c C-e
die Änderungen in den tatsächlichen Puffern "reflektieren". Die Puffer sind noch nicht gespeichert.
Um alle Puffer zu speichern, mache ich das normalerweise auf einmal, indem ich die Standardbindung von Emacs verwende C-x s !
.
Hier ist ein Beispiel für einen Anwendungsfall mit Screenshots:
Es zeigt den Vorgang des Ersetzens aller Instanzen von bind-to-modi-map
to bind-to-my-map
in my ~/.emacs.d/
.
Wenn ich bind-to-modi-map
in meinem Emacs-Installationsordner nach suche, erhalte ich das folgende Ergebnis:
Dieser Puffer ist schreibgeschützt.
Nachdem M-x wgrep-change-to-wgrep-mode
ich -modi-map
alle Instanzen dieser Auswahl mit M-x mc/mark-all-like-this
und nach dem Bearbeiten dieser Auswahl mit ausgewählt habe -my-map
, sieht es wie folgt aus:
Die blaue Markierung zeigt an, welche Zeilen geändert werden, wenn ich drücke C-c C-e
.
Nach dem Treffer sehen C-c C-e
Sie die Änderung in der aktuellen Datei in diesem Screenshot:
Ich würde dann alle geänderten Dateien mit speichern C-x s !
.