Guardar última acción (.) En una macro

9

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 d5wSi 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 d3wy fue el último cambio que realizó, luego, cuando ejecute la macro, eliminará 3 palabras y no 5, porque solo se está ejecutando .)

Peeyush Kushwaha
fuente
Me cuesta entender lo que quieres hacer y por qué no haces lo que sea con una macro.
1
@DrEval El OP se da cuenta después de ejecutar un comando en modo normal que debería haberlo guardado en una macro, y no quiere tener que volver a escribirlo mientras graba la macro.
Rico

Respuestas:

2

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 Excomando de modo y luego guardarlo en una macro como @wmmso señaló. Puedes hacer esto usando el normcomando. Entonces, si desea eliminar 2 palabras que comienzan en la posición actual del cursor, y use un comando de modo normal en el Exmodo de uso :norm d2w. (Ref: http://vimdoc.sourceforge.net/htmldoc/various.html#:norm , ejecutar el comando normal sobre el rango )

Es mejor usar un Excomando 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

alpha_989
fuente
¿Cómo escribirías un comando de modo normal en la línea de comando? por ejemplo d2w?
Peeyush Kushwaha 01 de
Se agregaron algunas aclaraciones en la respuesta. ¿Eso ayuda?
alpha_989
0

copie el contenido del registro ":" (lo que acaba de hacer) en otro registro, por ejemplo, registre un:

:let @a = @:

puedes ejecutarlo nuevamente usando

@a
wmmso
fuente
Esto no funciona para mí en vim 7.4. Parece que el registro :contiene el último comando ejecutado a través de en :command-name-goes-herelugar de un comando de modo normal, comod2w
Peeyush Kushwaha
2
Esa solución solo funciona para comandos ex, no comandos de modo normal. No conozco un registro que contenga el último comando de modo normal. Sería útil
Steve