@Malabarba ha menzionato l'uso del wgreppacchetto per la modifica dei risultati grep / ack / ag.
Vorrei scrivere una descrizione dettagliata di come uso il agpacchetto e i wgrep-agpacchetti per ottenere la modifica dei risultati "modificati" usando il multiple-cursorspacchetto.
Questi pacchetti sono disponibili tramite Melpa. Devi anche avere agaka the_silver_searcher installato sul tuo sistema.
Questa procedura dettagliata si applica ai casi in cui stai cercando un modo per apportare modifiche a riga singola in tutte le / posizioni selezionate che sono state agtrovate.
Installa agsul tuo sistema e sui pacchetti emacs sopra menzionati.
agsupporta la ricerca di file con contenuti che corrispondono al regex specificato. Il modo più semplice per dire agdove la radice del progetto è mettere .gitlì una cartella vuota . Quindi esegui la ricerca utilizzando M-x ag-project-regexp.
Il buffer dei risultati della ricerca ag non è modificabile per impostazione predefinita. Per renderlo modificabile, esegui M-x wgrep-change-to-wgrep-modeo usa l' wgrepassociazione -default C-c C-p.
Ora se hai bisogno di cambiare 'abcdef' in 'ghijkl' in tutti i tuoi file, dovresti cercare 'abcdef' e il buffer dei risultati ag mostrerà tutte le righe che contengono quella stringa. Quindi si rende quel buffer modificabile e si modificano manualmente quelle stringhe e tali modifiche si rifletteranno nei buffer di file effettivi quando si esegue M-x wgrep-finish-edito si utilizza l'associazione predefinita C-c C-e. Puoi anche usare query-replace-regexpper sostituire quella ricerca.
Preferisco utilizzare multiple-cursorsper il refactoring rapido in modo da poter vedere un feedback in tempo reale su dove avvengono le mie modifiche multiple contemporaneamente. Evidenzia la stringa che vuoi sostituire in quel buffer dei risultati di AG e chiama M-x mc/mark-all-like-thise poi modifica in soggezione quando vedi cose che vengono modificate in più punti contemporaneamente.
Una volta che sei soddisfatto delle modifiche, come ho detto sopra, fai C-c C-e"riflesso" delle modifiche nei buffer effettivi. I buffer non sono ancora stati salvati.
Per salvare tutti i buffer, di solito lo faccio in una volta sola, usando l' C-x s !associazione predefinita emacs .
Ecco un esempio di utilizzo con schermate:
Mostra il processo di sostituzione di tutte le istanze di bind-to-modi-mapto bind-to-my-mapin my ~/.emacs.d/.
Quando cerco bind-to-modi-mapnella mia cartella di installazione di emacs, ottengo il risultato 'invecchiato' di seguito:
Questo buffer è di sola lettura.
Dopo M-x wgrep-change-to-wgrep-mode, evidenzio, -modi-mapselezionare tutte le istanze di quella selezione usando M-x mc/mark-all-like-thise dopo aver modificato quelle selezioni -my-map, appare come di seguito:

L'evidenziazione blu mostra quali linee verranno modificate quando premo C-c C-e.
Colpendo C-c C-e, puoi vedere il cambiamento riflesso nel file reale in questo screenshot:

Vorrei quindi salvare tutti i file modificati utilizzando C-x s !.