ich kann nutzen
:5,12s/foo/bar/g
foo
um es bar
zwischen den Zeilen 5 und 12 zu suchen und zu ersetzen . Wie kann ich das nur in Zeile 5 und 12 tun (und nicht in den Zeilen dazwischen)?
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:
Vergisst, wie Ingo
:&
betont hat, Ihre Flaggen. Da Sie verwenden/g
, wäre der richtige Befehl:&&
:Sehen
:help :&
und Freunde.quelle
:&
Verwendung des Obskuren . Wenn es Flags (s/../../g
) gibt, muss man:&&
allerdings ...\(\%5l\|\%12l\)
ist dunkler als:&
Sie können immer ein
c
am Ende hinzufügen . Dies wird für jedes Spiel eine Bestätigung verlangen.quelle
g
Flagge im Spiel ist)n
5 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
:g
Operator verwenden. Wenn Ihre Datei so aussieht (Zahlen nur als Referenz):Und Sie wollen ersetzen
one
durcheno
auf den Linien , wo esenil
stattline
:quelle
Sie könnten
ed
einen 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:
Natürlich können die ed-Befehle auch in der Befehlszeile verwendet werden.
quelle
vim
Alternative.:s
, aber es gibt immer noch die Duplizierung des:s
Befehls (was Romainls Lösung vermeidet).sed
...