Verwenden von Emacs zum rekursiven Suchen und Ersetzen in Textdateien, die noch nicht geöffnet sind

212

Im Anschluss an diese Frage wird versucht herauszufinden, wie so etwas zu tun ist, was einfach sein sollte. Dies hindert mich insbesondere daran, mich mehr an die Verwendung von Emacs zu gewöhnen und stattdessen den Editor zu starten, mit dem ich bereits vertraut bin. Ich verwende das Beispiel hier ziemlich oft beim Bearbeiten mehrerer Dateien.

In Ultraedit würde ich Alt + s und dann p drücken, um ein Dialogfeld mit den folgenden Optionen anzuzeigen: Suchen (einschließlich der Verwendung regulärer Ausdrücke über mehrere Zeilen hinweg), Ersetzen durch, In Dateien / Typen, Verzeichnis, Übereinstimmungsfall, Nur ganzes Wort abgleichen, Liste Geänderte Dateien und Unterverzeichnisse durchsuchen. Normalerweise benutze ich zuerst die Maus, um per Mausklick den Text auszuwählen, den ich ersetzen möchte.

Verwenden Sie nur Emacs selbst (unter Windows XP), ohne ein externes Dienstprogramm aufzurufen. So ersetzen Sie alle foo \ nbar durch bar \ nbaz in *.cund *.hDateien in einem Ordner und allen darunter liegenden Ordnern. Vielleicht ist Emacs nicht das beste Werkzeug, um dies zu tun, aber wie kann es einfach mit einem minimalen Befehl gemacht werden?

Rob Kam
quelle

Antworten:

370
  1. M-x find-name-dired: Sie werden aufgefordert, ein Stammverzeichnis und ein Dateinamenmuster einzugeben.
  2. Drücken Sie t Sie auf „Toggle - Marke“ für alle Dateien gefunden.
  3. Drücken Sie Qfür "Query-Ersetzen in Dateien ...": Sie werden für die Abfrage / Substitution regexps gefragt.
  4. Gehen Sie wie folgt vor query-replace-regexp: SPACEErsetzen und Wechseln zum nächsten Spiel, nÜberspringen eines Spiels usw.
  5. Drücken Sie C-x s, um Puffer zu speichern. (Sie können dann drücken y, noder !alle auf einmal zu speichern)
Chris Conway
quelle
10
Nein, es ist rekursiv. Die nicht rekursive Version wäre% m im Dired-Modus.
Chris Conway
5
Vielleicht, weil Sie C: \ WINDOWS \ system32 \ find.exe aufrufen, nicht GNU find.
Jazz
6
Steen, Chris: Wahrscheinlich nicht genau das, was Sie wollen, aber Sie können 'Cx' (Save-Some-Buffer) verwenden. Es fordert Sie zu jeder geänderten Datei auf, sodass Sie nur mehrmals 'y' drücken müssen.
Danielpoe
48
C-x s !um alle Dateien auf einmal zu speichern.
cYrus
10
M-,um die Suche und das Ersetzen fortzusetzen (z. B. nach der Eingabeaufforderung "Datei zurücksetzen", wenn die Datei auf der Festplatte geändert wurde).
Fischbach
37
  • M-x find-name-dired RET
    • Es kann einige Zeit dauern, bis alle Dateien in der Liste angezeigt werden. Scrollen Sie nach unten ( M->), bis " find finished" angezeigt wird, um sicherzustellen, dass alle geladen wurden
  • Drücken Sie tauf „Toggle - Marke“ für alle Dateien gefunden
  • Drücken Sie Qfür "Query-Ersetzen in Dateien ...": Sie werden für die Abfrage / Substitution regexps gefragt.
  • Verfahren Sie wie bei query-replace-regexp: SPACE oder yzum Ersetzen und Verschieben zum nächsten Spiel, n zum Überspringen eines Spiels usw.
    • Art ! Um alle Vorkommen in der aktuellen Datei zu ersetzen, ohne zu fragen, Nüberspringen Sie alle möglichen Ersetzungen für den Rest der aktuellen Datei. ( Nist nur Emacs 23+)
    • Geben Sie Folgendes ein, um alle Dateien ohne weitere Aufforderung zu ersetzen Y.
  • Rufen Sie "ibuffer" auf ( C-x C-bfalls an ibuffer gebunden oder M-x ibuffer RET), um alle geöffneten Dateien aufzulisten .
  • Geben Sie ein * u, um alle nicht gespeicherten Dateien zu markieren. Geben Sie ein, Sum alle markierten Dateien zu speichern
  • * * RETum alle Markierungen aufzuheben, oder geben Sie ein D, um alle markierten Dateien zu schließen

