Wie kopiere ich Daten zwischen verschiedenen Instanzen von vim?

41

Wenn ich das erste VIM zum Kopieren einer Zeile (mit yy) verwende, wie füge ich es in das VIM eines anderen Terminals (mit p) ein? Gibt es irgendwelche Befehle oder Einstellungen, die das können? Kann ich kopieren und in die globale Systemzwischenablage einfügen?

Ich weiß, dass die folgenden Möglichkeiten möglich sind, aber ich möchte eine einfachere:

  1. Ich möchte das erste vim nicht verlassen und das zweite vim wieder öffnen.

  2. Ich möchte kein separates Fenster (mit :sp) verwenden.

Sam
quelle

Antworten:

49

Zuerst müssen Sie eine für die Zwischenablage aktivierte Version von vim installieren. Um Benutzer mit nicht grafischen Umgebungen (z. B. Ubuntu Server-Benutzer) zu unterstützen vimund vim-tinydiese Funktion nicht zu nutzen. Sie möchten GVim installieren Installieren Sie GVim, das entweder grafisch oder in Ihrem Terminal gestartet wird. GVim ersetzt den vimBefehl.

Sie können den Text vom ersten Vim in den 'Ausschneidepuffer' ziehen und dann den Text in das zweite Vim einfügen. Verwenden Sie das +Register , um in den globalen Schnittpuffer zu kopieren . Mit der "Taste können Sie angeben, welches Register beim Durchführen einer Ruck- oder Einfügeoperation verwendet werden soll.

Im ersten Schritt ziehen Sie eine Zeile in das +Register:

"+yy

dann, um aus dem +Register im zweiten vim einzufügen:

"+p

Weitere Informationen zu den verfügbaren Registern finden Sie unter :help registers. Sie können auch "+pText einfügen, der aus einer anderen Quelle in Ihrem System kopiert wurde.

Jeremy Kerr
quelle
Was auch immer es wert ist, wenn Sie GVim installieren (das Paket könnte so etwas wie vim-gnome heißen), geben Ihnen die Menüeinträge sehr oft die Tastenkombinationen, die sie aufrufen.
Zpletan
1
Ich möchte Gvim nicht installieren. Wie mache ich das in vim?
Trusktr
1
@trusktr eigentlich funktioniert das auch in vim. In dieser Frage & Antwort heißt es, dass Sie mindestens Version 7.3.74 (dh Ubuntu 11.10 oder höher) benötigen.
Lumbric
das funktioniert irgendwie nicht, wenn ein vim in tmux gestartet wurde und ein anderer vim normalerweise im Freien gestartet wurde - wissen Sie, wie Sie dieses Problem umgehen können?
Serup
"*yy, "*pFunktioniert auch. Wenn du :reg
drückst
20

Die beste Lösung, die für mich funktioniert hat (für die ich meine Tastenkombinationen nicht ändern muss), ist hier: https://stackoverflow.com/questions/9166328/how-to-copy-selected-lines-to-clipboard-in- vim

Einfach gesagt:

set clipboard=unnamedplus

in deinem .vimrc.

bhh1988
quelle
Ich musste tatsächlich set clipboard=unnamedplusin Kombination mit GVim installieren. Ich konnte jedoch xfce4-terminal für Vim anstelle des eigentlichen GVim-Programms verwenden.
Jbrock
9

Ich mag die Lösung von Bill und habe ein Mapping erstellt:

vmap <leader>y :w! /tmp/vitmp<CR>                                                                   
nmap <leader>p :r! cat /tmp/vitmp<CR>

Der erste im visuellen Modus kopiert alles in / tmp / vitmp und der zweite kopiert den Inhalt aus / tmp / vitmp in die Datei

