In vim habe ich manchmal Gelegenheit, die ersten paar Vorkommen eines Matches in einer Zeile zu ersetzen, aber nicht jeder g
möchte. z.B:
a a a a a
zu
b b b a a
Ich weiß, dass ich es gebrauchen könnte :s/a/b/[enter]:[up][enter]:[up][enter]
, aber das ist bei drei Wiederholungen langweilig genug. Ich habe Zeilen mit möglicherweise mehr als 10 Substitutionen.
Ich habe es versucht:
:s/a/b/3g
: vim beschwerte sich über nachgestellte Zeichen.:s/a/b/3
: Ändert das erste Vorkommen in dieser und den folgenden beiden Zeilen.3:s/a/b
: das gleiche wie vorher.:s/a/b/g3
: Ändert alle Vorkommen in dieser und den nächsten beiden Zeilen.:3s/a/b
: Ändert das erste Vorkommen in Zeile 3.:/a/,3/a/s/a/b
: Ändert das erste Vorkommen in jeder Zeile zwischen der nächstena
und der dritten Zeilea
in der Datei (Aufforderung zum Umkehren, falls erforderlich).:/a/,/\([^a]*a\)\{3\}/s/a/b/
: Ändert das erste Vorkommen in jeder Zeile zwischen dieser und der nächsten mit 3a
Sekunden (und dies wäre für eine Suche mit mehreren Zeichen nicht einfach erweiterbar gewesen).
Und verschiedene andere Adressierungsmuster, von denen keines funktionierte. Ich muss sagen, ich habe ziemlich viel über das gelernt:s
Befehl , eine Antwort auf dieses Problem zu finden, aber ich habe es immer noch nicht gelöst.
Weiß jemand, wie man das macht?
(Bonuspunkte für einen bestimmten Bereich, z. B. zweites bis viertes Vorkommen)
n
und .
obwohl ich nicht daran gedacht habe, sie hier zu verwenden. Sicher eine Verbesserung, danke.
s/a/=something/
sollte den Trick machen ( :help sub-replace-=
). Ich spreche Vim nicht fließend genug, um sofort zu schreiben something
.
:[up][enter]
Kann durch ersetzt werden &
, was immer noch nicht ideal ist, aber zumindest weniger schmerzhaft ist.