Wie kopiere ich Text von vim in ein externes Programm?

84

Ich versuche, Text aus vim zu kopieren und einzufügen. Ich mache v, um in den visuellen Modus zu wechseln, und dann y, sobald ich meinen Block ausgewählt habe.

Es scheint, als würde der Text in die Zwischenablage von vim kopiert, da p ihn einfügen wird. In einem anderen Programm (z. B. Chrome) wird durch Klicken mit der rechten Maustaste -> Einfügen nicht der richtige Text eingefügt. Wie kopiere ich Text in die richtige Zwischenablage?

ripper234
quelle

Antworten:

62

Das Folgende funktioniert nur, wenn vim --versionangezeigt wird, dass Sie über eine +xterm_clipboardFunktion verfügen . Wenn nicht, müssen Sie zusätzliche Pakete installieren oder vim neu kompilieren, wobei diese Funktion hinzugefügt wird.


Hierfür gibt es zwei Möglichkeiten:

"+y

kopiert in den "normalen" Zwischenspeicher (so können Sie mit Strg + V einfügen, mit der rechten Maustaste klicken und "Einfügen" usw. auswählen), während

"*y

kopiert in die X11-Auswahl - Sie können aus diesem Puffer mit der mittleren Maustaste einfügen.

Beachten Sie dies "*und "+arbeiten Sie in beide Richtungen. Wenn Sie also Text in einer anderen Anwendung ausgewählt haben, können Sie ihn mit in vim einfügen. "*pWenn Sie Text kopiert haben (z. B. mit Strg-C), können Sie ihn mit in vim einfügen "+p.

Hamish Downer
quelle
@ Tshepang es funktioniert nicht aus Kitt. was soll ich machen ?
Rahul Patil
@ RahulPatil kenne ich nicht; stellen Sie möglicherweise eine separate Frage, möglicherweise zu Super User (da es sich um ein Windows-Tool handelt, wäre es dort willkommener).
Tshepang
@RahulPatil - Wenn Sie Putty verwenden, bearbeiten Sie die Datei auf einem Remote-Server, nicht auf Ihrem lokalen Computer. Im Allgemeinen weiß der Remote-Server nichts über die Zwischenablage auf Ihrem lokalen Computer. Wenn Sie einen Linux-Desktop verwenden, können Sie ssh mit X-Weiterleitung ausführen (vorausgesetzt, Sie haben die X-Bibliotheken auf dem Server installiert). Da Putty jedoch unter Windows ausgeführt wird, wird X nicht ausgeführt, sodass Sie es nicht weiterleiten können.
Hamish Downer
1
Hallo allerseits, Wie kann ich "+ y"
eingeben? Soll ich
@AlindBillore: Im Befehlsmodus. Wahrsten Sinne des Wortes, drücken Sie die Tasten shift'dann shift=dann y(nicht alle auf einmal, eine nach der anderen, mit Ausnahme der Verschiebungen natürlich).
Reid
31

Wenn Sie vim> = 7.3.74 verwenden, können Sie dies tatsächlich in Ihre vimrc einfügen:

set clipboard=unnamedplus

Welches wird automatisch den +Puffer (die System-Zwischenablage) standardmäßig verwenden. Um dann zu reißen (kopieren), benutzen Sie einfach den regulären yBefehl usw.

Ich fand dieses Verhalten jedoch ziemlich ärgerlich, da Befehle wie dden Text, den sie bearbeiten, in den Standardpuffer gestellt wurden, was bedeutete, dass ich ddzum Beispiel kein Fasten durchführen und keine Zeile aus dem Internet einfügen konnte.

Reid
quelle
2
+ ist ein Zwischenablage-Registrierer
Kit Ho
1
In Bezug auf Ihren letzten Punkt ddbedeutet dies "eine Linie abschneiden", sodass dies das erwartete Verhalten ist. In dem seltenen Fall, dass Sie eine Linie tatsächlich in Vergessenheit geraten lassen möchten, "_ddwird dies der Fall sein .
user7089
Auch als @ HamishDowner in seiner Antwort vermerkt: Das Folgende wird nur funktionieren, wenn vim --versionangibt, dass Sie über eine +xterm_clipboardFunktion verfügen . Wenn nicht, müssen Sie zusätzliche Pakete installieren oder vim neu kompilieren, wobei diese Funktion hinzugefügt wird.
Rudolph9
24

Halten Sie die Umschalttaste gedrückt und markieren Sie den Text mit dem Mauszeiger.
Text wird in die Zwischenablage kopiert.

Dies funktioniert auch beim Einfügen aus der Zwischenablage in vim.

Um klar zu sein, funktioniert dies für die vimAusführung in einem Terminal wie xterm.

