TL; DR: erefactor-rename-symbol-in-buffer
Você está procurando uma função de renomeação lexicamente inteligente - uma que renomeie variáveis por seu escopo, não apenas um achado e substituído estúpido. Pacotes como este existem para muitos idiomas, mas até o momento da escrita (abril de 2019), não existem muitas opções para o Emacs Lisp. O erefactor
pacote é o único que eu conheço.
erefactor-rename-symbol-in-buffer
é a função que você deseja. É um comando inteligente de localização e substituição que substituirá os símbolos no escopo atual (incluindo as instruções). A limitação deste comando é que ele não pesquisará fora do buffer atual. É inteligente, mas não perfeito. Ele solicitará que você confirme cada ocorrência para garantir que o resultado final seja higiênico.
A outra função de renomeação é erefactor-rename-symbol-in-package
. Isso não funciona da mesma maneira - funciona apenas em símbolos globais. Ele depende do seu pacote ser configurado corretamente, com um sistema de agrupamento e prefixo, e precisa da variável para corresponder ao prefixo do pacote. Não é muito robusto - falhará se você não tiver configurado as coisas da maneira que essa função espera. Acho que se você estiver renomeando um símbolo global, também poderá usar uma localização e substituição ingênuas, pois os símbolos globais no Elisp não têm um espaço para nome. Os benefícios do entendimento lexical são mínimos. Este comando é muito frágil para a troca. Eu sugeriria apenas usar projectile-replace
.
O Erefactor possui vários outros comandos do Elisp que você pode achar úteis. Uma lista (incompleta) está disponível no leia - me .
Não está descrito na página do GitHub, mas erefactor
está disponível no MELPA ( M-x package-install RET erefactor
). A página MELPA pode ser encontrada aqui .