1. Nie jest trudno osiągnąć zachowanie za pomocą dwuetapowej substytucji:
:,$s/BEFORE/AFTER/gc|1,''-&&
Najpierw polecenie substytucji jest uruchamiane dla każdej linii, zaczynając od bieżącej do końca pliku:
,$s/BEFORE/AFTER/gc
Następnie :substitute
polecenie to jest powtarzane z tym samym wzorcem wyszukiwania, ciągiem zastępczym i flagami, używając :&
polecenia (patrz :help :&
):
1,''-&&
Ta ostatnia jednak dokonuje podstawienia w zakresie wierszy od pierwszego wiersza pliku do wiersza, w którym ustawiono poprzedni znacznik kontekstu, minus jeden. Ponieważ pierwsze :substitute
polecenie przechowuje pozycję kursora przed rozpoczęciem rzeczywistych zamian, wiersz, do którego adresowany ''
jest adres, jest wierszem bieżącym przed wykonaniem tego polecenia zastępowania. ( ''
Adres odnosi się do
'
pseudoznaku; zobacz :help :range
i :help ''
po szczegóły.)
Zauważ, że drugie polecenie (po |
separatorze polecenia - zobacz
:help :bar
) nie wymaga żadnej zmiany, gdy wzorzec lub flagi są zmieniane w pierwszym.
2. Aby zaoszczędzić trochę pisania, aby wyświetlić szkielet powyższego polecenia podstawienia w linii poleceń, można zdefiniować mapowanie w trybie normalnym, na przykład:
:noremap <leader>cs :,$s///gc\|1,''-&&<c-b><right><right><right><right>
Końcowa <c-b><right><right><right><right>
część jest niezbędna, aby przesunąć kursor na początek wiersza poleceń ( <c-b>
), a następnie cztery znaki w prawo ( <right>
× 4), umieszczając go w ten sposób między pierwszymi dwoma ukośnikami, aby użytkownik mógł rozpocząć wpisywanie wzorca wyszukiwania . Gdy żądany wzór i zamiana są gotowe, wynikowe polecenie można uruchomić, naciskając
Enter.
(Można rozważyć umieszczenie //
zamiast ///
w odwzorowaniu powyżej, jeśli ktoś woli wpisać wzorzec, a następnie samemu wpisać separujący ukośnik, a następnie ciąg zastępujący, zamiast używać strzałki w prawo, aby przesunąć kursor na już istniejący separujący ukośnik rozpoczynający się część zamienna.)
\vpattern
- `` bardzo magiczny '' wzorzec: znaki niealfanumeryczne są interpretowane jako specjalne symbole wyrażeń regularnych (bez konieczności zmiany znaczenia)