Loop Space
quelle
Meinen Sie damit, die Umschalttaste gedrückt zu halten, wenn Sie Text auswählen? So mache ich es xterm.
nozimica
@nozimica: Ja.
Loop Space
Diese Antwort sollte mehr positive Stimmen haben ...
whoan
@LoopSpace für mehrzeilige Auswahl kopiert auch Zeilennummern, wenn set nuaktiviert. Also möchten Sie wahrscheinlich die Zeilennummern mit einer Verknüpfung umschalten oder den :set nonuBefehl vor jeder Auswahl ausführen
Steven Pribilinskiy
Auf MAC halten Sie die Optionstaste gedrückt und wählen Sie Text mit dem Mauszeiger aus
abreschi
10

Ich finde den Standard "+gPund die "+yBefehle sehr schwierig zu bedienen. Also habe ich Ctrl-Yzum ruckeln in die Zwischenablage und Ctrl-Pzum Einfügen aus der Zwischenablage umgemappt . Fügen Sie dies zu.vimrc

nnoremap <C-y> "+y
vnoremap <C-y> "+y
nnoremap <C-p> "+gP
vnoremap <C-p> "+gP
Bernhard Heijstek
quelle
5

Egal, ich habe die Antwort gefunden - sie steht auf den Menüs des Vims.

"+y

Sehr intuitiv.

ripper234
quelle
Benutzt du gvim?
nozimica
@ nozimica- yeah
ripper234
1
Dies ist auch in vim verfügbar, das in einem xterm oder einem ähnlichen Terminalemulator unter X ausgeführt wird (sofern vim mit der +xterm_clipboardFunktion kompiliert wurde ).
Gilles
3

Nur um eine nicht vim-spezifische Antwort hinzuzufügen: Sie können sie Ctrl+Shift+Cin Ubuntu in die System-Zwischenablage kopieren (wenn die Funktionalität von Ihrem Terminal-Emulator bereitgestellt wird, stellt gnome-terminal for one sie zur Verfügung). Ctrl+Shift+VFügt in ein anderes Terminalfenster und Ctrl+Vin eine GUI-App ein.

Wenn Sie den Text im Terminal auswählen und mit der mittleren Maustaste darauf klicken, wird er außerdem aus der X11-Zwischenablage eingefügt.

crazy2be
quelle
Aus irgendeinem Grund funktioniert es nicht. Einfach im visuellen Modus auswählen, mit Strg-Umschalt-C kopieren und dann mit Strg-Umschalt-V in eine andere App einfügen? Der Text wird für mich nicht kopiert.
Ripper234
2
@ Ripper234: Dies funktioniert nicht, wenn Sie GVIM verwenden. Wie crazy2be sagte, ist diese Funktionalität von Ihrem Terminal-Emulator.
Reid
@ ripper234: 1) Diese Funktion wird von Ihrem Terminal-Emulator bereitgestellt (Gnome-Terminal stellt sie zur Verfügung). 2) Strg + Umschalt + V wird zum Einfügen in das Terminal verwendet . GUI-Apps verwenden weiterhin Strg + V wie gewohnt. Ich werde die Antwort bearbeiten, um sie klarer zu machen.
crazy2be
Wenn Sie mit der Maus die Umschalttaste drücken und Text auswählen, wird das Einfügen aus einem Pufferfenster zum Kinderspiel.
Stephan
2

Wenn Sie die Light-Version von vim installieren, ist standardmäßig die +xterm_clipboardFunktion on ( vim --version | grep xterm) nicht verfügbar , die für die Verwendung der *und +-Register außerhalb von vim erforderlich ist .

Um es zu aktivieren, müssen Sie entweder vim selbst kompilieren oder eine Version von vim installieren, die bereits vorinstalliert ist. Früher habe ich vim-gnome: sudo apt-get install vim-gnome. Wenn Sie auftreten vim --version | grep xterm, werden Sie sehen, dass es jetzt ist +xterm_clipboard.

Versuchen Sie nun, auf das +und zu kopieren, *und es sollte funktionieren.

lachender_mann
quelle
2

Als ich überprüft habe, dass mein Vim die Zwischenablage nicht unterstützt:

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

Ich habe vim-gnome installiert und erneut überprüft

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

Jetzt kann ich mit "+ y" und "+ p" kopieren und einfügen.

Ashutosh Tripathy
quelle
1

Halten Sie die UMSCHALTTASTE gedrückt und wählen Sie mit der Maus Text aus, um ihn zu kopieren.

Dann fügen Sie mit ein anderes Programm ein CTRL + v.

Funktioniert im Terminal auf meinem Ubuntu 16.04. Nicht sicher über gvimund andere Systeme.

Bildbeschreibung hier eingeben

Andrzej Rehmann
quelle
Das funktioniert nicht.
Astrid
kreative Antwort
vidur punj
0

Wenn etwas funktioniert, versuchen Sie einfach, das Terminal zu wechseln, das vim umschließt (wenn Sie vim vom Terminal aus verwenden). Ich habe zum Beispiel festgestellt, dass die Zwischenablage nicht per guake zugänglich ist, während sie vom Gnome-Terminal aus zugänglich ist.

gc5
quelle