Me gustaría definir un conjunto de archivos dentro del cual pueda buscar y reemplazar texto.
Para aclarar:
Me gustaría poder buscar, por ejemplo, en todos los archivos xk * .tex en un directorio dado (y excluyendo los archivos de respaldo). También me gustaría poder cambiar la expresión, por ejemplo, "incertidumbre", a "indeterminación" en todos los archivos dd * .sh y ee * .cls.
¿Cuál es la forma estándar de hacer esto?
dired
para buscar y reemplazar en un subconjunto de archivos en un directorio determinado.ag
,wgrep
ymultiple-cursors
.Respuestas:
Si está trabajando en un proyecto bien definido, puede utilizar
occur
egrep
instalaciones dentro de ese proyecto a travésprojectile
. A partir de su descripción de Github, entre los diversos bits de funcionalidad que ofreceprojectile
, puede hacer:fuente
Si todos los archivos están en el mismo directorio, puede seguir estos pasos. Basaré esto en el segundo ejemplo dado en los comentarios:
dired
para abrir el directorio relevante endired
modo.dired-mark-files-regexp
en ese directorio.^dd.*\.sh$
, que es la expresión regular equivalente add*.sh
. Esos archivos ahora estarán marcados con un*
, y también pueden aparecer resaltados en un color diferente dependiendo de su esquema de color.^ee.*\.cls$
) hasta que se marquen todos los archivos que desea editar.dired-do-query-replace-regexp
en los archivos que marcó.uncertainty
yindeterminacy
como las cadenas de consulta. (Creo que esto distingue entre mayúsculas y minúsculas. Si necesita que no distinga entre mayúsculas y minúsculas, puede requerir una expresión regular, pero no estoy seguro).Y esa es la idea. Si necesita repetir esto varias veces en diferentes carpetas, puede grabar los pasos 2 a 6 como una macro (presione C-x (después del paso 1 y C-x )después del paso 6). E incluso si no te sientes muy cómodo con elisp, puedes traducir esa macro en elisp usando
insert-kbd-macro
e intentar hackearla en una función útil.fuente
S-q
no significashift+q
, significasuper+q
. Deberías escribirQ
si quieres decirshift+q
. Edité tu comentario para reflejar esto.S-q
significashift+q
;super+q
Sería escritos-q
.Puede usar
M-x find-name-dired
para obtener un búfer dired que contenga enlaces a todos los archivos que coincidan con un patrón de nombre dado.Utilícelo
M-x find-grep-dired
para obtener un búfer directo que contenga aquellos archivos cuyo contenido coincida con el patrón grep proporcionado.Hay muchos más comandos de este tipo; lo que sea más apropiado depende de sus requisitos, así que considere actualizar su pregunta.
Luego puede recorrer la lista de archivos usando macros. Eche un vistazo a la respuesta de Brian para ver un ejemplo: https://emacs.stackexchange.com/a/9497/2005
fuente
Usa rgrep y wgrep.
Con rgrep puede buscar una expresión regular en archivos cuyo nombre de archivo coincida con una expresión regular y dentro de un directorio (y sus subdirecciones)
con wgrep puede editar el búfer que contiene los resultados de su búsqueda rgrep.
fuente