1. Es ist nicht schwer, das Verhalten durch eine zweistufige Substitution zu erreichen:
:,$s/BEFORE/AFTER/gc|1,''-&&
Zunächst wird für jede Zeile ein Ersetzungsbefehl ausgeführt, der von der aktuellen bis zum Ende der Datei beginnt. Dann wird dieser :substitute
Befehl mit demselben Suchmuster, derselben Ersatzzeichenfolge und denselben Flags mit dem :&
Befehl wiederholt (siehe :help :&
).
Letzterer führt jedoch die Ersetzung für den Zeilenbereich von der ersten Zeile der Datei bis zur Zeile durch, in der die vorherige Kontextmarke gesetzt wurde, minus eins. Da der erste :substitute
Befehl die Cursorposition speichert, bevor mit dem eigentlichen Ersetzen begonnen wird, ist die von adressierte ''
Zeile die Zeile, die die aktuelle war, bevor dieser Ersetzungsbefehl ausgeführt wurde. (Die ''
Adresse bezieht sich auf die
'
Pseudomarke; siehe :help :range
und :help ''
für Details.)
Beachten Sie, dass der zweite Befehl (nach dem |
Befehlstrennzeichen - siehe
:help :bar
) keine Änderung erfordert, wenn das Muster oder die Flags im ersten geändert werden.
2. Um einige Eingaben zu sparen und das Grundgerüst des obigen Substitutionsbefehls in der Befehlszeile aufzurufen, können Sie eine Zuordnung im Normalmodus wie folgt definieren:
:noremap <leader>R :,$s///gc\|1,''-&&<c-b><right><right><right><right>
Der nachfolgende <c-b><right><right><right><right>
Teil ist erforderlich, um den Cursor zwischen die ersten beiden Schrägstriche zu setzen, damit der Benutzer mit der Eingabe des Suchmusters beginnen kann. Sobald das gewünschte Muster und Ersetzen fertig sind, kann der resultierende Befehl durch Drücken von ausgeführt werden Enter.
( Wenn Sie das Muster lieber eingeben möchten, sollten Sie //
anstelle des ///
obigen Mappings den Trennstrich selbst eingeben, gefolgt von der Ersatzzeichenfolge, anstatt den Cursor mit dem Rechtspfeil über den bereits vorhandenen Trennstrich zu bewegen das Ersatzteil.)
\vpattern
- 'sehr magisches' Muster: Nicht-alphanumerische Zeichen werden als spezielle Regex-Symbole interpretiert (kein Entkommen erforderlich)