TL; DR: erefactor-rename-symbol-in-buffer
Sie suchen nach einer lexikalisch intelligenten Umbenennungsfunktion, die Variablen nach ihrem Umfang umbenennt und nicht nur dummes Suchen und Ersetzen. Pakete wie dieses gibt es für viele Sprachen, aber zum Zeitpunkt des Schreibens (April 2019) gibt es für Emacs Lisp nicht viele Optionen. Das erefactor
Paket ist das einzige, das ich kenne.
erefactor-rename-symbol-in-buffer
ist die gewünschte Funktion. Es ist ein intelligenter Befehl zum Suchen und Ersetzen, der Symbole im aktuellen Bereich (einschließlich Dokumentzeichenfolgen) ersetzt. Die Einschränkung dieses Befehls besteht darin, dass nicht außerhalb des aktuellen Puffers gesucht wird. Es ist klug, aber nicht perfekt. Sie werden aufgefordert, jedes Vorkommen zu bestätigen, um sicherzustellen, dass das Endergebnis hygienisch ist.
Die andere Umbenennungsfunktion ist erefactor-rename-symbol-in-package
. Dies funktioniert nicht auf die gleiche Weise - es funktioniert nur bei globalen Symbolen. Es setzt voraus, dass Ihr Paket korrekt eingerichtet ist, mit einem Gruppierungssystem und einem Präfix, und die Variable muss mit dem Präfix des Pakets übereinstimmen. Es ist nicht sehr robust - es schlägt fehl, wenn Sie die Einstellungen nicht so vorgenommen haben, wie es diese Funktion erwartet. Ich denke, wenn Sie ein globales Symbol umbenennen, können Sie auch ein naives Suchen und Ersetzen verwenden, da globale Symbole in Elisp keinen Namespace haben. Die Vorteile des lexikalischen Verständnisses sind minimal. Dieser Befehl ist zu zerbrechlich für den Kompromiss. Ich würde vorschlagen, nur zu verwenden projectile-replace
.
Erefactor verfügt über eine Reihe weiterer Elisp-Befehle, die Sie möglicherweise nützlich finden. Eine (unvollständige) Liste finden Sie in der Readme-Datei .
Es wird nicht auf der GitHub-Seite beschrieben, erefactor
ist aber auf MELPA ( M-x package-install RET erefactor
) verfügbar . Die MELPA-Seite finden Sie hier .