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

25

En Vim, con ., puedo repetir el último comando de 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 de modo normal, especialmente un movimiento?

Juan Pablo
fuente

Respuestas:

14

vimno hace esto desafortunadamente Lo mejor que puede hacer es instalar el complemento repmo.vim , que repite los comandos de movimiento que cuentan.

Paul
fuente
11

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


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

usando el desplazamiento hacia abajo 5 líneas como ejemplo, puede hacer:

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

:norm significa normal, cualquier cadena siguiente se considera pulsaciones de teclas en modo normal


Opción 2: usar macro

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

La 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 ser anulado por las últimas operaciones.

JK ABC
fuente
7

En realidad .repite el último cambio , no el último comando de modo normal. Como dijo Paul, necesitará un complemento que le permita repetir movimientos.

Ver " :help .".

Heptita
fuente
4

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, solo escriba ;.

treinta y tres
fuente
11
;no es nuevo Es un comando vi estándar. Vi recuerda el tipo y el carácter objetivo (pero no el argumento numérico) del último movimiento f/ F/ t/ Ty lo ;repite. Sin embargo, no repite otros movimientos.
pirocrastía
¡Esto logró lo que estaba buscando hacer! gracias. y gracias @pyrocrasty por la aclaración!
Paul
0

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 '.'
SergioAraujo
fuente