Ist es möglich, direkt von Vim in die Zwischenablage zu kopieren? yy
kopiert nur Sachen in den internen Puffer von Vim. Ich möchte in die Zwischenablage des Betriebssystems kopieren. Gibt es einen solchen Befehl in Vim oder können Sie nur Sachen in Vim ziehen?
752
sudo apt-get install vim-gnome
bevor Sie die folgenden Befehle anwenden. Andernfalls wird ein ungültiger Registerfehler angezeigt!vim-gnome
ist es wahrscheinlich übertrieben oder einfach nicht verfügbar in ihrem Betriebssystem / ihrer Distribution, während ich vermutevim-gtk
und vorzugsweisevim-gtk3
eher existiere und weniger Abhängigkeiten ziehe, während die Integration der Zwischenablage weiterhin möglich ist (zumindest für diejenigen, die noch auf X11 sind; Ich bin mir nicht sicher, wie das alles mit Wayland interagiert.Antworten:
Das
*
Register wird dies tun. In Windows+
und*
sind gleichwertig. Unter Unix gibt es einen subtilen Unterschied zwischen+
und*
:*
ist wahrscheinlich das, was Sie die meiste Zeit wollen, also benutze ich es,*
weil es in beiden Umgebungen so funktioniert, wie ich es erwartet habe.In Linux-Distributionen müssen Sie zuerst
vim-gtk
(akagvim
) installieren , um die Funktionalität der Zwischenablage zu erhalten. Dies liegt daran, dass Nicht-GTK-Vim normalerweise ohne X11-Unterstützung kompiliert wird. Dies dient dazu, dass es nur auf Konsolencomputern (häufig auf Servern) ausgeführt werden kann.Und für diejenigen, die sich nicht sicher sind, wie sie Register verwenden sollen, wenn sie ziehen oder setzen, schreiben Sie einfach
"
den Namen des Registers. Wenn Sie also etwas in das Register der Zwischenablage kopieren, geben Sie es ein"*y
und geben es dann ein"*p
(Bildnachweis: Kyle Mathews).quelle
vim --version|grep .xterm_clipboard -o
und wenn-
ja, haben Sie keine Unterstützung. Laden Sie eine andere Version herunter als unter ubuntuforums.org/showthread.php?t=1686955+
registrieren. Wenn Sie beispielsweise drei Zeilen in die Zwischenablage des Systems kopieren möchten, verwenden Sie Befehle wiev3j"+y
, und fügen Sie sie dann in eine andere Anwendung oder in ein anderes VIM ein. Die Verwendung von*
register unter Linux kann nur zwischen verschiedenen VIM-Anwendungen kopieren und einfügen.Unter Mac OSX
Ausgewähltes Teil kopieren: Text visuell auswählen (Typ
v
oderV
im normalen Modus) und eingeben:w !pbcopy
Kopieren Sie die gesamte Datei
:%w !pbcopy
Einfügen aus der Zwischenablage
:r !pbpaste
Bei den meisten Linux- Distributionen können Sie Folgendes ersetzen:
pbcopy
oben mitxclip -i -sel c
oderxsel -i -b
pbpaste
usingxclip -o -sel -c
oderxsel -o -b
- Hinweis: Falls keines dieser Tools (
xsel
undxclip
) in Ihrer Distribution vorinstalliert ist, finden Sie sie wahrscheinlich in den Reposquelle
vim --version
zeigt aber-clipboard
vnoremap <C-c> :w !pbcopy<CR><CR> noremap <C-v> :r !pbpaste<CR><CR>
Um diese Zuordnung zu verwenden, markieren Sie beim Kopieren Text im visuellen Modus und drücken Sie Strg-C zum Kopieren. Um aus der System-Zwischenablage einzufügen, drücken Sie Strg-v.vnoremap <C-C> :w !xclip -i -sel c<CR><CR>
In Ihrer vimrc-Datei können Sie festlegen, dass die Systemzwischenablage automatisch zum Kopieren und Einfügen verwendet wird.
Unter Windows-Set:
Unter Linux (vim 7.3.74+):
HINWEIS: Möglicherweise müssen Sie eine aktuelle Version von Vim verwenden, damit diese funktionieren.
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
quelle
+xterm_clipboard
Funktion fehlt (sichtbar beim Ausführenvim --version
). Dies war bei mir der Fall (mit Kubuntu 12.10). Ich musste dasvim-gui-common
Paket installieren , um die richtige Funktionalität zu erhalten.set clipboard=unnamed
funktioniert unter Mac OS 10.11.6 (El Capitan) mit vim 7.4set mouse=v
undset clipboard=unnamed
set clipboard=unnamed
arbeitet unter MacOS CatalinaVerwenden Sie das Register,
"+
um in die Zwischenablage des Systems zu kopieren (dh"+y
anstelle vony
).Ebenso können Sie aus einfügen
"+
, um Text aus der System-Zwischenablage abzurufen (dh"+p
anstelle vonp
).quelle
+
/*
Unterschied istSELECTION
vsPRIMARY
"+yy
(Zeile in Zwischenablage"+yy
kopieren ) und (Zeile in Auswahl kopieren);"+p
(Aus Zwischenablage einfügen) und"*p
(Aus Auswahl einfügen)."
ist die Auswahl eines Registers, das standardmäßig das interne Register von vim ist (die Artyy
und Weise undp
würde funktionieren, ohne auf irgendeine Art von Register zu verweisen ). PS: Ich frage mich, ob es ein Zeichen für Vims eigenes internes Register gibt,"&yy
dasyy
standardmäßig verwendet wird.@Jacob Dalton hat dies in einem Kommentar erwähnt, aber niemand scheint in einer Antwort erwähnt zu haben, dass vim mit Unterstützung für die Zwischenablage kompiliert werden muss, damit die hier genannten Vorschläge funktionieren. Meins war unter Mac OS X standardmäßig nicht so konfiguriert und ich musste vim neu erstellen. Verwenden Sie diesen Befehl, um herauszufinden, ob Sie ihn haben oder nicht
vim --version | grep 'clipboard'
.+clipboard
bedeutet, dass Sie gut sind und die Vorschläge hier für Sie funktionieren, während-clipboard
Sie vim neu kompilieren und neu erstellen müssen.quelle
brew install vim
. Unter Ubuntu können Sie verwendensudo apt-get install vim-gnome
. Auf anderen (Nicht-GNOME) Linux-Distributionen können Sie liebervim-gtk
oder installierenvim-athena
.vim
gvim
brew install vim
ichset clipboard=unnamed
.vimrc hinzugefügt habe. Führen Siesource ~/.vimrc
in der Befehlszeile. In .bash_profile habe ich hinzugefügt undalias vim="/usr/local/bin/vim"
dann ausgeführtsource ~/.bash_profile
. Jetzt in vim nur verwendeny
undp
kopieren / einfügenFassen Sie zusammen und machen Sie es Neulingen leichter,
Um die aktuelle Zeile zu kopieren, geben Sie im Befehlsmodus Folgendes ein:
Um die gesamte Datei / den gesamten Puffer zu kopieren, gehen Sie im Befehlsmodus zuerst zum Anfang über
gg
und geben Sie dann einWie bereits erwähnt, erfordert dies "
+clipboard
out of"vim --version
, was auf die Verfügbarkeit der Unterstützung für die Zwischenablage hinweist,-clipboard
"no".quelle
"*5yy
sagt5 lines yanked
aber nichts in der Zwischenablage? os / x.nnoremap <leader>c "*
in.vimrc
funktioniert ganz gut als eine Art "Kopie", gefolgt von einer Bewegung, um das Textobjekt zu greifen, das Sie in Ihre Betriebssystem-Zwischenablage kopieren möchten.vim-gtk
drehen-clipboard
in+clipboard
, als"+yy
funktioniert.Wenn Sie vim in MAC OSX verwenden, wird es leider mit einer älteren Version geliefert und entspricht nicht den Optionen für die Zwischenablage. Glücklicherweise kann Homebrew dieses Problem leicht lösen.
installiere vim:
brew install vim
Installieren Sie die Anleitung von vim:
brew install macvim
Starten Sie das Terminal neu, damit es wirksam wird.
Fügen Sie die folgende Zeile an ~ / .vimrc an
set clipboard=unnamed
Jetzt können Sie die Zeile in vim mit kopieren
yy
und systemweit einfügen.Aktualisierte Methode :
Ich war jahrelang nie zufrieden mit der Methode der eingestellten Zwischenablage. Der größte Nachteil ist, dass Ihr Verlauf in der Zwischenablage durcheinander gebracht wird, selbst wenn Sie ihn
x
zum Löschen verwenden. Hier ist eine bessere und elegantere Lösung.Kopieren Sie den Text [Bereich] von vim in die Zwischenablage des Systems. (Hinweis: Verwendung
v
oderV
den Bereich zuerst wählen, und geben Sie dann den Doppelpunkt:
den Ex - Befehl zu aktivieren)::[line-range]yank +
zB
:5,10y *
(Kopieren / yank Zeilen 5-10 in das Zwischenablage -*
Register)Fügen Sie den Inhalt aus der System-Zwischenablage in einer neuen Zeile in vim ein:
:put +
Hinweis:
brew info vim
werden andere Optionen für die Installation von vim sehen können. Derzeit hat es keine anderen Optionen.quelle
--with-override-system-vim
sollte sein--with-override-system-vi
Für Ubuntu - Juli 2018
Verwenden Sie das Register "+", um in die Zwischenablage des Systems zu kopieren (dh "+ y anstelle von y ).
Ebenso können Sie aus "+" einfügen , um Text aus der System-Zwischenablage abzurufen (dh "+ p anstelle von p ).
Sie müssen auch sicherstellen, dass vim mit Unterstützung für die Zwischenablage kompiliert wird. Versuchen:
und wenn es -xterm_clipboard (ein Minus - Präfix) , dann haben Sie nicht haben Unterstützung.
Hier finden Sie einige Anweisungen zum Austauschen mit einer funktionierenden Version von vim, die die Zwischenablage unterstützt.
Überprüfen Sie erneut mit
vim --version | grep .xterm_clipboard -o
und Sie können bestätigen, dass die Zwischenablage jetzt verfügbar ist (z. B. + xterm_clipboard ).Viel Glück.
quelle
set clipboard=unnamedplus
meine.vimrc
Akte eintragen, damit der Ruck funktioniert. Ich benutze Ubuntu 18.04.Ich konnte nicht in das System meiner Zwischenablage kopieren, da ich dies in meiner ~ / .vimrc-Datei hatte:
Wenn Sie diese Zeile jedoch als Nächstes hinzufügen, können Sie einfach Ctrl+c alles, was Sie ausgewählt haben, in Ihre Zwischenablage aufnehmen.
Originaldiskussion und weitere Details: Kopieren Sie Text mit gesetzter Maus = a aus vim
quelle
Die Lösung für mich bestand darin, zusätzliches vim zu installieren, das die Option Zwischenablage enthält:
quelle
"+y
Vorschlag funktionierte nur mitvim-gnome
. Verwenden von Linux Mint 18.2.Wenn Sie GVim verwenden, können Sie dies auch
set guioptions+=a
. Dadurch wird das automatische Kopieren von Text in die Zwischenablage ausgelöst, den Sie im visuellen Modus markieren.Nachteil: Beachten Sie, dass erweiterte Zwischenablage-Manager (mit Verlauf) in diesem Fall Ihren gesamten Auswahlverlauf abrufen.
quelle
Die Antworten finden Sie hier Arch Wiki
Für Linux: Zunächst müssen Sie die Zwischenablage in Ihrer vim-Version durch Installation aktivieren
gvim
.Als nächstes müssen Sie diese Zeile in Ihre
.vimrc
Datei einfügen.set clipboard=unnamedplus
quelle
Wenn Ihr vim zufällig ohne
+xterm_clipboard
Option kompiliert wird, wie es standardmäßig in Debian und Ubuntu der Fall ist, können Sie die Auswahl oder den gesamten Puffer an ein externes Programm weiterleiten, das die Desktop-Zwischenablage verwaltet. Fürxclip
(die Sie möglicherweise zuvor installieren müssen) lautet der Befehl:w !xclip -sel clip
quelle
-xterm_clipboard
in den Flaggen sehen, wenn ichvim --version
.In vim nur unter Ubuntu Terminal,
Drücken Sie
shift + drag mouse
, um einen Text in vim und dannctrl + shift + c
auf dem Terminal auszuwählendann
ctrl + v
auf anderen Editorquelle
Wenn Sie xclip haben, haben Sie folgende Möglichkeiten, Text in die Zwischenablage zu kopieren:
y
Befehl in Vanilla Vim):call system("xclip -selection clipboard", @")
:call system()
führt einen Terminalbefehl aus. Es sind zwei Argumente erforderlich, das erste der Befehl und das zweite, was an diesen Befehl weitergeleitet werden soll. Zum Beispiel:echom system("head -1", "Hello\nWorld")
gibt Hallo zurück (mit etwas Polsterung). echom gibt die Ausgabe eines Befehls zurück, call nicht.xclip -selection clipboard
Kopiert einfach Text in die System-Zwischenablage im Gegensatz zur Standard-X-Zwischenablage (Zugriff über die mittlere Moue-Schaltfläche).@"
Gibt den zuletzt gezogenen Text zurück. "ist das Standardregister, aber Sie können jedes Register verwenden. Geben Sie Folgendes ein, um den Inhalt aller Register anzuzeigen:registers
.quelle
:call system("pbcopy",@")
. Man kann diesen Befehl an einen Schlüssel binden.Vielleicht findet es jemand nützlich. Ich wollte unabhängig von der X-Zwischenablage bleiben und trotzdem Text zwischen zwei laufenden Vims kopieren und einfügen können. Dieser kleine Code speichert den ausgewählten Text in der Datei temp.txt zum Kopieren. Geben Sie den folgenden Code in Ihre .vimrc ein. Verwenden Sie STRG-c STRG-v, um die Aufgabe zu erledigen.
vnoremap: w! cp / dev / null ~ / temp.txt && cat> ~ / temp.txt
noremap: r! cat ~ / temp.txt
quelle
set clipboard=unnamed
Ihrevimrc
.Visual
Modus kopieren möchten (drücken Sie v, um einzugeben).Normal
Modus (Escape [esc] drücken), zum Kopieren y drücken.Normal
Modus p / P.quelle
Ich bin ein Vim-Neuling, aber um den gesamten Text in die Zwischenablage des Systems zu kopieren (z. B. wenn Sie ihn in ein Textverarbeitungsprogramm oder einen anderen Texteditor wie gedit, mousepad usw. einfügen möchten), im normalen Modus:
ggVGy
oder einfacher:
:% y
Wie vorgeschlagen habe ich auch vim-gtk installiert und gesetzt
set clipboard = unnamedplus
in meiner .vimrc
und alles funktioniert gut
Wenn Sie nur einen Teil des Textes kopieren möchten, verwenden Sie den visuellen Modus (v) , wählen Sie den zu kopierenden Text aus und drücken Sie y .
Schließlich schlage ich ein Zwischenablageprogramm wie Clipman (mein Favorit), Clipit, Parcellite oder ähnliches vor.
(Ich verwende vim 8.0 in Debian Stretch Xfce)
Vergib mir mein Englisch! :-)
quelle
Diese Antwort ist spezifisch für MAC-Benutzer.
Für das mit MAC verfügbare Standard-VIM ist die Option für die Zwischenablage nicht aktiviert. Sie benötigen diese Option, um auf die Zwischenablage des Systems zuzugreifen.
Verwenden Sie den folgenden Befehl, um zu überprüfen, ob Ihr vim diese Option aktiviert hat
Im Ergebnis sollten Sie haben
+clipboard
. Wenn dies der-clipboard
Fall ist , hat Ihr VIM NICHT die Möglichkeit, auf die Systemzwischenablage zuzugreifen.Sie müssen Ihr VIM mit der gewünschten Option erstellen und installieren. Es folgen die Befehle.
Oben wird das neueste VIM mit
+clipboard
aktivierter Option installiert .Jetzt müssen Sie die Systemzwischenablage einstellen. Fügen Sie die folgende Zeile an
~/.vimrc
Jetzt können Sie Text in die Zwischenablage des Systems ziehen. In den folgenden Schritten wird erklärt, wie Sie ziehen.
press v
werden Sie in den VISUAL-Modus versetzt.Press y
Dadurch wird der ausgewählte Text in die Zwischenablage kopiert.CMD + v
fügen Sie sie ein.Ich benutze MACBook Pro mit macOS Mojave und das oben genannte funktioniert darin.
quelle
Ich hatte ein Problem, weil mein vim die Zwischenablage nicht unterstützte :
Ich habe vim-gnome installiert (das die Zwischenablage unterstützt) und dann erneut überprüft:
Jetzt kann ich mit "+ y" und "+ p" kopieren und einfügen.
quelle
Ich habe bis jetzt monatelang damit auf MacOsX mit Tastaturkürzeln zu kämpfen. Ich weiß, dass es bei der Frage nicht um die Verwendung von Tastaturshorts geht. Dies könnte jedoch jemandem mit der gleichen Sorge helfen.
Ich fand das, wenn Sie deaktivieren:
Über das Terminal-Menü können Sie mit in die Zwischenablage kopieren
nochmal.
quelle
Ich habe eine einfache Zeile in meine .vimrc geschrieben, damit die Kopie funktioniert. Hoffe das hilft jemandem. Mein vim wird leider nicht mit Unterstützung für die Zwischenablage installiert, sodass keiner dieser Vorschläge für mich funktioniert hat. Fügen Sie diese Zeile grundsätzlich in Ihre .vimrc ein:
Wenn Sie Details dazu lesen möchten, können Sie dies in meinem Blog nachlesen
quelle
Bei einigen internationalen Tastaturen müssen Sie möglicherweise "+ drücken Space, um eine zu erhalten
"
.In diesem Fall müssten Sie also "Space+yoder drücken"Space*y
quelle
Wenn Sie keine grafische Oberfläche für vim verwenden möchten und sich lieber an den Terminalemulator halten möchten, gibt es möglicherweise einen viel einfacheren Ansatz für dieses Problem. Schauen Sie sich zunächst die Dokumentation des von Ihnen verwendeten Terminals an, anstatt Yank oder ähnliches zu verwenden. Ich habe mit dem gleichen Problem zu kämpfen (versucht, + Zwischenablage und xclip usw. zu verwenden), und am Ende stellte sich heraus, dass es in meinem Terminalemulator ausreicht, nur die Umschalttaste zu drücken und den zu kopierenden Text auszuwählen. Das ist es. Ganz einfach und ohne dass Sie sich mit der Konfiguration herumschlagen müssen. (Ich benutze übrigens urxvt).
quelle
Für OSX müssen Sie, wie in den oben genannten 10342-Antworten klargestellt, sicherstellen, dass vim die Zwischenablagefunktion unterstützt. Die mit OSX gelieferte Funktion unterstützt die Zwischenablage NICHT und wenn Sie ausgeführt werden
brew install vim
, funktioniert sie.Wenn Sie vi ausführen, werden Sie weiterhin die vorinstallierte OSX-Version ausführen, nicht die, die Sie von Brew installiert haben.
Um dies zu überwinden, habe ich meinen vim-Befehl einfach auf die Brew-Version ausgerichtet, nicht auf die OSX-Standardversion:
und jetzt bin ich golden
quelle
Meine Lösung bestand darin, die folgende Zeile in .vimrc zu setzen:
Das Skript kopiert die ausgewählte Zeile (im visuellen Modus) oder den Dateiinhalt (falls keine ausgewählt ist) mit Strg + y in die Zwischenablage. Ich benutze Manjaro Linux, wenn das wichtig ist.
quelle
Ich bin auf Mac OSX (10.15.3) und neu in Vim. Ich fand das so frustrierend und alle Antworten hier zu kompliziert und / oder galten nicht für meine Situation. Ich habe das auf zwei Arten zum Laufen gebracht:
Schlüsselzuordnung mit pbcopy : Funktioniert mit der alten Version von vim, die mit dem Mac geliefert wird .
Installieren Sie eine neuere Version von vim, damit ich auf die Lösung zugreifen kann, die in anderen Antworten am meisten empfohlen wird:
quelle
selecting
mit Hilfe dermouse
undright-click copy
arbeitete in meinem Fall.Ich wollte nicht, dass die Zeilennummern enthalten sind, also habe ich es
:set nonumber
vorher getancopying
.quelle
Nichts oben funktionierte für mich auf meinem Windows-Laptop.
Ctrl+ Cwar gut zum Kopieren .. aber ich musste Shift+ Inserteinfügen!
(Ein guter Grund, immer einen Laptop zu kaufen, auf den Insertimmer zugegriffen werden kann, ohne eine Sekundärtaste zu drücken)
quelle
Shift+ Ctrl+ , C Wenn Sie im grafischen Modus von Linux sind, aber zuerst müssen Sie auswählen , was Sie kopieren müssen.
quelle