Caso de uso
Estoy en modo normal No he pensado explícitamente en grabar una macro, pero hago un solo cambio de comando. Ahora puedo repetir esta acción usando dot.
Ahora me doy cuenta de que es una acción útil guardar en una macro para usar más tarde en lugar de escribir todo el comando cada vez. Puedo atender todos los cambios que necesiten este comando ahora mismo usando dot, o puedo continuar con la edición y usar este comando más tarde guardándolo en una macro.
Lo último es lo que quiero hacer, pero la forma más fácil en que puedo pensar en hacerlo no es fácil: deshacer mi cambio, comenzar a grabar una macro y volver a escribir el comando para realizar el cambio requerido y detener la grabación de la macro.
Lo que he probado hasta ahora:
La grabación de puntos en una macro no funciona porque registra el punto y no el cambio que realiza el punto. (Por ejemplo, digamos que el comando almacenado en punto era d5w
Si comienza a grabar una macro y realiza la acción a través de. Esperando que borre 5 palabras cada vez que ejecuta la macro, entonces eso no sucederá. La próxima vez que ejecute la macro hará punto y no el comando d5w
. Esto significa que si realizó algún otro cambio después de grabar la macro, diga eliminar 3 palabras usando d3w
y fue el último cambio que realizó, luego, cuando ejecute la macro, eliminará 3 palabras y no 5, porque solo se está ejecutando .
)
fuente
Respuestas:
Vim no mantiene un historial de sus comandos de modo normal. Si desea mantener un historial de su historial de modo normal, puede usar lo siguiente para guardarlo en un archivo: https://vi.stackexchange.com/a/587/13848
Los comandos en modo normal suelen ser cortos, por lo que las personas simplemente lo escriben en modo normal y no intentan crear macros. Sin embargo, si desea crear macros a partir de comandos de modo normal, puede convertirlo en un
Ex
comando de modo y luego guardarlo en una macro como @wmmso señaló. Puedes hacer esto usando elnorm
comando. Entonces, si desea eliminar 2 palabras que comienzan en la posición actual del cursor, y use un comando de modo normal en elEx
modo de uso:norm d2w
. (Ref: http://vimdoc.sourceforge.net/htmldoc/various.html#:norm , ejecutar el comando normal sobre el rango )Es mejor usar un
Ex
comando de modo si es un comando complicado, ya que le permite escribir el comando completo en un búfer, asegurarse de que sea realmente correcto y también lo guarda en el historial de la línea de comandos.Ahora que tiene su comando de modo normal en modo ex, también puede examinar su comando como historial usando
q:
, y luego copiarlo en un registro usando"ay$
, mientras está en la línea que contiene la línea de comando que desea guardar en una macro. Luego, cuando desee ejecutar la macro, puede ejecutarla usando@a
fuente
d2w
?copie el contenido del registro ":" (lo que acaba de hacer) en otro registro, por ejemplo, registre un:
puedes ejecutarlo nuevamente usando
fuente
:
contiene el último comando ejecutado a través de en:command-name-goes-here
lugar de un comando de modo normal, comod2w