Na tej stronie są już trzy świetne odpowiedzi , ale, jak sugerował Luc Hermitte w komentarzu , jeśli robisz to od razu , ważne jest to, jak szybko i łatwo można dotrzeć do działającego rozwiązania.
W związku z tym jest to problem, z którego w ogóle nie skorzystałbym :substitute
: można go łatwo rozwiązać za pomocą zwykłych poleceń trybu normalnego i rekurencyjnego makra:
(W razie potrzeby) Najpierw wyłącz 'wrapscan'
. Wyrażenie regularne, którego użyjemy, będzie pasować do pożądanego tekstu wynikowego, a także tekstu początkowego, więc przy 'wrapscan'
włączonym makrze w przeciwnym razie odtwarzanie byłoby odtwarzane na zawsze. (Lub dopóki nie zdasz sobie sprawy z tego, co się dzieje i naciśniesz <C-C>
).
:set nowrapscan
Ustaw wyszukiwane hasło (używając tego samego podstawowego wyrażenia regularnego, które zostało już wspomniane w istniejących odpowiedziach):
/#\d\+\(\.\d\+\)\?<CR>
(W razie potrzeby) Wróć do pierwszego meczu, naciskając N
tyle razy, ile potrzeba,
(W razie potrzeby) Zmień pierwsze dopasowanie na żądany tekst:
cE#1<Esc>
Wyczyść "q
rejestr i zacznij rejestrować makro:
qqqqq
Wybierz bieżący licznik:
yiW
Przejdź do następnego meczu:
n
Zastąp bieżący licznik tym, który właśnie szarpnęliśmy:
vEp
Zwiększ licznik:
<C-A>
Zagraj w makro q
. Rejestr "q
jest nadal pusty, ponieważ wyczyściliśmy go w kroku 5, więc w tym momencie nic się nie dzieje:
@q
Zatrzymaj rejestrowanie makra:
q
Zagraj w nowe makro i patrz!
@q
Podobnie jak w przypadku wszystkich makr, wygląda to na wiele kroków, gdy wyjaśniono to tak, jak to zrobiłem powyżej, ale zauważ, że ich wpisanie jest dla mnie bardzo szybkie: oprócz płytki rekursywnej do nagrywania makr są one zwykłe polecenia edycyjne Podczas edycji wykonuję cały czas. Jedynym krokiem, w którym musiałem zrobić cokolwiek, nawet zbliżając się do myślenia, był krok 2, w którym napisałem wyrażenie regularne, aby przeprowadzić wyszukiwanie.
Sformatowane jako dwa polecenia trybu wiersza poleceń i seria naciśnięć klawiszy, szybkość tego rodzaju rozwiązania staje się bardziej wyraźna: mogę wyczarować następujące elementy tak szybko, jak potrafię je wpisać 1 :
:set nowrapscan
/#\d\+\(\.\d\+\)\?
cE#1<Esc>qqqqqyiWnvEp<C-A>@qq@q
Prawdopodobnie mógłbym wymyślić inne rozwiązania na tej stronie z odrobiną przemyślenia i odniesieniem do dokumentacji 2 , ale kiedy zrozumiesz, jak działają makra, naprawdę łatwo jest je wyrzucać przy dowolnej prędkości, którą zwykle edytujesz.
1: Tam są sytuacje, w których makra wymagają większej uwagi, ale uważam, że nie pojawią się znacznie w praktyce. Ogólnie rzecz biorąc, sytuacje, w których występują, to takie, w których makro jest jedynym praktycznym rozwiązaniem.
2: Nie sugerując, że inni odpowiadający nie mogliby wymyślić swoich rozwiązań w podobny sposób: po prostu wymagają umiejętności / wiedzy, których osobiście nie mam tak łatwo na wyciągnięcie ręki. Ale wszyscy użytkownicy Vima wiedzą, jak korzystać z regularnych poleceń edycji!
perldo
, możesz użyć:%perldo s/#\K\d+(\.\d+)?/++$i/ge