Ripeti l'ultimo comando in modalità normale, incluse le mosse, in Vim


25

In Vim, con ., posso ripetere l'ultimo comando in modalità normale; per esempio:

dd.

elimina due volte una riga.
Ma se scrivo

5j.

il cursore non sposta di 10 righe verso il basso. Come ripeto l'ultimo comando in modalità normale, in particolare una mossa?

Risposte:


14

vimpurtroppo non lo fa. Il meglio che puoi fare è installare il plugin repmo.vim , che ripete i comandi di movimento che hanno un conteggio.


11

è fattibile anche in Vanilla Vim, ma l'applicabilità dipende dal tuo caso d'uso, ad es. con quale frequenza dovrai ripeterlo, dal momento che sono necessari alcuni altri tasti per renderlo ripetibile.


Opzione 1: trasformalo in un'operazione in modalità comando

usando lo spostamento verso il basso di 5 righe come esempio, puoi fare:

  1. entra :norm 5j, sposta il cursore in basso di 5 righe
  2. usare @:per ripetere il movimento

:norm sta per normale, qualsiasi stringa seguente viene considerata come la sequenza di tasti in modalità normale


Opzione 2: utilizzare la macro

  1. qa(memorizza la macro nel registro a, puoi scegliere il tuo registro come qb, qc)
  2. 5j
  3. q (termina la registrazione della macro)
  4. @aper ripetere l'operazione registrata (sostituire acon il nome del registro selezionato, ad es. @b, @c)

la macro richiede un maggiore potere spirituale da impostare, ma è più ripetibile nel senso che è possibile memorizzare più operazioni in registri diversi senza essere sostituite dalle ultime operazioni.


7

.Ripete effettivamente l'ultima modifica , non l'ultimo comando in modalità normale. Come ha detto Paul, avrai bisogno di un plugin per permetterti di ripetere i movimenti.

Vedi " :help .".


4

Puoi ripetere le modifiche con .. I movimenti possono essere ripetuti con il ;comando. Questo comando sembra essere nuovo e fa una cosa simile allo script repmo.vim menzionato in altre risposte.

Ad esempio, per passare al secondo successivo c, premere 2fc. Quindi per farlo di nuovo, basta digitare ;.


11
;non è nuovo. È un comando vi standard. Vi ricorda il tipo e il carattere target (ma non l'argomento numerico) dell'ultimo f/ F/ t/ Tmovimento e lo ;ripete. Tuttavia, non ripete altri movimenti.
Pyrocrasty

Questo ha realizzato quello che stavo cercando di fare! grazie. e grazie @pyrocrasty per il chiarimento!
Paul,

0

È possibile selezionare le linee che si desidera modificare ed eseguire l'ultimo comando punto normale

v5j .............. visual select next 5 lines
:'<,'>norm! .      normal mode execute over selection last command '.'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.