Ich arbeite mit zwei Dateien, ich muss einige Zeilen aus einer Datei kopieren und in eine andere Datei einfügen. Ich weiß, wie man kopiert (yy) und in dieselbe Datei einfügt (p). 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 Googeln ausprobiert, aber die meisten Ressourcen beziehen sich nur auf das Kopieren und Einfügen.
Da Sie bereits wissen, wie man Text ausschneidet/reißt, finden Sie hier einige Ideen, um ihn wieder in eine andere Datei einzufügen:
:e /path/to/other/file
) und fügen Sie sie einÖffnen Sie beide Dateien zusammen in einem geteilten Fenster und navigieren Sie zwischen ihnen mit Ctrl + w, Up/Down entweder von:
vi -o /path/to/file1 /path/to/file2
Wenn Sie VIM unter Windows verwenden, können Sie auf die Zwischenablage zugreifen (MS Copy/Paste), indem Sie Folgendes verwenden:
"*dd - schneiden Sie eine Linie (oder 3dd, um 3 Linien zu schneiden)
"*yy - kopiere eine Zeile (oder 3yy um 3 Zeilen zu kopieren)
"*p - Zeile (n) in Zeile nach dem Cursor einfügen
"*P - Zeile (n) vor dem Cursor einfügen
Mit können Sie zwischen separaten Fenstern VIM oder zwischen VIM und PC-Anwendungen (Editor, Word usw.) einfügen.
Verwenden Sie die Variationen von d
wie dd
zum Schneiden.
Um einen Zeilenbereich in eine andere Datei zu schreiben, können Sie Folgendes verwenden:
:<n>,<m> w filename
Dabei sind <n>
und <m>
Zahlen (oder Symbole), die einen Zeilenbereich angeben.
Um die Desktop-Zwischenablage zu verwenden, werfen Sie einen Blick auf die +g
-Befehle.
Hier ist eine Möglichkeit, dies zu tun.
Sie können auch beide Dateien anzeigen lassen und den Bildschirm mit z. CTRL + ws
Was das Schneiden betrifft, d schneidet und legt das geschnittene Zeug in den Ruckpuffer. dd wird eine Linie "schneiden".
Sie können die andere Datei öffnen und :r file_to_be_copied_from
eingeben. Oder du kannst puffern. Oder gehen Sie zur ersten Datei, gehen Sie in die Zeile, die Sie kopieren möchten, geben Sie "qY
ein, gehen Sie zu der Datei, die Sie einfügen möchten, und geben Sie "qP
ein.
"
buffer_name, kopiert in den Puffer. Y
ist Ruckeln und P
wird gesetzt. Hoffentlich hilft das!
Dies sind alles gute Vorschläge, aber wenn Sie wissen, wo sich der Text in einer anderen Datei befindet, verwenden Sie sed einfach. :r! sed -n '1,10 p' < input_file.txt
Damit werden 10 Zeilen in eine bereits geöffnete Datei an der aktuellen Position des Cursors eingefügt.
Markieren Sie während der Bearbeitung der Datei, wo der Anfang und das Ende verwendet werden sollen
ma
- setzt die Markierung a
mb
- setzt die Markierung b
Um dies in eine andere Datei zu kopieren, verwenden Sie einfach den Befehl w
:
:'a,'bw /name/of/output/file.txt
Diese Remaps wirken für mich wie ein Zauber:
vmap <C-c> "*y " Yank current selection into system clipboard
nmap <C-c> "*Y " Yank current line into system clipboard (if nothing is selected)
nmap <C-v> "*p " Paste from system clipboard
Wenn ich mich im visuellen Modus befinde, wähle ich die gewünschten Zeilen aus und drücke Strg + c und dann Strg + v, um den Text in die Empfängerdatei einzufügen. Sie könnten "* y auch verwenden, aber ich denke, das ist manchmal schwer zu merken.
Dies ist auch nützlich, um Text aus vim in die Zwischenablage zu kopieren.
Quelle: http://vim.wikia.com/wiki/Copy_and_paste_between_sessions_using_a_temporary_file
Habe hier keine einfache Antwort gefunden, also poste ich meine eigene.
Ziel: Speichert einen Teil einer Datei in einer anderen Datei.
Lösung:
Speichern Sie den ausgewählten Text in der neuen Datei. Art :wSpace und den Namen der neuen Datei. Eigentlich wirst du sehen
:'<,'>w new.txt
Dann drücken Enter
201705 Update:
Ich habe gerade festgestellt, dass, wenn Sie folgende Zeile in Ihre Vimrc-Datei einfügen,
set Zwischenablage = unbenannt
dann verwendet VIM die Systemzwischenablage
Ich habe gerade festgestellt, dass der Ruckweg auf dem Weg, auf dem ich Inhalte zwischen verschiedenen VIM - Instanzfenstern kopiere, nicht funktioniert. (Zumindest funktioniert es nicht auf Grundlage meines VIM - Wissens. Ich weiß nicht, ob es eine andere Möglichkeit gibt, damit es funktioniert).
Das Ruckeln funktioniert nur auf dem Weg, bei dem gemäß meinem Test mehrere Dateien im selben Fenster geöffnet werden.
Wenn Sie dies tun möchten, sollten Sie das Ausschneiden-Kopieren-Über-Verfahren des Betriebssystems wie Strg + X, Strg + C (unter Windows) verwenden.
Das Kopieren von Text zwischen zwei Puffern (== Dateien), die in derselben Instanz von VIM geöffnet werden, ist kein Problem: Einfach in einen Puffer mit ziehen y (vorausgesetzt, Sie haben zuvor im visuellen Modus einen zu kopierenden Bereich markiert), und fügen Sie ihn dann mit in den anderen Puffer ein p. Funktioniert auch mit verschiedenen Registerkarten, sofern diese sich in derselben Instanz von VIM befinden.
Wie zwei Dateien in derselben Instanz von VIM geöffnet werden, hängt von Ihrem System ab:
vim file1 file2
erreichen.--remote-silent
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 die Systemzwischenablage verwenden: In der ersten VIM ziehen Sie den Text mit "+y
in die Systemzwischenablage (markieren Sie den Bereich, der zuvor im visuellen Modus gezogen werden soll) ), dann gehe zum zweiten VIM und füge die Zwischenablage dort ein: "+p
.
Mein Szenario war, dass ich n Anzahl der Zeilen in der Mitte (n unbekannt) von Datei 1 in Datei 2 kopieren muss.
:'a,'bw /name/of/output/file.txt
Beispiel: fileS und file - beginnen Sie in file bei Zeile 25, kopieren Sie 50 Zeilen und fügen Sie sie in fileB ein
fileA
Goto 25th line
25G
copy 50 lines into buffer v
"v50yy
Goto fileB
:e fileB
Goto line 10
10G
paste contents of buffer v
"vp
Rufen Sie den Befehlsmodus auf und starten Sie
:r! sed -n '<start_line_num>, <end_line_num> p' file_to_extract_text_from
Z. B. Zeilen 20-30
aus filename
in die aktuell geöffnete Datei extrahieren
:r! sed -n '20, 30p' filename
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.
:linenumber,linenumber write newfile
Beispiel:
:2,34 write temp1
Oder
:'mark, 'mark write newfile
Beispiel:
:'a,'b write temp1
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
:linenumber1,linenumber2 d
Oder
:'mark1,'mark2 d
Gehen Sie jetzt zu einer anderen Datei. .__ Halten Sie den Cursor in der Zeile, in der Sie einfügen möchten.
Art
:r!cat temp1
Nun 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.
:!rm temp1
Dies würde helfen, wenn Sie mehrmals kopieren und einfügen möchten.
Eine andere Möglichkeit besteht darin, die beiden Dateien in zwei aufgeteilten Puffern zu öffnen und nach der visuellen Auswahl der interessierenden Zeilen das folgende "Snippet" zu verwenden.
:vnoremap <F4> :y<CR><C-W>Wr<Esc>p
Die unten stehende Option funktioniert meistens und auch zum späteren Einfügen.
"xnyy
x - buffer name
n - number of line to Yank - optional
Die abgerufenen Zeilen werden im Puffer 'x'
..__ abgelegt und können überall in der Bearbeitung verwendet werden.
Um die Zeile (n) in die andere Datei einzufügen,
:e filename&location
Beispiel: Geben Sie den folgenden Befehl in die aktuelle Bearbeitung ein
:e /u/test/Test2.sh
and paste using "xP
P - before cursor
p - after cursor
Komplette Bedienung
Datei 1 öffnen:
vi Test1.sh
a10yy
-Yanked 10 lines
-nicht öffnen Sie die zweite Datei aus der aktuellen Bearbeitung
*:e /u/test/Test2.sh*
- Bewegen Sie den Cursor in die Zeile, in die Sie einfügen müssen
*"ap*
- Zeilen aus dem Puffer '*a*'
werden nach der aktuellen Cursorposition kopiert
:echo has('clipboard')
sollte 1
zurückgeben0
zurückgegeben wird (z. B. OSX, mindestens El Capitan, Mavericks und Mountain Lion - mit Vim-Version ohne Zwischenablage-Unterstützung), müssen Sie die Vim-Version mit Zwischenablage-Unterstützung installieren, z. B. über brew install vim
(vergessen Sie nicht, Ihre neu zu starten Terminal (s) nach der Installation)P.S:
set mouse+=a
zu Ihrem .vimrc
hinzufügen. Dadurch können Sie Zeilen in vim mit der Maus auswählen, ohne dabei überflüssige Elemente (wie Zeilennummern usw.) auszuwählen. HINWEIS: Es wird blockiert Möglichkeit, mit der Maus ausgewählten Text aus Vim in die System-Zwischenablage zu kopieren