O @Malabarba mencionou o uso do wgreppacote para editar os resultados do grep / ack / ag.
Eu gostaria de escrever uma explicação detalhada de como uso o agpacote e os wgrep-agpacotes para obter a edição de resultados 'agregados' usando o multiple-cursorspacote.
Esses pacotes estão disponíveis no Melpa. Você também precisa ter o agaka the_silver_searcher instalado no seu sistema.
Este passo a passo se aplica aos casos em que você está procurando uma maneira de fazer edições de linha única em todos os locais selecionados agencontrados.
Instale agno seu sistema e nos pacotes emacs mencionados acima.
agsuporta pesquisa de arquivos com conteúdo que corresponde ao seu regex especificado. A maneira mais simples de saber agonde a raiz do projeto é colocar uma .gitpasta vazia lá. Em seguida, faça a pesquisa usando M-x ag-project-regexp.
O buffer de resultados da pesquisa ag não é editável por padrão. Para torná-lo editável, M-x wgrep-change-to-wgrep-modeuse ou use a wgrepligação -default C-c C-p.
Agora, se você precisar alterar 'abcdef' para 'ghijkl' em todos os seus arquivos, pesquise 'abcdef' e o buffer de resultados ag exibirá todas as linhas que contêm essa sequência. Em seguida, você torna esse buffer editável e altera essas cadeias manualmente e essas alterações serão refletidas nos buffers de arquivo reais ao executar M-x wgrep-finish-editou usar a ligação padrão C-c C-e. Você também pode usar query-replace-regexppara fazer essa pesquisa substituir.
Prefiro usar multiple-cursorsa refatoração rápida para que eu possa ver um feedback em tempo real de onde minhas várias edições estão acontecendo simultaneamente. Destaque a string que deseja substituir no buffer de resultados e ligue M-x mc/mark-all-like-thise edite-a com admiração ao ver as coisas sendo editadas em vários pontos ao mesmo tempo.
Quando estiver satisfeito com as edições, como mencionei acima, faça C-c C-epara "refletir" as alterações nos buffers reais. Os buffers ainda não estão salvos.
Para salvar todos os buffers, costumo fazer isso de uma só vez, usando a C-x s !ligação padrão do emacs .
Aqui está um exemplo de caso de uso com capturas de tela:
Ele mostra o processo de substituição de todas as instâncias de bind-to-modi-mappara bind-to-my-mapno meu ~/.emacs.d/.
Quando procuro bind-to-modi-mapna minha pasta de configuração do emacs, recebo o resultado 'ag'ged abaixo:
Este buffer é somente leitura.
Depois M-x wgrep-change-to-wgrep-mode, realcei, -modi-mapselecione todas as instâncias dessa seleção usando M-x mc/mark-all-like-thise depois de editar essas seleções para -my-map, fica abaixo:

O destaque azul mostra quais linhas serão modificadas quando eu pressionar C-c C-e.
Ao bater C-c C-e, você pode ver a alteração refletida no arquivo real nesta captura de tela:

Eu salvaria todos os arquivos modificados usando C-x s !.