@Malabarba mencionó el uso del wgreppaquete para editar resultados grep / ack / ag.
Me gustaría escribir un recorrido detallado de cómo uso el agpaquete y los wgrep-agpaquetes para lograr la edición de resultados 'agregados' usando el multiple-cursorspaquete.
Estos paquetes están disponibles a través de Melpa. También necesita tener agaka the_silver_searcher instalado en su sistema.
Este recorrido se aplica a los casos en los que está buscando una forma de realizar ediciones de una sola línea en todas las ubicaciones seleccionadas ag.
Instale agen su sistema y los paquetes de emacs mencionados anteriormente.
agadmite la búsqueda de archivos con contenido que coincida con la expresión regular especificada. La forma más sencilla de saber agdónde está la raíz del proyecto es colocar una .gitcarpeta vacía allí. Luego haga la búsqueda usando M-x ag-project-regexp.
El búfer de resultados de la búsqueda ag no es editable por defecto. Para hacerlo editable, haga M-x wgrep-change-to-wgrep-modeo use el wgrepenlace predeterminado C-c C-p.
Ahora, si necesita cambiar 'abcdef' a 'ghijkl' en todos sus archivos, buscaría 'abcdef' y el búfer de resultados ag mostrará todas las líneas que contienen esa cadena. Luego, hace que el búfer sea editable y cambie esas cadenas manualmente y esos cambios se reflejarán en los búferes de archivo reales al hacer M-x wgrep-finish-edito usar el enlace predeterminado C-c C-e. También puede usar query-replace-regexppara hacer esa búsqueda reemplazar.
Prefiero usar multiple-cursorspara una refactorización rápida para poder ver una retroalimentación en tiempo real de dónde están ocurriendo mis ediciones múltiples simultáneamente. Resalte la cadena que desea reemplazar en ese búfer de resultados ag y llame M-x mc/mark-all-like-thisy luego edite con asombro mientras ve que las cosas se editan en varios puntos al mismo tiempo.
Una vez que esté satisfecho con las ediciones, como mencioné anteriormente, hágalo C-c C-epara "reflejar" los cambios en los búferes reales. Los buffers aún no se han guardado.
Para guardar todos los búferes, generalmente lo hago de una vez, usando el C-x s !enlace predeterminado de emacs .
Aquí hay un ejemplo de caso de uso con capturas de pantalla:
Muestra el proceso de reemplazar todas las instancias de bind-to-modi-mapto bind-to-my-mapen my ~/.emacs.d/.
Cuando busco bind-to-modi-mapen mi carpeta de configuración de emacs, obtengo el siguiente resultado 'ag'ged:
Este búfer es de solo lectura.
Después M-x wgrep-change-to-wgrep-mode, resalto, -modi-mapseleccione todas las instancias de esa selección usando M-x mc/mark-all-like-thisy después de editar esas selecciones -my-map, se ve a continuación:

El resaltado azul muestra qué líneas se modificarán cuando presione C-c C-e.
Al golpear C-c C-e, puede ver el cambio reflejado en el archivo real en esta captura de pantalla:

Luego guardaría todos los archivos modificados usando C-x s !.