2011-01-25 14 views
38

In Vim, c'è un modo per ripetere l'ultimo comando indipendentemente dal fatto che si trattasse di una modifica o meno, e senza avere la lungimiranza di registrare prima una macro?Come posso ripetere qualsiasi comando in Vim, come "C-x z" in emacs?

E.g. dite che digito :bn e voglio farlo di nuovo (era il file sbagliato). Premendo . ovviamente non lo fa. O forse sto facendo gE e voglio ripeterlo (con una battuta di tasto poiché chiaramente gE è un po 'doloroso scrivere).

Forse ci sono alcuni plugin? Simile a this question.

(Ancora più interessante sarebbe quella di legare retroattivamente una serie di comandi per una macro, e quindi si può digitare [email protected] o qualcosa di ripetere gli ultimi 5 comandi ...)

risposta

50

Per ripetere un comando della riga di comando, provare @:, per ripetere un comando/insert-modalità normale, provare .,

Aggiungere al di sotto di mapping per il vostro .vimrc se si vuole abbreviare la stessa: -

:noremap <C-P> @:<CR> - Questo mapperà Ctrl + P per comando precedente comando di linea. Puoi mappare qualsiasi altra combo.

+0

Quindi, che dire dei comandi in modalità normale come "gE"? Esiste un comando ": norma" per l'esecuzione di comandi in modalità normale dalla riga di comando, ma non si ripete ... – johv

+0

cosa fa comunque 'gE'? Ho provato 'dw' per eliminare una parola, e poi ho premuto' .' per cancellare un'altra parola – Ravikiran

+0

È un comando di movimento, "Indietro alla fine di WORD", il retro di E. – johv

12

:help repeating fornirà i tipici comandi di ripetizione (come., @ :, ecc.). Potresti provare repeat.vim. Questo potrebbe avvicinarti a ciò che stai cercando.

+0

repeat.vim risolto il mio problema :) –

0

È possibile mappare @: a qualche chiave per una maggiore comodità:

:map <F2> @: 

e quindi è più facile da usare con ripetizioni.

5

Si può semplicemente utilizzare ""

Esempio: Si dispone di "abc" in 10 punti nel file e si desidera sostituirlo con "def" in 5 punti di esso.

Fase 1: Trovare prima occorrenza di ABC con il comando digitando "/ abc"
Fase 2: Una volta che il cursore si trova su "abc", Sostituire abc con il comando "cw" per togliere la parola "abc"
Fase 3 : Digitare "def" come sostituto e premere Invio per passare alla modalità di comando
Passaggio 4: Per ripetere questa azione è sufficiente digitare il comando "n" per passare alla successiva occorrenza di abc e digitare command ".". Il comando ricorda che hai sostituito "abc" con "def" l'ultima volta e si eseguirà lo stesso qui.

Problemi correlati