W vim czasami mam okazję zastąpić kilka pierwszych wystąpień dopasowania na linii, ale nie każdy gchciałby. na przykład:
a a a a a
do
b b b a a
Wiem, że mógłbym użyć :s/a/b/[enter]:[up][enter]:[up][enter], ale to dość nużące przy trzech powtórzeniach, mam linie z potencjalnie 10+ podstawieniami.
Próbowałem:
:s/a/b/3g: vim narzekał na końcowe znaki.:s/a/b/3: zmienia pierwsze wystąpienie w tym i kolejnych dwóch wierszach.3:s/a/b: tak samo jak poprzednio.:s/a/b/g3: zmienia wszystkie wystąpienia tego i następnych dwóch wierszy.:3s/a/b: zmienia pierwsze wystąpienie w linii 3.:/a/,3/a/s/a/b: zmienia pierwsze wystąpienie w każdej linii między kolejnąaa trzecią linią zawartąaw pliku (w razie potrzeby monit o cofnięcie).:/a/,/\([^a]*a\)\{3\}/s/a/b/: zmienia pierwsze wystąpienie w każdym wierszu między tym a następnym z 3as (i nie byłoby to łatwe do rozszerzenia na wyszukiwanie wielu znaków).
I różne inne wzorce adresowania, z których żaden nie działał. Muszę powiedzieć, że sporo się dowiedziałem o :spoleceniu, które próbuje znaleźć odpowiedź na ten problem, ale nadal go nie rozwiązałem.
Czy ktoś wie jak to zrobić?
(punkty bonusowe za określony zasięg, np. od drugiego do czwartego wystąpienia)
ni .chociaż nie pomyślałem, aby ich tutaj użyć. Z pewnością poprawa, dzięki.
s/a/=something/powinien wykonać trick ( :help sub-replace-=). Nie jestem wystarczająco biegły w Vimie, żeby pisać somethingod razu.
:[up][enter]można go zastąpić &, co wciąż nie jest idealne, ale przynajmniej jest mniej bolesne.