Repita el último comando del modo normal, incluidos los movimientos, en Vim

Repita el último comando del modo normal, incluidos los movimientos, en Vim

En Vim, con ., puedo repetir el último comando del modo normal; Por ejemplo:

dd.

elimina una línea dos veces.
Pero si escribo

5j.

el cursor no se mueve 10 líneas hacia abajo. ¿Cómo repito el último comando del modo normal, especialmente un movimiento?

Respuesta1

es factible incluso en vanilla vim, pero la aplicabilidad depende de su caso de uso, es decir. con qué frecuencia necesitarás repetirlo, ya que se requieren algunas pulsaciones de teclas más para que sea repetible.


Opción 1: convertirlo en una operación en modo comando

Usando bajar 5 líneas como ejemplo, puedes hacer:

  1. enter :norm 5j, moverá el cursor hacia abajo 5 líneas
  2. utilizar @:para repetir el movimiento

:normsignifica normal, cualquier cadena siguiente se considera como pulsaciones de teclas en modo normal


Opción 2: usar macro

  1. qa(almacene la macro en el registro a, puede elegir su propio registro como qb, qc)
  2. 5j
  3. q(terminar de grabar la macro)
  4. @apara repetir su operación grabada (reemplace acon el nombre de registro que eligió, por ejemplo, @b, @c)

macro requiere más poder espiritual para configurarse, pero es más repetible en el sentido de que puede almacenar múltiples operaciones en diferentes registros sin que las operaciones más recientes lo anulen.

Respuesta2

vimDesafortunadamente no hace esto. Lo mejor que puedes hacer es instalar elrepmo.vimcomplemento, que repite los comandos de movimiento que tienen un conteo.

Respuesta3

Puedes repetir los cambios con .. Los movimientos se pueden repetir con el ;comando. Este comando parece ser nuevo y hace algo similar al script repmo.vim mencionado en otras respuestas.

Por ejemplo, para pasar al segundo siguiente c, presione 2fc. Luego, para hacerlo de nuevo, simplemente escriba ;.

Respuesta4

Puede seleccionar las líneas que desea cambiar y ejecutar el último comando de punto normal

v5j .............. visual select next 5 lines
:'<,'>norm! .      normal mode execute over selection last command '.'

información relacionada