@Malabarba erwähnte die Verwendung von wgreppackage zur Bearbeitung von grep / ack / ag-Ergebnissen.
Ich möchte eine detaillierte Einführung in die Verwendung des agPakets und der wgrep-agPakete schreiben , um die Bearbeitung von Ergebnissen zu erreichen, die mit dem multiple-cursorsPaket erzielt wurden .
Diese Pakete sind über Melpa erhältlich. Sie müssen auch agaka 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 agauf Ihrem System und den oben genannten Emacs-Paketen.
agunterstützt das Durchsuchen von Dateien mit Inhalten, die Ihrem angegebenen regulären Ausdruck entsprechen. Die einfachste Möglichkeit, festzustellen, agwo sich der Projektstamm befindet, besteht darin, dort einen leeren .gitOrdner 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-modeverwenden Sie die wgrepStandardbindung 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-editdie Standardbindung ausführen oder verwenden C-c C-e. Sie können query-replace-regexpdiese Suche auch verwenden , um zu ersetzen.
Ich bevorzuge die multiple-cursorsschnelle 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-thisund 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-edie Ä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-mapto bind-to-my-mapin my ~/.emacs.d/.
Wenn ich bind-to-modi-mapin meinem Emacs-Installationsordner nach suche, erhalte ich das folgende Ergebnis:
Dieser Puffer ist schreibgeschützt.
Nachdem M-x wgrep-change-to-wgrep-modeich -modi-mapalle Instanzen dieser Auswahl mit M-x mc/mark-all-like-thisund 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-eSie die Änderung in der aktuellen Datei in diesem Screenshot:

Ich würde dann alle geänderten Dateien mit speichern C-x s !.