Powtórz ostatnią komendę trybu normalnego, łącznie z ruchami, w Vimie

25

W Vimie .mogę powtórzyć ostatnie polecenie trybu normalnego; na przykład:

dd.

usuwa linię dwa razy.
Ale jeśli napiszę

5j.

kursor nie przesuwa się o 10 linii w dół. Jak powtórzyć ostatnie polecenie trybu normalnego, szczególnie ruch?

juanpablo
źródło

Odpowiedzi:

14

vimnie robi tego niestety. Najlepsze, co możesz zrobić, to zainstalować wtyczkę repmo.vim , która powtarza liczące się polecenia ruchu.

Paweł
źródło
11

jest to wykonalne nawet w waniliowym vimie, ale możliwość zastosowania zależy od przypadku użycia, tj. jak często trzeba to powtarzać, ponieważ wymaga kilku kolejnych naciśnięć klawiszy, aby powtarzalność była powtarzalna.


Opcja 1: zmień go w tryb poleceń

wykorzystując przykładowo przejście w dół o 5 linii, możesz:

  1. Enter :norm 5j, przesunie kursor w dół o 5 linii
  2. użyj, @:aby powtórzyć ruch

:norm oznacza normalny, każdy kolejny ciąg znaków jest uważany za naciśnięcia klawiszy w trybie normalnym


Opcja 2: Użyj makra

  1. qa(sklep makro do rejestru a, można wybrać swój własny rejestr jak qb, qc)
  2. 5j
  3. q (zakończ nagrywanie makra)
  4. @aaby powtórzyć nagraną operację (zastąp awybraną nazwą rejestru, np. @b, @c)

makro wymaga więcej mocy duchowej do skonfigurowania, ale jest bardziej powtarzalne w tym sensie, że można przechowywać wiele operacji w różnych rejestrach, bez konieczności przesłonięcia ostatnich operacji.

JK ABC
źródło
7

W rzeczywistości .powtarza ostatnią zmianę , a nie ostatnią komendę trybu normalnego. Jak powiedział Paul, będziesz potrzebował wtyczki, która pozwoli ci powtarzać ruchy.

Zobacz „ :help .”.

Heptyt
źródło
4

Możesz powtarzać zmiany za pomocą .. Ruchy można powtarzać za pomocą ;polecenia. To polecenie wydaje się być nowe i działa podobnie do skryptu repmo.vim wspomnianego w innych odpowiedziach.

Na przykład, aby przejść do drugiego następnego c, naciśnij 2fc. Następnie, aby to zrobić ponownie, po prostu wpisz ;.

trzydzieści trzydzieści
źródło
11
;nie jest nowy. To standardowe polecenie vi. Vi zapamiętuje typ i znak docelowy (ale nie argument liczbowy) ostatniego ruchu f/ F/ t/ Ti ;powtarza go. Jednak nie powtarza innych ruchów.
pirokrastyka
Osiągnęło to to, co chciałem zrobić! Dziękuję Ci. i dziękuję @pyrocrasty za wyjaśnienie!
Paul
0

Możesz wybrać linie, które chcesz zmienić, i wykonać ostatnie normalne polecenie kropki

v5j .............. visual select next 5 lines
:'<,'>norm! .      normal mode execute over selection last command '.'
SergioAraujo
źródło