TL; DR: erefactor-rename-symbol-in-buffer
Ви шукаєте лексично інтелектуальну функцію перейменування - функцію, яка перейменовує змінні за їх обсягом, а не просто тупу знаходження та заміну. Такі пакети існують для багатьох мов, але що стосується написання (квітень 2019), Emacs Lisp насправді не існує багато. erefactor
Пакет тільки один я знаю.
erefactor-rename-symbol-in-buffer
це потрібна вам функція. Це інтелектуальна команда "Знайти та замінити", яка замінить символи в поточному діапазоні (включаючи документи). Обмеженням цієї команди є те, що вона не здійснюватиме пошук за межами поточного буфера. Це розумно, але не ідеально. Він попросить підтвердити кожну ситуацію, щоб забезпечити санітарний результат.
Інша функція перейменування є erefactor-rename-symbol-in-package
. Це не працює так само - він працює лише на глобальних символах. Він покладається на правильне налаштування вашого пакунка із системою групування та префіксом, і йому потрібна змінна, щоб відповідати префіксу пакету. Це не дуже надійно - воно вийде з ладу, якщо ви не налаштували речі так, як очікує ця функція. Я думаю, що якщо ви перейменовуєте глобальний символ, ви можете також використовувати наївну знахідку та заміну, оскільки глобальні символи в Еліспі не мають простору імен. Переваги лексичного розуміння мінімальні. Ця команда занадто крихка для компромісу. Я б запропонував просто використовувати projectile-replace
.
У Erefactor є ряд інших команд Elisp, які можуть вам бути корисними. У readme доступний (неповний) список .
Це не описано на сторінці GitHub, але erefactor
доступне на MELPA ( M-x package-install RET erefactor
). Сторінку MELPA можна знайти тут .