TL; DR: erefactor-rename-symbol-in-buffer
Вы ищете лексически интеллектуальную функцию переименования - такую, которая переименовывает переменные по объему, а не просто ищет и заменяет. Подобные пакеты существуют для многих языков, но на момент написания (апрель 2019 г.) вариантов для Emacs Lisp практически не было. erefactor
Пакет только один я знаю.
erefactor-rename-symbol-in-buffer
это функция, которую вы хотите. Это интеллектуальная команда поиска и замены, которая заменит символы в текущей области (включая строки документов). Ограничением этой команды является то, что она не будет искать вне текущего буфера. Это умно, но не идеально. Он попросит вас подтвердить каждый случай, чтобы убедиться, что конечный результат является санитарным.
Другая функция переименования erefactor-rename-symbol-in-package
. Это не работает так же - оно работает только с глобальными символами. Он зависит от того, правильно ли настроен ваш пакет, с системой группировки и префиксом, и ему нужна переменная, соответствующая префиксу пакета. Он не очень надежен - он потерпит неудачу, если вы не настроили все так, как ожидает эта функция. Я думаю, что если вы переименуете глобальный символ, вы также можете использовать наивный поиск и замену, поскольку глобальные символы в Elisp не имеют пространства имен. Преимущества лексического понимания минимальны. Эта команда слишком хрупкая для компромисса. Я бы предложил просто использовать projectile-replace
.
Erefactor имеет ряд других команд Elisp, которые могут оказаться полезными. (Неполный) список доступен в файле readme .
Это не описано на странице GitHub, но erefactor
доступно на MELPA ( M-x package-install RET erefactor
). Страницу MELPA можно найти здесь .