Antworten:
Vim hat spezielle Atome mit regulären Ausdrücken, die in bestimmten Zeilen, Spalten usw.; Sie können sie (möglicherweise zusätzlich zum Bereich) verwenden, um die Übereinstimmungen zu begrenzen:
:5,12s/\(\%5l\|\%12l\)foo/bar/g
Sehen :help /\%l
Sie können die Ersetzung in Zeile 5 durchführen und in Zeile 12 mit minimalem Aufwand wiederholen:
:5s/foo/bar
:12&
Vergisst, wie Ingo :&betont hat, Ihre Flaggen. Da Sie verwenden /g, wäre der richtige Befehl :&&:
:5s/foo/bar/g
:12&&
Sehen :help :&und Freunde.
:&Verwendung des Obskuren . Wenn es Flags ( s/../../g) gibt, muss man :&&allerdings ...
\(\%5l\|\%12l\)ist dunkler als:&
Sie können immer ein cam Ende hinzufügen . Dies wird für jedes Spiel eine Bestätigung verlangen.
:5,12s/foo/bar/gc
gFlagge im Spiel ist)
n5 oder 6 Mal zu drücken, als \(\%5l\|\%12l\)die Ersatzanweisung hinzuzufügen ?
Interessante Frage. Es scheint, als gäbe es nur eine Bereichsauswahl und keine Mehrzeilenauswahl:
http://vim.wikia.com/wiki/Ranges
Wenn Sie jedoch in Zeile 5 und 12 etwas Besonderes haben, können Sie den :gOperator verwenden. Wenn Ihre Datei so aussieht (Zahlen nur als Referenz):
1 line one
2 line one
3 line one
4 line one
5 enil one
6 line one
7 line one
8 line one
9 line one
10 line one
11 line one
12 enil one
Und Sie wollen ersetzen onedurch enoauf den Linien , wo es enilstatt line:
:g/enil/s/one/eno/
Sie könnten edeinen zeilenorientierten Texteditor mit ähnlichen Befehlen wie vi und vim verwenden. Es ist wahrscheinlich älter als vi und vim.
In einem Skript (unter Verwendung eines Here-Dokuments, das Eingaben bis zur EndCommand-Markierung verarbeitet) würde es folgendermaßen aussehen:
ed file <<EndCommands
5
s/foo/bar/g
7
s/foo/bar/g
wq
EndCommands
Natürlich können die ed-Befehle auch in der Befehlszeile verwendet werden.
vimAlternative.
:s, aber es gibt immer noch die Duplizierung des :sBefehls (was Romainls Lösung vermeidet).
sed...