Ich arbeite mit zwei Dateien und muss einige Zeilen aus einer Datei kopieren und in eine andere Datei einfügen. Ich weiß, wie man (yy) kopiert und (p) in dieselbe Datei einfügt. Das funktioniert aber nicht für verschiedene Dateien. Wie wird das gemacht?
Gibt es auch eine Möglichkeit zum Ausschneiden und Einfügen? Ich habe versucht zu googeln, aber die meisten Ressourcen sprechen nur vom Kopieren und Einfügen.
vim
copy-paste
vi
cut
macha
quelle
quelle
Antworten:
Da Sie bereits wissen, wie Sie Text ausschneiden / ziehen, finden Sie hier einige Ideen, wie Sie ihn wieder in eine andere Datei einfügen können:
:e /path/to/other/file
) und fügen Sie sie einÖffnen Sie beide Dateien zusammen in einem geteilten Fenster und navigieren Sie mit Ctrl+ w, Up/ Downentweder durch:
vi -o /path/to/file1 /path/to/file2
quelle
Ctrl
+w
,s
.:sp myfile
horizontal geteilt und die angegebene Datei geöffnet wird. Wie würde ich vorgehen, wenn ich das Fenster lieber vertikal teilen möchte?Wenn Sie Vim unter Windows verwenden, können Sie über Folgendes auf die Zwischenablage (MS Copy / Paste) zugreifen:
"*dd - Schneiden Sie eine Linie (oder 3dd, um drei Linien zu schneiden)
"*yy - Kopieren Sie eine Zeile (oder 3JJ, um drei Zeilen zu kopieren)
"*p - Zeile (n) in Zeile nach dem Cursor einfügen
"*P - Zeile (n) in Zeile vor dem Cursor einfügen
Mit können Sie zwischen separaten Vim-Fenstern oder zwischen Vim- und PC-Anwendungen ( Editor , Microsoft Word usw.) einfügen .
quelle
+
als plattformübergreifendes System-Zwischenablage-Register (Windows und Linux) im Vergleich zu Windows*
(+
funktioniert unter Windows genauso wie*
).Verwenden Sie die Variationen von
d
gernedd
schneiden.So schreiben Sie eine Reihe von Zeilen in eine andere Datei:
Wo
<n>
und<m>
sind Zahlen (oder Symbole), die einen Zeilenbereich bezeichnen.Informationen zur Verwendung der Desktop-Zwischenablage finden Sie in den
+g
Befehlen.quelle
ma
,, In die letzte Zeile verschieben ,mb
. Prepend dann'
auf das Schreiben der Markierung , wenn Sie den obigen Befehl sind::'a,'b w filename
Sie können die andere Datei öffnen und eingeben
:r file_to_be_copied_from
. Oder Sie können puffern. Oder gehen Sie zur ersten Datei, gehen Sie in die Zeile, die Sie kopieren möchten, geben Sie ein"qY
, gehen Sie zu der Datei, die Sie einfügen und eingeben möchten"qP
."
Puffername, kopiert in den Puffer.Y
ist zerrt undP
wird gestellt. Hoffentlich hilft das!quelle
Hier ist eine Möglichkeit, dies zu tun.
Sie können auch beide Dateien anzeigen lassen. Teilen Sie den Bildschirm mit zB Ctrl+ w s.
Beim Schneiden wird ddas geschnittene Material geschnitten und in den Ruckpuffer gelegt. ddwird eine Linie "schneiden".
quelle
Dies sind alles großartige Vorschläge, aber wenn Sie wissen, wo sich Text in einer anderen Datei befindet, können Sie sed mit Leichtigkeit verwenden.
:r! sed -n '1,10 p' < input_file.txt
Dadurch werden 10 Zeilen in eine bereits geöffnete Datei an der aktuellen Position des Cursors eingefügt.quelle
:r ! head -n2 file.py
Markieren Sie beim Bearbeiten der Datei, wo Start und Ende verwendet werden sollen
ma
- setzt diea
Markemb
- setzt dieb
MarkeUm das in eine andere Datei zu kopieren, verwenden Sie einfach den folgenden
w
Befehl:quelle
Update 2017-05:
Ich habe gerade festgestellt, dass, wenn Sie die folgende Zeile in Ihre vimrc-Datei einfügen,
dann benutzt Vim die System-Zwischenablage.
Ich habe gerade festgestellt, dass der Yank-Weg nicht funktioniert, wenn ich Inhalte zwischen verschiedenen Vim-Instanzfenstern kopiere. (Zumindest funktioniert es aufgrund meiner Vim-Kenntnisse nicht. Ich weiß nicht, ob es eine andere Möglichkeit gibt, es zu aktivieren.)
Der Ruck-Weg funktioniert nur auf dem Weg, auf dem laut meinem Test mehrere Dateien im selben Fenster geöffnet werden.
Wenn Sie dies tun möchten, verwenden Sie besser die Methode zum Ausschneiden und Kopieren des Betriebssystems wie Ctrl+ x, Ctrl+ c(unter Windows).
quelle
Diese Remaps wirken für mich wie ein Zauber:
Wenn ich mich im visuellen Modus befinde, wähle ich die gewünschten Zeilen aus und drücke Ctrl+ cund dann Ctrl+v , um den Text in die Empfängerdatei einzufügen. Sie könnten auch "* y" verwenden, aber ich denke, das ist manchmal schwer zu merken.
Dies ist auch nützlich, um Text von Vim in die Zwischenablage zu kopieren.
Quelle: Kopieren und Einfügen zwischen Sitzungen mithilfe einer temporären Datei
quelle
Das Kopieren von Text zwischen zwei Puffern (== Dateien), die in derselben Instanz von Vim geöffnet sind, ist kein Problem:
Ziehen Sie einfach einen Puffer mit y(vorausgesetzt, Sie haben zuvor einen zu kopierenden Bereich im visuellen Modus markiert) und fügen Sie ihn dann mit in den anderen Puffer einp . Es funktioniert auch mit verschiedenen Registerkarten, solange sie sich in derselben Instanz von Vim befinden.
Wie Sie zwei Dateien in derselben Instanz von Vim öffnen, hängt von Ihrem System ab:
vim file1 file2
--remote-silent
Option angeben, um sicherzustellen, dass alle Dateien in derselben Instanz geöffnet werdenWenn Sie die beiden Dateien in zwei verschiedenen Instanzen von Vim geöffnet haben, müssen Sie mit der System-Zwischenablage arbeiten: Ziehen Sie in der ersten Vim-Instanz den Text mit
"+y
(markieren Sie erneut den Bereich, der zuvor im visuellen Modus gezogen werden soll) in die System-Zwischenablage ), dann gehe zum zweiten Vim und füge dort die Zwischenablage ein :"+p
.quelle
Ziel : Speichern Sie einen Teil einer Datei in einer anderen Datei.
Lösung :
Speichern Sie den ausgewählten Text in der neuen Datei. Typ :wSpaceund Name der neuen Datei. Eigentlich wirst du sehen
:'<,'>w new.txt
Dann drücken Enter
quelle
Mein Szenario war, dass ich n Zeilen in der Mitte, n unbekannt, von Datei 1 nach Datei 2 kopieren musste.
quelle
:echo has('clipboard')
sollte zurückkehren1
0
(zum Beispiel Mac OS X, mindestens Version 10.11 (El Capitan), Version 10.9 (Mavericks) und Version 10.8 (Mountain Lion) - wird mit einer Vim-Version geliefert, die keine Unterstützung für die Zwischenablage bietet), müssen Sie eine installieren Vim-Version mit Unterstützung für die Zwischenablage, z. B. überbrew install vim
(Vergessen Sie nicht, Ihre Terminals nach der Installation neu zu starten.)PS:
set mouse+=a
zu Ihrer hinzufügen. Sie können.vimrc
Linien in Vim mit der Maus auswählen, ohne fremde Elemente (wie Zeilennummern usw.) auszuwählen. HINWEIS: Die Möglichkeit, von der Maus ausgewählten Text zu kopieren, wird blockiert in die System-Zwischenablage von Vim .quelle
Beispiel: DateiA und DateiB - Beginnen Sie in DateiA in Zeile 25, kopieren Sie 50 Zeilen und fügen Sie sie in DateiB ein
quelle
Die folgende Option funktioniert meistens und auch zum späteren Einfügen.
Die gezogenen Zeilen werden im Puffer gespeichert
'x'
. Es kann überall in der Bearbeitung verwendet werden.Um Zeilen in die andere Datei einzufügen,
Beispiel: Geben Sie den folgenden Befehl in die aktuelle Bearbeitung ein
Komplette Operation
Datei 1 öffnen:
- Öffnen Sie jetzt die zweite Datei aus der aktuellen Bearbeitung
- Bewegen Sie den Cursor auf die Zeile, in die Sie einfügen müssen
- Zeilen aus dem Puffer
'*a*'
werden nach der aktuellen Cursorposition kopiertquelle
Wenn Sie einen Teil einer Datei kopieren und diesen Inhalt in die Mitte einer anderen Datei einfügen möchten, können Sie dies auf diese Weise tun.
Beispiel:
Oder
Beispiel:
Jetzt werden die Zeilen in eine andere Datei kopiert. Wenn Sie diese Zeilen nach dem Kopieren löschen möchten, können Sie dies tun
Oder
Gehen Sie jetzt zu einer anderen Datei. Halten Sie dann den Cursor auf der Zeile, in die Sie einfügen möchten.
Art
Jetzt wird der Inhalt der temporären Datei hier eingefügt. Sie können die temporäre Datei nach dem Einfügen des Inhalts von der Befehlszeile selbst löschen.
Dies wäre hilfreich, wenn Sie mehrmals kopieren und einfügen möchten.
quelle
Eine andere Möglichkeit könnte darin bestehen, die beiden Dateien in zwei geteilten Puffern zu öffnen und nach visueller Auswahl der interessierenden Zeilen das folgende "Snippet" zu verwenden.
quelle
Rufen Sie den Befehlsmodus auf und führen Sie ihn aus
ZB um Zeilen
20-30
ausfilename
der aktuell geöffneten Datei zu extrahierenquelle