Cuando estoy grabando una macro con q
y he terminado, puedo escribir:
q
para detener la grabación si estoy en modo normal o visual.<c-o>q
para detener la grabación si estoy en modo de inserción...
¿Cómo detengo la grabación si mi macro termina en modo comando?
command-line
register
macro
iago-lito
fuente
fuente
:'<,'>s/toBeReplaced//g
luego colocará el cursor entre los dos//
para que todo lo que tenga que hacer sea escribirnewString<cr>
y listo. :)Respuestas:
Otra solución es cuando está en modo de línea de comando, use
Ctrl-f
y presioneq
para detener la grabación.Ctrl-f
le permite abrir la ventana de la línea de comandos, en la que puede editar el comando en modo normal. Para validar el comando, simplemente use enter.Por lo tanto, después de haber agregado algo como:
en su
.vimrc
, puede usar<c-q>
para detener la grabación de una macro mientras está en modo comando.Florent
fuente
^F
) del final de la macro, ¿verdad? Al menos eso es lo que veo.qqSTARTMACRO:STARTCOMMANDLINEPART<c-f>i<c-o>q
y, por lo tanto, la grabación se ha detenido mientras escribía la parte del comando. Para usar la macro:@qFINISHYOURCOMMAND<cr>
y listo: no es necesario editarlo. Desafortunadamente, esto no parece funcionar desde el modo visual (o pierde la selección) ... ¿o me he perdido algo?@q
y el rango se agregó al inicio del comando'<,'>
, siempre que la macro comenzara con:
...'<,'>
) todavía coincide con la selección al validar el comando.Una forma de hacerlo:
qq
otros caracteres)ESC
salir de línea_de_órdenes modo,q
para poner fin a su macro.ESC
de suq
registro (*): puede pegarlo en un búfer, eliminar el^[
carácter, seleccionar todo el material nuevamente (en cuanto al carácter) y tirarlo de nuevo para registrarloq
.@q
.Básicamente, "procesas" un poco tu macro, ya que está almacenada en un registro :)
(*) Una forma rápida de eliminar el último carácter de una macro almacenada en el registro
q
sería:fuente
:let @q = @q[:-2]
por favor? ¿Especialmente cómo[:-2]
funciona? :-)@q
arriba). Algunos ejemplos aquíDespués de leer su comentario sobre el caso de uso, parece que podría usar una asignación de teclas en lugar de una macro.
Tengo esta línea en mi .vimrc (no recuerdo dónde la encontré):
Tiene un efecto similar al caso de uso que describió, colocándolo en la línea de comando, por lo que lo único que debe hacer es escribir el reemplazo y presionar enter, pero en este caso, reemplazar todas las apariciones de la palabra que estaba debajo de su cursor .
Para reemplazar dentro del bloque actual, creo que algo como lo siguiente debería funcionar:
Por supuesto, puede asignarlo a la clave que desee.
Lo que hace lo anterior: marca la posición actual usando el marcador sin nombre, selecciona visualmente el bloque actual, abandona el modo visual y regresa el cursor a la posición guardada (los marcadores de selección visual todavía están configurados), ingresa al modo de comando y escribe el comando sustituto , insertando la palabra que estaba debajo del cursor con
<C-r><C-w>
y colocando el cursor para escribir el reemplazo.fuente
toBeReplaced
patrón no es tan simple como "la palabra debajo del cursor", por lo que necesito una macro pequeña y específica que podría crear sobre la marcha. Y de nuevo: demasiado específico para un mapa: \ Gracias de todos modos :)toBeReplaced
parte (en lugar de la palabra actual debajo del cursor, lo cual es más limitante).va{:s/<C-r>0//g<Left><Left>
con esto puede tirar de antemano cualquier patrón que necesite de antemano, y luego simplemente presionar la tecla asignada para reemplazar ese patrón con algo en el actual bloquear.