Ich habe solche Zeilen in meinem Text.
Text vor Muster = Müll ** Text nach Muster ist Muster
Wenn ich %s/pattern/saturn/
es in VIM mache , ersetzt es alle Vorkommen von pattern
. Aber ich möchte nur die Ereignisse ersetzen, die danach kommen =
. Es sollte alles in der vorhergehenden Zeile ignorieren =
. Wie geht das?
vim
regular-expression
vi
user13107
quelle
quelle
:help /\@<=
(ich kann es nicht besser erklären), aber fühlen Sie sich nicht schlecht, wenn Sie es nicht zuerst bekommen. Es heißt positives Aussehen und ist ziemlich fortgeschritten.Vorausgesetzt , dass Sie nur ein Vorkommen haben
pattern
vor=
, können Sie dies in zwei Schritten:Der
\{-}
weist.
an, faul zu passen (auch bekannt als nicht gierig).Erläuterung
Dieser erste Schritt ersetzt alle Vorkommen
pattern
vonsaturn
dem nächsten Schritt sucht dann nach dem Wortsaturn
vor=
und ersetzt sie durchpattern
.Vorsicht
Dies setzt ein einzelnes Vorkommen
=
in jeder Zeile voraus .Ein besserer Weg (setzt nur einen einzigen
=
pro Zeile voraus )Sie können dies mit einem rekursiven Makro tun:
Dies ersetzt ein einzelnes Vorkommen von
pattern
after=
mitsaturn
. Wenn es als Makro gespeichert und rekursiv aufgerufen wird, arbeitet es so lange an der Datei, bis nichts mehr zu ersetzen ist. Es ist hackisch, aber es funktioniert.Siehe auch
quelle
pattern
after ersetzt=
. Bitte beachten Sie die aktualisierte Antwort.=
:( arghsaturn
nicht im Text enthalten ist. wahrscheinlich wahr, aber ich würde geneigt sein, etwas viel Dunkleres / Einzigartigeres als die temporäre Ersatzzeichenfolge zu verwenden -myhamsterlivesonsaturn
vielleicht :)