TL; DR: erefactor-rename-symbol-in-buffer
Szukasz leksykalnie inteligentnej funkcji zmiany nazwy - takiej, która zmienia nazwy zmiennych według ich zakresu, a nie tylko głupiego znajdowania i zastępowania. Takie pakiety istnieją w wielu językach, ale od momentu pisania (kwiecień 2019 r.) Emacs Lisp nie ma wielu opcji. erefactor
Pakiet jest jedynym, wiem.
erefactor-rename-symbol-in-buffer
jest funkcją, którą chcesz. To inteligentne polecenie znajdź i zamień, które zastąpi symbole w bieżącym zakresie (w tym ciągi dokumentów). Ograniczeniem tego polecenia jest to, że nie będzie wyszukiwał poza bieżącym buforem. Jest sprytny, ale nie idealny. Poprosi Cię o potwierdzenie każdego zdarzenia, aby upewnić się, że wynik końcowy jest higieniczny.
Inną funkcją zmiany nazwy jest erefactor-rename-symbol-in-package
. To nie działa w ten sam sposób - działa tylko na symbolach globalnych. Zależy to od prawidłowego skonfigurowania pakietu, z systemem grupowania i prefiksem, i potrzebuje zmiennej dopasowującej prefiks pakietu. Nie jest bardzo solidny - zawiedzie, jeśli nie skonfigurujesz rzeczy tak, jak oczekuje ta funkcja. Myślę, że jeśli zmieniasz nazwę globalnego symbolu, równie dobrze możesz użyć naiwnego wyszukiwania i zamień, ponieważ globalne symbole w Elisp nie mają przestrzeni nazw. Korzyści ze zrozumienia leksykalnego są minimalne. To polecenie jest zbyt delikatne, by można było z niego skorzystać. Proponuję po prostu użyć projectile-replace
.
Erefactor ma wiele innych poleceń Elisp, które mogą ci się przydać. (Niekompletna) lista jest dostępna w pliku Readme .
Nie jest to opisane na stronie GitHub, ale erefactor
jest dostępne w MELPA ( M-x package-install RET erefactor
). Strona MELPA znajduje się tutaj .