Diese Antwort wird aus dieser Antwort , von dieser Site und aus meinen eigenen Notizen kombiniert . Verwenden von Emacs 23+.

Frank Henard
quelle
3
ibufferist nicht C-x C-bstandardmäßig gebunden .
Phils
2
Ich persönlich empfehle den Leuten, sich daran C-x C-bzu binden ibuffer, weil es so viel besser ist als die Standardbindung. Fügen Sie einfach (global-set-key (kbd "C-x C-b") 'ibuffer)in Ihre .emacs - Datei. Andernfalls verwenden Sie M-x ibuffer RETdie obigen Anweisungen.
Phils
OK. Ich glaube, ich habe das Emacs-Startup-Kit, weshalb meins gebunden ist
Frank Henard
1
Die Datei bla-bla-blawird schreibgeschützt besucht und die Suche wird beendet. Wie kann man das vermeiden / ignorieren und weiter ersetzen? Vielen Dank.
Felipe
3
Warum, ibufferwenn Sie C-x s( save-some-buffers) und tippen können !? Ich will nicht schimpfen, nur neugierig. PS Plus für die Beschreibung !, Nund Y.
d12frosted
17

Die Antworten sind großartig, aber ich dachte, ich würde einen etwas anderen Ansatz hinzufügen.

Es ist ein interaktives Verfahren und erfordert wgrep, rgrepund iedit. Beide ieditund wgrepmüssen über MELPA oder Marmelade installiert werden (mit M-x package-list-packages)

Führen M-x rgrepSie zuerst die Zeichenfolge aus, nach der Sie suchen.

Sie können Dateitypen / Muster und den zu rekursierenden Ordner angeben.

Als nächstes müssen Sie es wgrepstarten C-s C-p.

Mit Wgrep können Sie die rgrepErgebnisse bearbeiten. Legen Sie daher einen Bereich in der Zeichenfolge fest, der übereinstimmt und iedit-modemit C-;dem Sie beginnen (abhängig von Ihrem Terminal müssen Sie diesen möglicherweise erneut binden).

Alle Vorkommen können sofort bearbeitet werden. C-x C-sbegehen wgrep. Dann C-x s !die geänderten Dateien zu speichern.

Der Hauptvorteil dieser Methode besteht darin, dass Sie iedit-modebestimmte Übereinstimmungen deaktivieren können M-;. Sie können die Ergebnisse auch verwenden, rgrepum in die Dateien zu springen, z. B. wenn Sie eine unerwartete Übereinstimmung haben.

Ich finde es sehr nützlich, um Quellbearbeitungen durchzuführen und Symbole (Variablen, Funktionsnamen usw.) in einem Projekt umzubenennen.

Wenn Sie den iedit-Modus noch nicht kennen / verwenden, ist er ein sehr praktisches Tool. Ich empfehle Ihnen dringend, ihn sich anzusehen.

ocodo
quelle
Diese Technik ist auch ohne Verwendung von iedit ziemlich leistungsfähig. Es verwandelt sich in das Wissen, wie man grep (einfach mit lgrep / rgrep), in das Wissen, wie man Bulk Search-Replace macht!
NeilenMarais
Das Kombinieren von rgrep / wgrep / macros ist fantastisch.
ocodo
2
Die Tastenkombination zum Starten wgrepist C-c C-pübrigens.
Techniao
15

Projectile ist wirklich nett: Cc pr führt den Befehl projectile-replace aus

eflanigan00
quelle
13

Ich verwende im Allgemeinen andere Tools, um diese Aufgabe auszuführen, und es scheint, als ob viele der Ansätze, die in EmacsWikis Eintrags- Shell zum Suchen und Ersetzen über Dateien hinweg erwähnt wurden, herauskommen, aber das Findr-Paket sieht sehr vielversprechend aus.

Teil der Quelldatei stehlen :

(defun findr-query-replace (from to name dir)
  "Do `query-replace-regexp' of FROM with TO, on each file found by findr.
Blair Conrad
quelle
Wie versuche ich mit findr.el, die Zeichenfolge "Collectible" in allen Dateien mit der Erweiterung java und hxx zu finden?
swdev
@swdev: Mx findr-query-replace RET Sammelbares RET <das Ersetzen> RET. * \. java RET <das Verzeichnis, in dem mit der Suche begonnen werden soll> RET
ShreevatsaR
Ich mag diesen Ansatz (er vermeidet jegliches Umschalten, das mit dem direkten Ansatz verbunden ist). Ich benutze einige praktische Funktionen, um dies mit dem Projektil (Projekt-Root-Discovery) zu kombinieren und das Ding an der folgenden Stelle zu ersetzen: gist.github.com/anonymous/055a9d62f9fc824153599724b8f44d57
Att Righ
6

Informationsquelle: 1

Für Benutzer von emacs pro:

  1. Rufen Sie dired auf, um Dateien in dir aufzulisten, oder rufen Sie find-dired auf, wenn Sie alle Unterverzeichnisse benötigen.
  2. Markieren Sie die gewünschten Dateien. Sie können durch Regex markieren, indem Sie 【% m typ eingeben.
  3. Geben Sie Q ein, um dired-do-query-replace-regexp aufzurufen.
  4. Geben Sie Ihren Suchbegriff ein und ersetzen Sie die Zeichenfolge. 〔☛ allgemeines Elisp-Regex-Muster〕
  5. Geben Sie für jedes Vorkommen y zum Ersetzen und n zum Überspringen ein. Geben Sie 【Strg + g】 ein, um den gesamten Vorgang abzubrechen.
  6. Art ! Um alle Vorkommen in der aktuellen Datei zu ersetzen, ohne zu fragen, überspringt N alle möglichen Ersetzungen für den Rest der aktuellen Datei. (N ist nur Emacs 23)
  7. Geben Sie Y ein, um alle Dateien ohne weitere Aufforderung zu ersetzen. (Nur Emacs 23)
  8. Rufen Sie ibuffer auf, um alle geöffneten Dateien aufzulisten. Geben Sie 【* u】 ein, um alle nicht gespeicherten Dateien zu markieren, geben Sie S ein, um alle markierten Dateien zu speichern, und geben Sie D ein, um alle zu schließen.

Schritt-für-Schritt-Anleitung für Emacs-Anfänger

Wählen Sie Zieldateien

Starten Sie emacs, indem Sie in der Eingabeaufforderung der Befehlszeilenschnittstelle "emacs" eingeben. (Oder doppelklicken Sie auf das Emacs-Symbol, wenn Sie sich in einer Grafikbenutzeroberfläche befinden.)

Dateien in einem Verzeichnis auswählen

Zuerst müssen Sie die Dateien auswählen, die Sie ersetzen möchten. Verwenden Sie das grafische Menü 〖Datei ▸ Verzeichnis öffnen〗. Emacs fragt Sie nach einem Verzeichnispfad. Geben Sie den Verzeichnispfad ein und drücken Sie die Eingabetaste.

Jetzt wird Ihnen die Liste der Dateien angezeigt, und jetzt müssen Sie die Dateien markieren, an denen das Regex-Suchen / Ersetzen arbeiten soll. Sie markieren eine Datei, indem Sie den Cursor auf die gewünschte Datei bewegen und dann m drücken. Heben Sie die Markierung auf, indem Sie u drücken. (Um Unterverzeichnisse aufzulisten, bewegen Sie den Cursor in das Verzeichnis und drücken Sie i. Der Inhalt des Unterverzeichnisses wird unten aufgelistet.) Um alle Dateien mit einem regulären Ausdruck zu markieren, geben Sie 【% m】 ein und geben Sie dann Ihr reguläres Verzeichnis ein. Wenn Sie beispielsweise alle HTML-Dateien markieren möchten, geben Sie 【% m】 und dann .html $ ein. (Eine Liste der Markierungsbefehle finden Sie im grafischen Menü „Markieren“ (dieses Menü wird angezeigt, wenn Sie sich im Dired-Modus befinden).)

Auswählen von Dateien in einem Verzeichnis und allen seinen Unterverzeichnissen

Wenn Sie Dateien in einem Verzeichnis suchen / ersetzen möchten, einschließlich Hunderten von Unterverzeichnissen, finden Sie hier eine Methode zum Auswählen aller dieser Dateien.

Rufen Sie find-dired an. (Sie rufen einen Befehl auf, indem Sie 【Alt + x】 drücken.) Geben Sie dann den Verzeichnisnamen ⁖ / Users / mary / myfiles ein

Hinweis: Wenn Sie Emacs auf einem nicht grafischen Unix-Textterminal verwenden und 【Alt + x】 nicht funktioniert, lautet der entsprechende Tastendruck 【Esc x】.

Emacs fragt Sie mit der Aufforderung "Find ausführen (mit Argumenten):". Wenn Sie alle HTML-Dateien ersetzen müssen, geben Sie -name "* html" ein. Wenn Sie sich nicht für die Art der Datei interessieren, sondern nur für alle Dateien unter diesem Verzeichnis, geben Sie "-type f" ein.

Markieren Sie nun die Dateien wie oben beschrieben.

Interaktives Suchen / Ersetzen

Jetzt können Sie die interaktive Suche ersetzen. Nehmen wir zur Vereinfachung an, Sie möchten nur das Wort "schnell" durch "super" ersetzen. Rufen Sie jetzt dired-do-query-replace-regexp auf. Sie werden aufgefordert, die Regex-Zeichenfolge und die Ersatzzeichenfolge einzugeben. Geben Sie "quick" ein, geben Sie "super" ein.

Jetzt verwendet Emacs Ihr Muster und überprüft die Dateien und stoppt und zeigt Ihnen, wann immer eine Übereinstimmung aufgetreten ist. In diesem Fall werden Sie von emacs aufgefordert, die Änderung vorzunehmen oder die Änderung zu überspringen. Geben Sie y ein, um die Änderung vorzunehmen. Geben Sie zum Überspringen n ein. Wenn Sie einfach möchten, dass Emacs alle derartigen Änderungen an der aktuellen Datei vornehmen, geben Sie! Ein.

Wenn Sie den gesamten Vorgang abbrechen möchten, ohne die von Ihnen vorgenommenen Änderungen zu speichern, geben Sie tr Strg + g】 ein und beenden Sie Emacs über das Menü ▸ Datei ac Emacs beenden〗.

Speichern der geänderten Dateien

Nachdem Sie die obige Prüfung durchlaufen haben, müssen Sie noch einen weiteren Schritt ausführen, nämlich das Speichern der geänderten Dateien.

Wenn Sie Emacs Version 22 oder höher verwenden, rufen Sie ibuffer auf, um in einen Pufferlistenmodus zu wechseln. Geben Sie dann 【* u】 ein, um alle nicht gespeicherten Dateien zu markieren, und geben Sie S ein, um alle zu speichern. (das ist Schicht-s)

Wenn Sie eine Emacs-Version 21 verwenden, können Sie dies tun: Listenpuffer aufrufen, dann den Cursor auf die Datei bewegen, die Sie speichern möchten, und s eingeben. Die Datei wird für eine spätere Speicheraktion markiert. Geben Sie u ein, um die Markierung aufzuheben. Wenn Sie fertig sind, geben Sie x ein, um das Speichern aller zum Speichern markierten Dateien auszuführen. (In Emacs wird die geöffnete Datei als "Puffer" bezeichnet. Ignorieren Sie dort andere Dinge.)

Alternativ zu den oben genannten Optionen können Sie auch Save-Some-Puffer (Strg + xs) aufrufen. Dann zeigt emacs jede nicht gespeicherte Datei an und fragt, ob Sie sie speichern möchten.

Hinweis: Der reguläre Ausdruck von emacs ist nicht der gleiche wie der von Perl oder Python, aber ähnlich. Eine Zusammenfassung und allgemeine Muster finden Sie unter: Emacs Regex.

Prashant Sharma
quelle
2
Diese Antwort sollte es für Anfänger freundlicher machen als die am meisten gewählte Antwort, die ich hoffe. Vielen Dank übrigens, dass Sie mich motiviert haben, das Ganze anstelle des Links zu setzen.
Prashant Sharma
Die Antwort beginnt mit der Quelle: als erste Zeile. Gründe für das Einfügen von Kopien sind: Manchmal ist der externe Link zu Blogs veraltet und die Antwort wird unbrauchbar. Und so wie es das Wiki-Meta vorschlägt. Ich beschloss, das Ganze zu kopieren.
Prashant Sharma
5

Die Verwendung von dired zum Wiederherstellen eines tiefen Verzeichnisbaums wird für diese Aufgabe etwas langsam sein. Sie könnten die Verwendung von Tags-Abfrage-Ersetzen in Betracht ziehen . Dies bedeutet, dass Sie eine Tags-Tabelle erstellen müssen, aber das ist oft trotzdem nützlich und schnell.

Alex Coventry
quelle
Ich habe gerade ein Verzeichnis mit über 14.000 Dateien ausprobiert. Es dauerte einige Sekunden, bis Emacs angezeigt wurde. Also definitiv nicht langsam (mehr).
Berend de Boer
3

Für offene Puffer mache ich Folgendes:

(defun px-query-replace-in-open-buffers (arg1 arg2)
  "query-replace in all open files"
  (interactive "sRegexp:\nsReplace with:")
  (mapcar
   (lambda (x)
     (find-file x)
     (save-excursion
       (goto-char (point-min))
       (query-replace-regexp arg1 arg2)))
   (delq
    nil
    (mapcar
     (lambda (x)
       (buffer-file-name x))
     (buffer-list)))))
yPhil
quelle
3

M-X Dired, und t, um alle Dateien zu markieren und QErsatztext in allen abzufragen. Sie können ein Unterverzeichnis erweitern, indem Sie den iBefehl vor dem Ersetzen der Abfrage verwenden. Die wichtigsten Informationen, die ich hinzufüge, sind, dass wenn Sie dem i-Befehl ein Präfix (control-u) geben, Sie zur Eingabe von arg aufgefordert werden und das Argument -R rekursiv alle subdirs in den diredPuffer erweitert. Jetzt können Sie jede Datei in einem gesamten Verzeichnis abfragen und durchsuchen.

Zack Murray
quelle
2

Eine andere Möglichkeit ist die Verwendung der Eiszapfensuche . Dies ist eine andere Art der inkrementellen Suche, bei der die Minibuffer-Eingabe für Suchtreffer abgeschlossen wird. Während Sie Ihre aktuelle Eingabe ändern, wird der Satz übereinstimmender Treffer im Puffer aktualisiert *Completions*.

Sie können eine beliebige Anzahl von Dateien, Puffern oder mit Lesezeichen versehenen Speicherorten durchsuchen, die Sie mithilfe des Minibuffer-Patterns (z. B. Regexp) auswählen können.

Wenn Sie einen Suchtreffer besuchen, können Sie Suchtreffer bei Bedarf entweder den gesamten Treffer oder nur den Teil davon ersetzen , der Ihrer aktuellen Minibuffer-Eingabe entspricht. Ersatz bei Bedarf bedeutet, dass Sie nicht nacheinander nach jedem Suchtreffer gefragt werden. Sie greifen in beliebiger Reihenfolge direkt auf die gewünschten Treffer zu. Dieser Ansatz kann effektiver sein als das Ersetzen von Abfragen, wenn Sie nur eine begrenzte Anzahl von Ersetzungen vornehmen müssen: Sie überspringen die ausführliche y/nEingabeaufforderung.

Suche ist über Suche Suchkontexte , die Sie definieren. Sie sind nicht darauf beschränkt, den gesamten Text in den Zieldateien zu durchsuchen (z. B. können Sie Kommentare oder bestimmte Arten von Programmabschnitten überspringen). Ein einfaches Beispiel für einen Suchkontext ist eine Zeile wie in grep, aber ein Kontext kann ein beliebiger musterangepasster Textblock sein, den Sie mögen. Normalerweise definieren Sie die Suchkontexte mithilfe eines regulären Ausdrucks, können jedoch stattdessen eine Funktion verwenden. Zusätzlich zur Definition Ihrer eigenen gibt es vordefinierte Icicles-Suchbefehle für verschiedene Arten von Kontexten: Blöcke mit Texteigenschaften oder Überlagerungseigenschaften, Dinge, die auf den Punkt gebracht werden usw.

Sie können auch sortieren die Suchtreffer in verschiedenen Sortierungen für einen leichteren Zugang / Navigation.

Drew
quelle
2

find-name-dired ist OK, aber:

  • Alle Dateien, die Sie erhalten, stimmen mit demselben regulären Ausdruck überein.
  • find-diredist in dieser Hinsicht flexibler, aber es ist auch für die Verwendung allgemeiner Regeln vorgesehen (auch wenn sie beliebig komplex sein können). Und hat natürlich findeine eigene, komplexe Sprache.
  • Wenn Sie dann nur auf einige der Dateien reagieren möchten, deren Namen im find(-name)-diredPuffer gesammelt wurden , müssen Sie diese entweder markieren oder die Zeilen derjenigen löschen / weglassen, auf die Sie nicht reagieren möchten.

Eine Alternative besteht darin, Dired + -Befehle zu verwenden, die auf (a) die markierten Dateien und (b) alle markierten Dateien (oder alle Dateien, falls keine markiert sind) in den markierten Unterverzeichnissen ... rekursiv gefunden werden . Dies gibt Ihnen sowohl Allgemeingültigkeit als auch einfache Kontrolle über die Dateiauswahl. Diese "hier und unten" -Befehle befinden sich alle im Präfix- M-+Modus auf Präfixschlüssel.

Zum Beispiel M-+ Qist es dasselbe wie Q--- query-replace, aber die Zieldateien sind alle diejenigen, die im aktuellen Verzeichnis und in allen markierten Unterverzeichnissen markiert sind, down, down, down ...

Ja, eine Alternative zur Verwendung solcher Befehle hier und unten besteht darin , alle Unterverzeichnisse und ihre Unterverzeichnisse rekursiv einzufügen und dann einen Befehl der obersten Ebene wie z Q. Oft kann es jedoch zweckmäßig sein, sich nicht mit eingefügten Unterverzeichnissen zu beschäftigen.

Und dazu benötigen Sie ohnehin eine schnelle Möglichkeit, alle diese Unterverzeichnisse rekursiv einzufügen . Auch hier kann Dired + helfen. M-+ M-ifügt rekursiv alle markierten Unterverzeichnisse und ihre eigenen markierten Unterverzeichnisse ein. Das heißt, es ist wie M-i(was die markierten Unterverzeichnisse in Dired + einfügt ), aber es wirkt rekursiv auf Unterverzeichnisse.

(Alle diese "hier und unten" Dired + -Befehle befinden sich im Menü Multiple > Hier und unten markiert .)

Sie können Dired-Vorgänge auch für eine Emacs- Dateigruppe ausführen. Hierbei handelt es sich um einen gespeicherten Satz von Namen von Dateien, die sich an einer beliebigen Stelle befinden. Wenn Sie Eiszapfen verwenden , können Sie einen Dired-Puffer nur für die Dateien in einer Dateigruppe oder für andere Arten gespeicherter Dateilisten öffnen.

Sie können auch einen beliebigen Dired-Puffer mit einem Lesezeichen versehen , einschließlich eines Puffers, den Sie mit erstellen find(-name)-dired. Auf diese Weise können Sie später schnell zu einem solchen Satz (z. B. einem Projektsatz) zurückkehren. Wenn Sie Lesezeichen + verwenden, werden mit einem Lesezeichen für einen Dired-Puffer (a) seine lsSchalter, (b) welche Dateien markiert, (c) welche Unterverzeichnisse eingefügt und (d) welche (Unter-) Verzeichnisse ausgeblendet werden. All dies wird wiederhergestellt, wenn Sie zum Lesezeichen "springen". Mit Lesezeichen + können Sie auch einen ganzen Baum von Dired-Puffern mit einem Lesezeichen versehen. Wenn Sie zum Lesezeichen springen, werden alle Puffer im Baum wiederhergestellt.

Drew
quelle
Wer: Möchten Sie erklären, warum Sie diese Antwort abgelehnt haben?
Drew
1

Ich möchte ein weiteres großartiges Werkzeug vorschlagen, das noch nicht erwähnt wurde, nämlich Helm .

Es ist ein großartiger Ersatz für viele Standard-Emacs-Vorgänge, die das Abschließen, Suchen usw. umfassen. Insbesondere helm-find-filesermöglicht es das Ersetzen von Abfragen (einschließlich regulärer Ausdrücke) in mehreren ausgewählten Dateien.

Öffnen Sie einfach helm-find-files, markieren Sie die relevanten Dateien mit M-SPCund verwenden Sie F6oder F7, um Abfrage ersetzen oder Abfrage ersetzen regulären Ausdruck in den ausgewählten Dateien auszuführen.

Andrzej Pronobis
quelle
Kann helm-find-filesmit regexp statt markieren M-SPC?
Nordlöw
-2

Es ist nicht Emacs, aber xxdiff wird mit einem Tool namens xx-rename geliefert, das dies für mehrere Zeichenfolgen gleichzeitig (z. B. Von Von Von Von Von Bis) mit interaktiver Eingabeaufforderung ausführt, Sicherungen aller geänderten Dateien speichert und einen Kurzfilm erstellt Protokoll der mit dem Kontext vorgenommenen Änderungen. Das ist es, was ich normalerweise benutze, wenn ich große / globale Umbenennungen mache.

blais
quelle