Wie kann ich mit vim einen Text in eine neue Datei verschieben? Im Moment mache ich das:
- wähle den Text aus
- benutzen
:w new_file
- Wählen Sie den Text erneut aus
- Löschen Sie den Text
Gibt es einen effizienteren Weg, dies zu tun?
Vor
a.txt
sometext
some other text
some other other text
end
Nach dem
a.txt
sometext
end
b.txt
some other text
some other other text
Unter "Verschieben eines Textstücks in eine neue Datei" wird angenommen, dass Sie dieses Textstück aus der aktuellen Datei ausschneiden und eine neue Datei erstellen, die nur diesen Text enthält.
Verschiedene Beispiele:
:1,1 w new_file
um eine neue Datei zu erstellen, die nur den Text aus Zeile 1 enthält:5,50 w newfile
um eine neue Datei zu erstellen, die den Text von Zeile 5 bis Zeile 50 enthält:'a,'b w newfile
um eine neue Datei zu erstellen, die den Text von Markea
zu Marke enthältb
Das Obige kopiert nur den Text und erstellt eine neue Datei, die diesen Text enthält. Anschließend müssen Sie löschen.
Dies kann mit demselben Bereich und dem folgenden
d
Befehl erfolgen::5,50 d
um den Text von Zeile 5 bis Zeile 50 zu löschen:'a,'b d
um den Text von Markierunga
zu Markierung zu löschenb
Oder durch Verwendung ddfür den einzeiligen Fall.
Wenn Sie stattdessen den Text im visuellen Modus auswählen und dann drücken,
:
während der Text ausgewählt ist, wird in der Befehlszeile Folgendes angezeigt::'<,'>
Welches zeigt den ausgewählten Text. Sie können den Befehl dann wie folgt erweitern:
:'<,'>w >> old_file
Womit der Text an eine vorhandene Datei angehängt wird . Dann wie oben löschen.
Einzeiler:
:2,3 d | new +put! "
Die Panne:
:2,3 d
- Löschen Sie die Zeilen 2 bis 3|
- Technisch gesehen leitet dies die Ausgabe des ersten Befehls an den zweiten Befehl weiter, aber da der erste Befehl nichts ausgibt, verketten wir nur die Befehlenew
- öffnet einen neuen Puffer+put! "
- den Inhalt des unbenannten Registers ("
) in den Puffer legen!
) ist da, damit der Inhalt vor der aktuellen Zeile steht. Dies führt zu einer Leerzeile am Ende der Datei. Ohne es gibt es eine leere Zeile oben in der Datei.quelle
Basierend auf der Antwort von @ embedded.kyle und diesen Fragen und Antworten endete ich mit dieser Zeile, um eine Auswahl an eine Datei anzuhängen und aus der aktuellen Datei zu löschen. Nachdem Sie einige Zeilen mit ausgewählt haben
Shift+V
, drücken Sie:
und führen Sie Folgendes aus:Im ersten Teil werden ausgewählte Zeilen angehängt. Der zweite Befehl wechselt in den normalen Modus und wird ausgeführt
gvd
, um die letzte Auswahl auszuwählen und dann zu löschen.quelle
Wählen Sie den Text im visuellen Modus aus und drücken Sie y, um ihn in den Puffer zu "ziehen" (kopieren) oder dum ihn in den Puffer zu "löschen" (ausschneiden).
Dann können Sie
:split <new file name>
Ihr vim-Fenster aufteilen und drücken, pum den zerrissenen Text einzufügen. Schreiben Sie die Datei wie gewohnt.Um den Split wieder zu schließen, übergeben Sie den Split, den Sie schließen möchten
:q
.quelle
:x
stattdessen die Teilung bestehen , können Sie das Schreiben und Schließen in einem Schritt kombinieren und es in fünf Schritten durchführen. : P