Wie bearbeite ich ein Projekt in Emacs neu (ändere den Methodennamen überall)?

14

Ich möchte Teile eines OpenSource-Projekts umschreiben. Dies schließt das Umbenennen von Methoden ein. Wie kann ich das in emacs im gesamten Projekt effizient erledigen?

Ich würde lieber keine Hacks wie Suchen und Ersetzen in jedem Puffer verwenden.

Die unfun Katze
quelle
1
Welche Sprache?
Phils
Haben Sie sich ag / grep + wgrep + search / replace angesehen? Sie öffnen die Puffer nicht einzeln. Siehe auch
Kaushal Modi
Python. Mir ist klar, dass meine Frage nicht die beste war, sorry.
The Unfun Cat
Da diese Frage nach oben gestoßen wurde (falls jemand von Google darauf stößt), gibt es eine dedizierte Python-Bibliothek für das Refactoring namens Rope. Es ist intelligenter als die anderen angebotenen Lösungen, da es den Kontext berücksichtigt. Es ist in Emacs in einem Paket namens implementiert ropemacs.
Jcaw
@TheUnfunCat können Sie Ihrer Frage mehr Kontext hinzufügen? Ab sofort ist es ziemlich vage, und das Hinzufügen, dass Sie dies in einem Python-Projekt tun möchten, würde eine Menge Dinge klären.
DoMiNeLa10

Antworten:

14

Ich benutze jetzt helm-ag, um alle Instanzen des Funktionsnamens zu finden (sucht in allen Dateien, einschließlich Unterverzeichnissen, nicht nur in offenen Puffern), und gebe dann C-c C-eeinen Puffer ein, der alle Übereinstimmungen auflistet und dort ändere ich den Funktionsnamen. Wenn ich fertig bin, drücke ich C-c C-c (helm-ag--edit-commit), um die Änderungen an allen geöffneten Dateien zu speichern.

Das mag verwirrend klingen, aber siehe https://github.com/ShingoFukuyama/helm-swoop

Wenn Sie es sich wünschen, werden Sie vor Freude weinen, dass solch eine wunderbare Funktionalität existiert.

Die unfun Katze
quelle
1
Es lief mir eine Träne über die Wange.
Mihai
1
Ich hatte buchstäblich Tränen in den Augen, als ich diesen Workflow zum ersten Mal ausführte, kein Scherz
Paul
Tolle Lösung!
fraxture
6

Da Sie die Sprache nicht angegeben haben, ist es schwierig, bessere Antworten als "Suchen und Ersetzen" zu geben.

Wgrep verwenden

Wenn Sie nur alle Instanzen eines Symbols (interaktiv) durch ein anderes ersetzen möchten, ist wgrep die beste Wahl. Hiermit können Sie den Grep-Ergebnispuffer interaktiv bearbeiten.

  1. Tun M-x package-install RET wgrep.
  2. Rennen M-x rgrep. Es wird Ihnen ein paar einfache Fragen stellen und dann eine rekursive Suche nach dem Suchbegriff in dem Verzeichnis durchführen, das Sie angegeben haben.
  3. Wechseln Sie in den Ergebnispuffer und machen Sie M-x wgrep-change-to-wgrep-mode. Dieser Puffer kann jetzt bearbeitet werden. Alle Änderungen, die Sie hier vornehmen, werden in den Dateien selbst wiedergegeben.
  4. Führen Sie ein replace-regexpoder ein query-replace-regexpin diesem Puffer aus, um das Refactoring durchzuführen.
  5. Beenden Sie Ihre Änderungen mit M-x wgrep-save-all-buffersund M-x wgrep-finish-edit.
Malabarba
quelle
3

Sie können counsel-rggefolgt von verwenden C-c C-o, um eine Liste aller Kandidaten in einem Puffer abzurufen. Drücken Siew , um sie mit zu bearbeiten wgrep. Ich empfehle ieditfür Symbolumbenennungen. Drücken Sie C-c C-c, um zu bestätigen.

Abhängigkeiten:

abo-abo
quelle