vi / vim, wie kann ich eine Anzahl von Zeilen in eine neue Datei schreiben

30

Ich habe ein paar Zeilen, die ich in eine andere Datei schreiben möchte.
Wie kann ich das machen?

Michael Durrant
quelle

Antworten:

44

Du kannst tun

:100,200w filename

Natürlich sind 100.200 Zeilen der Bereich, den Sie schreiben möchten.

Bernhard
quelle
Sind die Adressen inklusive oder exklusiv?
Marcin
3
Inklusive. Ebenfalls inklusive, wenn Sie Muster verwenden:: / ^ etwas /, / ^ sonst / w Dateiname oder Markierungen: 'a,' bw Dateiname enthält die mit 'a' und 'b' markierten Zeilen.
Bruce Ediger
Hallo @Bernhard, was ist, wenn ich Zeilen aus der aktuellen Datei ausschneiden möchte.
Ravi Sevta
19

Die allgemeinsten:

  1. Bewegen Sie den Cursor in die erste Zeile der Gruppe, die Sie schreiben möchten. Hit m und asequentiall. Das ist "set mark named 'a'".

  2. Bewegen Sie den Cursor in die letzte Zeile der Gruppe und drücken Sie 'm' und 'b'. '

  3. Wechseln Sie in den Befehlsmodus hit: Drücken Sie als Sequenz die :'a,'b w filenameEingabetaste.

Das wird in vi, nvi und vim funktionieren.

Eine andere Methode funktioniert in moderneren Vim:

  1. Setzen Sie den Cursor auf die erste Zeile der Gruppe von Zeilen, die Sie ausschreiben möchten. Drücken Sie V, um den visuellen Zeilenblock zu starten.

  2. Bewegen Sie den Cursor an den unteren Rand der Zeilengruppe. Vim hebt jede Zeile mit invertiertem Video hervor.

  3. Ausschreiben. Drücken Sie :, um in den Befehlszeilenmodus zu wechseln. Das gibt Ihnen eine Eingabeaufforderung am unteren Rand des Fensters, die wie folgt aussieht: :'<,'> Das bedeutet vom Anfang des visuellen Blocks bis zum Ende. Geben Sie wden Dateinamen ein und drücken Sie die Eingabetaste.

Sie können einzelne Zeilen an das Ende der Datei anfügen, indem Sie den Cursor auf die Zeile setzen, die Sie ausschreiben möchten, und dann Folgendes eingeben: :.w >> filenameund Return drücken.

Die Befehle "Eine Gruppe von Zeilen schreiben" funktionieren auch mit ">> Dateiname" anstelle von "Dateiname". Das ">>" bewirkt, dass vi oder vim an die Datei angehängt werden, anstatt sie nur zu schreiben.

Bruce Ediger
quelle
8

Um die Antwort von Bernhard zu ergänzen, können Sie auch eine Region im visuellen Modus auswählen und dann eingeben :w filename.

Noffle
quelle
8

Wenn Sie die Zeilennummern kennen, die Sie schreiben möchten, können Sie dies über die Befehlszeile tun:

vim -c "100,200w new_file.txt" -c wq original_file.txt
Akavall
quelle
1

Ein kleiner Trick ist die Verwendung der relativen Zeilennummer. Zum Beispiel:: + 0, + 99w Dateiname Schreibe die nächsten 100 Zeilen in Dateiname.

Guokai Ma
quelle
Überschreibt das nicht die Originaldatei? Das OP möchte in eine andere Datei schreiben.
SabreWolfy
1
@ SabreWolfy Nein; Vielleicht haben Sie nach den Zeilennummern den Dateinamen verpasst. Ich habe gerade seine Version getestet und es hat funktioniert.
12.