Samir Sadek
quelle
einfache, unkomplizierte lösung - auf die alte
art und weise
Was brauche ich, um Vim einzugeben, nachdem ich dies der .vimrc hinzugefügt habe?
Vitaly Zdanevich
Sie müssen vim so einrichten, dass Sie die Führungstaste gefolgt von y zum Kopieren und die Führungstaste gefolgt von p zum Einfügen verwenden können.
Samir Sadek
1
Dies ist derjenige, der funktioniert. Die Verwendung "*yscheint auf Servern
fehlerhaft
Oh mein. Ich habe stundenlang nach diesem Thema gesucht, indem ich vim in tmux in docker verwendet habe. Mein normaler vimrc, der schon unnamed / unnamedplus hatte, funktionierte NICHT in vim in tmux in docker. Ich habe auch nichts im Internet gefunden. Dies scheint jedoch auf allen Maschinen zu funktionieren! In Docker, auf Mac und auf Arch nativ. Danke!!
Tommy
5

Ich wechsle zwischen verschiedenen Rechnern der Unix-Familie und habe festgestellt, dass die folgende Reihenfolge immer für mich funktioniert:

In der Source vi Session:

  1. Mit ESC m aerste Zeile markieren
  2. Mit ESC m bletzte Zeile markieren
  3. Verwenden Sie :'a,'b w! xferdiese Option, um den Bereich in eine Arbeitsdatei zu schreiben

In der Zielsitzung:

  1. Bewegen Sie den Cursor auf die Einfügezeile
  2. Verwenden Sie ESC :r xferin Text lesen

Ich weiß, es ist nicht schön, aber es funktioniert immer für mich!

Rechnung
quelle
2

Es ist eigentlich ganz einfach: Installieren Sie eine Version vim, die die Zwischenablage unterstützt. Wenn vimdies nicht der Fall ist, erhalten Sie eine der folgenden Antworten:

sudo apt-get install vim-athena
sudo apt-get install vim-gnome
sudo apt-get install vim-gtk

Einmal installiert, einfach ausführen vim. Sie können auch überprüfen, ob die Zwischenablage aktiviert ist, indem Sie Folgendes ausführen:

 vim --version|grep clipboard

du solltest sehen +xterm_clipboard.

FuzzyAmi
quelle
Diese Antwort bringt das Problem auf den Punkt: Ist in Ihrer Version von Vim die Zwischenablage aktiviert? Andernfalls macht keine dieser anderen Antworten einen Unterschied. Mach "vim --version" und suche nach "+ clipboard". Ich denke, + xterm_clipboard gilt nur, wenn Sie die X11-Zwischenablage unterstützen möchten, aber wenn Sie Ubuntu verwenden, möchten Sie dies auch.
Ray
2

Sie werden diese Antwort wahrscheinlich alle hassen. Ich habe in den 80ern in vi auf einer Vielzahl von Unix-Computern gearbeitet und hatte in letzter Zeit die Gelegenheit, in Linux herumzuspielen.

Meine Lösung zum Ausschneiden und Einfügen ist die Verwendung von Putty unter Windows, um auf meine Linux-Box zuzugreifen.

Mit Putty können Sie jeden Text in sein Fenster kopieren, indem Sie ihn einfach markieren. Sie können dann zu einem anderen Putty-Fenster / einer anderen Putty-Sitzung wechseln und mit der rechten Maustaste klicken, um sie einzufügen.

Einfacher geht es nicht. und jetzt gibt es vim. Schade, dass es zu meiner Zeit noch keine gab, es hätte mir geholfen, die Emacs-Mafia abzuwehren.

srtour2011
quelle
1

Es wird nicht genau yy verwendet, aber wenn Sie den zu kopierenden Text mit der Maus auswählen (manchmal müssen Sie Shift- [drag] verwenden), wechseln Sie zum anderen Terminalfenster und führen Sie einen [mittleren Klick] oder Shift- [middle aus Klicken Sie dort auf], um den Text an der aktuellen Einfügemarke einzufügen.

Dies funktioniert für die meisten Befehlszeilen- und GUI-Programme, nicht nur für vim.

Sergey
quelle