Si tengo que hacer una refactorización de nombres de variables, uso ag y múltiples cursores .
Pero cuando tengo que eliminar / agregar / mover un bloque de código, uso macros de teclado. Pero necesito cambiar a cada búfer e iniciar la ejecución de esa macro manualmente.
¿Hay alguna manera de simplemente seleccionar los búferes abiertos de Ibuffer (o archivos de dired) y ejecutar la última macro de teclado grabada en todos ellos?
fuente
t
para alternar marcas yk
eliminar las entradas marcadas. Unag
actualización posterior restaurará las líneas eliminadas.M-{
yM-}
para saltar a los elementos marcados siguiente y anterior en Ibuffer y dired.Aquí hay un comando que hace que la ejecución de comandos, macros y la evaluación de expresiones Lisp en múltiples archivos sea obvia. Tenga en cuenta que el argumento prefijo permite ejecutar una macro para cada archivo hasta que se produce un error. Ya publiqué esto en el superusuario, pero funciona tan bien que pensé que las personas que visiten esta página también podrían encontrarlo útil. Me gusta vincular esto a 'E' en dired.
Actualización: la versión anterior de esta función solo admitía macros. El actualizado es más simple y más potente, lo que permite ejecutar comandos arbitrarios (por secuencia de teclas o nombre), así como expresiones Lisp. Ahora también es cuidadoso registrar cualquier error en el búfer de mensajes .
fuente
Modificar archivos seleccionados en
dired
La siguiente solución necesita la instalación del
dired+
paquete, que está disponible en Melpa.En primer lugar, convierta su macro de teclado en una función elisp. Aquí hay un emacs relacionado.SE QnA (¿Cómo guardar una macro de teclado como una función Lisp?).
Es aún más rápido si sabe cómo desea modificar todos los archivos utilizando una función elisp directamente. Supongamos que desea agregar "- * - mode: org - * -" al comienzo de todos los archivos seleccionados en dired. 1
En ese caso, funcionaría la siguiente función elisp en cada uno de los archivos seleccionados.
Así que solo evalúa la función anterior por ahora; se utilizará en un paso posterior a continuación.
M-x dired
y abra el directorio que contiene los archivos en los que desea ejecutar la función anterior.m
clave (vinculada adired-mark
indired
).C-u @
selecciona y selecciona el nombre de la función que evaluaste en el Paso 1 (my/set-org-mode
).@
está vinculado a lodiredp-do-apply-function
que se define endired+.el
.C-x s !
para guardar todos los archivos modificados de una vez.1 : inspirado en esta pregunta en reddit .
fuente