So kopieren Sie eine Auswahl in die OS X-Zwischenablage


225

Ich habe einen Bereich in Vim ausgewählt. Wie kann ich es in die OS X-Zwischenablage kopieren?

(Die OS X-Zwischenablage kann über eine Pipe an geschrieben werden. /usr/bin/pbcopy)


4
dann einfach visuell auswählen "+y.
zx1986

2
Die Vim , dass Schiffe mit OSX nicht haben +clipboardoder +xterm-clipboard. Sie können dies mit überprüfen vim --version | grep clipboard. Es ist möglich, dies mit zu lösen brew install vim --with-client-server.
LondonRob

1
Oder verwenden Sie MacVim, das eine Befehlszeilenversion bietet, die über Ihren Link in Ihr Pfad eingefügt ~/binund dann ~/binvor dem normalen vom System installierten vim und den Synonymen in Ihren Pfad eingefügt werden kann.
der Blechmann

Aufbauend auf dem, was @ zx1986 geschrieben hat, habe ich drei Dinge getan: 1) Folgendes zu meinem ~ / .bashrc hinzugefügt, um vi / vim in den Terminalmodus von MacVim zu aliasen: alias vi='mvim -v'2) Folgendes zu ~ / .vimrc hinzugefügt, das Strg + abbildet c (nicht Cmd + c): vnoremap <C-c> "+y3) Konfigurierter Tastatur-Maestro zum ^cEingeben der Tastenfolge (Strg + C) beim Ausführen im Terminal (in meinem Fall iTerm2) Dies ermöglicht die Verwendung von Cmd + c zum Kopieren von Text in die OSX-Zwischenablage damit es in andere OSX-Anwendungen eingefügt werden kann.
Neil Griffin

Antworten:


79

Je nachdem, welche Version von Vim ich verwende, kann ich über das +Register auf die Zwischenablage zugreifen.

" Mac OS X-Zwischenablage freigeben " hat möglicherweise einige Ideen, die auch für Sie funktionieren.


5
Für Leute mit VIM, die ohne + Zwischenablage kompiliert wurden, ist der obige Link eine ausgezeichnete Ressource, um
Problemumgehungen

SEHR WICHTIGES DETAIL !!! Wenn Sie Vim-Version 7.3 haben, funktioniert dies möglicherweise nicht für Sie, aber wenn Sie Vim-Version 7.4 haben, ist dies der Fall (und manchmal müssen Sie nicht einmal das ganze "+ y" ausführen). Und Sie überprüfen dies einfach Schreiben Sie> vim in das Terminal und dann ist die Versionsnummer, wenn Sie es starten.
Zeth

Diese Antwort ist die gleiche wie diese stackoverflow.com/a/680271/2652524
Gujarat Santana

1
Das "+Register existiert nur für X11 (es sei denn, Sie erstellen vim mit + X11-Unterstützung, wodurch ein X11-Server XQuartz in OS X installiert wird), während OS X X11 nicht als Windows-System verwendet.
nn0p

Was tun, wenn beide - vimund macvim+ Zwischenablage haben. Und clipboard=unnamedhinzugefügt ~/.vimrc? Sieht nach echtem Schmerz aus, hat alle Problemumgehungen ausprobiert und muss derzeit Spacemacs verwenden, wenn ich weiß, dass ich die globale Zwischenablage verwenden muss :)
Nikolay Fominyh

240

Fügen Sie für MacVim und Windows Gvim einfach Folgendes hinzu ~/.vimrc:

set clipboard=unnamed

Nun werden alle Operationen wie yy, Dund die PArbeit mit der Zwischenablage. Sie müssen ihnen kein "*oder voranstellen "+.


2
Ich habe den ganzen Morgen damit verbracht, herauszufinden, wie man y-, d- und P-Befehle von ⌘-C und ⌘-V trennt, die MacVim für Sie aktiviert, und bin schließlich darauf gestoßen. Sicher genug, ich hatte dies zu meinem Vimrc hinzugefügt, als ich ein Vim-Jugendlicher war, und es hat mich seitdem frustriert.
Jonathan Dumaine

2
Für MacVim-Neulinge kann es vom Terminal aus mit dem -vFlag ( mvim -v) verwendet werden. Ich habe meine auf vim und mvim ausgerichtet.
pk-nb

3
Wie von @VincentG in seinem obigen Kommentar erwähnt, funktioniert dies zwar mit terminalbasierten Versionen von Vim, aber diejenigen, die tmux innerhalb des Terminals verwenden, müssen eine der hier beschriebenen Lösungen befolgen
user456584

3
Dies sollte die akzeptierte Antwort sein - solange :echo has("clipboard")gesagt 1, was für MacVim der Fall ist, und ich habe einen viAlias, der mvim -vstattdessen ausgeführt wird
jdsumsion

1
@ Joseph, wenn es :versionIhnen zeigt, -clipboarddann unterstützt der Build von Vim die Zwischenablage-Funktion nicht. Ich habe über MacVim gesprochen, eine GUI-App.
George V. Reilly

136

Wenn die Zwischenablage aktiviert ist, können Sie einen ausgewählten Bereich durch Drücken in die Zwischenablage kopieren "*y

Um zu sehen, ob es aktiviert ist, führen Sie es aus vim --versionund suchen Sie nach +clipboardoder -clipboard. Zum Beispiel ist es auf meiner 10.5.6-Box nicht standardmäßig aktiviert:

% welche vim
/ usr / bin / vim
% vim --version
VIM - Vi IMproved 7.2 (9. August 2008, zusammengestellt am 11. November 2008 um 17:20:43 Uhr)
Enthaltene Patches: 1-22
Zusammengestellt von _www@b77.apple.com
Normale Version ohne GUI.  Funktionen enthalten (+) oder nicht (-): 
... 
-clientserver -clipboard + cmdline_compl + cmdline_hist + cmdline_info + Kommentare
 ...

Wenn es mit kompiliert worden wäre +clipboard, könnte ich das "*Register verwenden, um auf die Zwischenablage des Systems zuzugreifen.

Ich habe die 7.2-Quelle heruntergeladen und kompiliert (einfach wie tar xjf vim-7.2.tar.bz && cd vim72 && ./configure && make && sudo make install), und die Zwischenablage wurde aktiviert:

% welche vim
/ usr / local / bin / vim
% vim --version
VIM - Vi IMproved 7.2 (9. August 2008, zusammengestellt am 24. März 2009 um 17:31:52 Uhr)
Zusammengestellt von rampion@Myrrhy.local
Normale Version mit GTK2 GUI.  Funktionen enthalten (+) oder nicht (-): 
... 
+ clientserver + Zwischenablage + cmdline_compl + cmdline_hist + cmdline_info + Kommentare
 ...

Selbst nach dem Kompilieren konnte ich jedoch nicht in die Zwischenablage kopieren, wenn ich vim in Terminal.app ausführte, sondern nur in X11.app.


3
Ich habe die neueste Version mit + Zwischenablage kompiliert und jetzt arbeitet die native Zwischenablage damit als * Register. Wenn Sie in Ihrer .vimrc-Datei "set clipboard = unnamed" festlegen, wird die System-Zwischenablage zur typischen Zwischenablage. Ich habe diese Homebrew-Formel tatsächlich mit github.com/adamv/homebrew/blob/duplicates/Library/Formula/… erstellt und kompiliert.
Rado

Hmm, ich bin mir nicht sicher, warum Vim nicht in meinem Homebrew angezeigt wurde, aber ich habe es nach / usr / local / Library / Formula kopiert, Brew Install Vim ausgeführt und es ist mit "ld: library not found for -lruby-static" fehlgeschlagen ". Ich benutze RVM und war am 1.8.7. Als ich zu 1.9.2 wechselte, war der Fehler "ld: Bibliothek für -lruby.1.9.1 nicht gefunden". Die Lösung bestand darin, das System Ruby zu verwenden, indem zuerst das rvm use-System ausgeführt wurde.
Justsee

9
Ein bisschen einfacher als die Suche nach dem Wort "Zwischenablage" in einer normalerweise langen Liste von Funktionen: do :echo has("clipboard"). Wenn 0 angezeigt wird, wird es nicht kompiliert. Wenn 1 angezeigt wird, ist dies der Fall.
Ravron

3
Sie können vim auch mit der Zwischenablage mit Homebrew kompilieren lassen: brew install vim
Anton Koval '28.

4
In acht nehmen! Ich hatte eine +clipboardVersion, aber installiert, --with-client-serverdie es ermöglicht +x11, und der Versuch, in Terminal Vim unter MacOS auf x11 zu kopieren / einzufügen, funktionierte nicht :) Ich musste ohne neu installieren +clientserver.
Jacwah

96

Sie können Text visuell auswählen und eingeben :w !pbcopy<CR>

Oder Sie können die folgenden Tastenzuordnungen in Ihre ~/.vimrcDatei aufnehmen. Sie schneiden / kopieren Text im visuellen Modus in die Zwischenablage des Betriebssystems.

vmap <C-x> :!pbcopy<CR>  
vmap <C-c> :w !pbcopy<CR><CR> 

Quelle: http://drydevelopment.com/blog/vim-pbcopy-on-os-x


6
Sie können auch Text aus der Befehlszeile auswählen, z. B.: 1,10w! Pbcopy, um die Zeilen 1-10 in die Zwischenablage zu kopieren. Das w ist wichtig, zusammen mit dem Leerzeichen danach, um den Originaltext an Ort und Stelle zu halten. Der obige Quelllink
sdjuan

Ich folgte diese Arbeit in tmux zu bekommen: superuser.com/questions/231130/...
Wex

@Wex Link wurde behoben
SnoringFrog

2
Beachten Sie, dass dies nur für die Auswahl ganzer Zeilen zu funktionieren scheint. Es scheint nicht zu funktionieren, wenn Sie nur einen Teil einer Zeile auswählen möchten. stackoverflow.com/questions/16196826/…
Kevin Wheeler

1
@ Kevin Wheeler: Sie können es mit dem folgenden Befehl versuchen, der das nicht zeilenweise Kopieren von Noremap <silent> <leader> y lösen kann: <CR>: Lassen Sie @ a = @ "\ | execute" normal! vgvy "\ | let res = system (" pbcopy ", @") \ | let @ "= @ a <CR>
dragonxlwang

38

Ein Anführungszeichen ( "*) in doppelte Anführungszeichen, bevor ein Befehl zum Ziehen die Ergebnisse in den Kopierpuffer zieht. Das funktioniert auch für Windows und Linux.


11
scheint nur einen
Glockencharakter

3
In X11 ist Vims "* ist PRIMARY", + ist CLIPBOARD und SECONDARY erhält kein benanntes Register. (Nicht, dass jemand es benutzt ...)
Ephemient

Perfekt. Hilft wirklich, besonders bei der Blockauswahl (Strg-V).
Sonique

Da es sich bei der Frage speziell um Mac OS X handelte, ist es nicht erforderlich, hinzuzufügen, dass es "auch" für Mac funktioniert.
Paul Tomblin

@ PaulTomblin okay, fair genug :-)
LehrlingDev

26

Unter MacOS 10.8 wird vim mit kompiliert, -clipboardsodass "*ySie es neu kompilieren müssen. Zum Glück brew install vimwürde eine neue Version leicht für Sie kompilieren und es wird sein +clipboard.


1
Etwas zu beachten - ziemlich bizarr, brew install vimmit Updates viund nicht vim . Nach der Installation von vim mit Homebrew müssen Sie die Dinge möglicherweise anders aliasen.
Shridharama

18

Wählen Sie den Text visuell aus und geben Sie Folgendes ein:

ggVG
!tee >(pbcopy)

Was ich schöner finde als:

ggVG
:w !pbcopy

Da keine Eingabeaufforderung angezeigt wird: "Drücken Sie die EINGABETASTE oder geben Sie den Befehl ein, um fortzufahren."


Kopiert noch die ganze Zeile
Karl Pokus


11

Wenn Sie MacPorts verwenden, können Sie Ihr VIM so aktualisieren, dass es Unterstützung für die Zwischenablage bietet:

port install vim +x +x11

Jetzt verwenden Sie das "+Register, um Ihren Text direkt in Ihre Mac-Zwischenablage zu ziehen. Klappt wunderbar.


1
Das ist genau das, was ich brauchte. Man muss nur sicherstellen, dass $ PATH korrekt ist und Sie / opt / local / bin / vim erhalten, nicht das Apple vim.
Gareth

8

Wenn Sie unter MacOS X arbeiten:

$ brew install vim
$ vim --version
VIM - Vi IMproved 7.4 [...]

Fügen Sie dann zu Ihrer .vimrc hinzu:

set clipboard=unnamed

Jetzt müssen Sie nur in sein vim und tun :%y, haben alle Inhalte in die Zwischenablage kopiert.


Inhalt wird gerissen, aber ich kann nicht außerhalb von VIM einfügen.
Prayagupd

5

Verwenden Sie Homebrews vim:brew install vim

Mac (Stand 10.10.3 Yosemite) kommt mit einem System vim vorinstalliert , die sich nicht die haben clipboardFlag aktiviert.

Sie können vim entweder selbst kompilieren und dieses Flag aktivieren oder einfach Homebrews vim verwenden, das ordnungsgemäß eingerichtet ist.

Um dies selbst zu sehen, sehen Sie sich das Lagersystem mit an /usr/bin/vim --version

Sie werden so etwas sehen wie:

$ /usr/bin/vim --version

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov  5 2014 21:00:28)
Compiled by root@apple.com
Normal version without GUI.  Features included (+) or not (-):
... -clientserver -clipboard +cmdline_compl ...

Beachten Sie das -clipboard

Mit Homebrews Vim bekommst du stattdessen

$ /usr/local/bin/vim --version

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled May 10 2015 14:04:42)
MacOS X (unix) version
Included patches: 1-712
Compiled by Homebrew
Huge version without GUI.  Features included (+) or not (-):
... +clipboard ...

Beachten Sie das +clipboard


1
Wie mache ich dann die Kopie?
Frozen Flame

mit der Version von vim Gebräu war ich in der Lage zu tun , was ich wollte: hervorgehoben ich die Zeilen mit Vdann :w !pbcopyund es funktionierte
davidpm4

5

Wenn Ihr Vim nicht mit Zwischenablagen kompiliert ist, Sie ausgewählten Text anstelle ganzer Zeilen kopieren möchten, MacVim oder eine andere GUI nicht installieren möchten, besteht die einfachste Lösung darin, diese Zeile zu Ihrer .vimrc hinzuzufügen:

map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>

Um es zu verwenden, wählen Sie einfach visuell den Text aus, den Sie kopieren möchten, und dann Control- C. Wenn Sie eine vollständige Erklärung dieser Zeile wünschen, lesen Sie " Kopieren in die Zwischenablage auf vim ".


Aber es gibt mir auch 2 schwarze Linien, nachdem der Text kopiert wurde
Nic Wanavit

4

Ich benutzte:

map <C-x> :!pbcopy<CR>
vmap <C-c> :w !pbcopy<CR><CR>

Es hat wirklich gut funktioniert.


3

Sie können MacVim verwenden, wenn Sie auf einem Mac arbeiten, um mit den Standard-Betriebssystemtasten einfach auf die Zwischenablage zuzugreifen.

Es ist auch vollständig abwärtskompatibel mit normalem Vim, sodass ich nicht einmal ein separates haben muss .vimrc.


Ich verwende MacVim und verknüpfe dann die Befehlszeilen-Vim-Synonyme mit my ~/bin, um die Standardeinstellungen zu überschreiben.
der Blechmann

2

Befehl-C? Dies funktioniert zumindest für das in Terminal.app gestartete vim für mit der Maus ausgewählten Text.


6
Gute naive Antwort, aber unterbricht die Ausgabe, wenn Sie vertikal geteilte Unterfenster in vim verwenden (was eigentlich der Fall ist, an den ich
denke

3
Sie haben Recht, ich habe nicht an diese Fälle gedacht. Ich lasse meine Antwort nur, um zu verhindern, dass andere ähnliche, nicht hilfreiche Antworten geben.
Mouviciel


2

Mein Hauptproblem war die Standard-OSX-Version von Vim. Die Installation über Homebrew wurde +clipboarddem Build hinzugefügt .

Sie können überprüfen mit:

vim --version

um zu sehen, ob es sagt -clipboardoder +clipboard.


2

Wenn Sie die +clipboardOption für Ihre Vim-Installation haben (Sie können dies überprüfen :version) und sich im visuellen Modus befinden, können Sie dies tun. "+yDadurch wird die Auswahl in den Puffer gezogen +, der die Zwischenablage darstellt.

Ich habe die folgenden Karten zu meinem vimrc hinzugefügt und es funktioniert gut.

vmap <leader>y "+y : Damit kann ich tun leader keymit folgte yim visuellen Modus zu kopieren in die Zwischenablage.

nmap <leader>p "+p : Damit kann ich leader keyfolgen , indem paus der Zwischenablage auf Normalmodus einzufügen.

PD: Unter Ubuntu musste ich vim-gtk installieren, um die +clipboardOption zu erhalten.


0

Wenn auf einem Mac etwas anderes zu funktionieren scheint, wählen Sie es mit der Maus aus und klicken Sie mit der rechten Maustaste auf Kopieren. uff


0

Ich bin derzeit unter OS X 10.9 und meine Bemühungen, vim mit + xterm_clipboard zu kompilieren, haben mir nichts gebracht. Daher besteht meine aktuelle Lösung darin, MacVim im Terminalmodus mit der Option set clipboard=unnamedin meiner ~ / .vimrc-Datei zu verwenden. Funktioniert perfekt für mich.


0

Was hat bei mir in meinem funktioniert .vimrc

set clipboard=unnamed
if has("unnamedplus") " X11 support
    set clipboard+=unnamedplus
endif

0

Für Mac - Halten Sie die optionTaste gedrückt, gefolgt von der ctrl VAuswahl des Textes.


0

Cmd c verschieben - Kopiermodus einstellen Maus ziehen, Text auswählen, cmd c zum Kopieren des ausgewählten Textes Cmd v zum Einfügen


-1

Für Ubuntu-Benutzer ist das Paket, das Sie zur Verwendung der Zwischenablage abrufen möchten, vim-voll. Die anderen Pakete (vim-tiny, vim) enthalten keine Zwischenablagefunktion.


vim-full ist kein Ubuntu-Paketname mehr. Das Standard-VIM-Paket (7.3.154) verfügt über eine minimale Anzahl von Funktionen, einschließlich -clipboard. Wenn Sie vim-gtk oder vim-nox installieren, erhalten Sie eine Version in der Zwischenablage.
Spazm

-1

Das Kopieren in die Zwischenablage mit dem Register '+' oder '*' funktioniert nicht?

Grund: Ihre spezielle Version von vim wurde ohne Unterstützung der Zwischenablage kompiliert. Geben Sie vim - Version auf der Konsole ein und Sie werden sehen -xterm_clipboard . Die Installation von vim mit GUI-Paketen löst dieses Problem. Unter Ubuntu können Sie dies tun, indem Sie auf der Shell Folgendes eingeben:

sudo apt-get installiere vim-gui-common

Führen Sie jetzt erneut vim --version auf der Konsole aus. Höchstwahrscheinlich würden Sie + xterm_clipboard sehen jetzt !!

Jetzt können Sie alles mit register + in die Zwischenablage kopieren (wie "+ yy, um die aktuelle Zeile in die Zwischenablage zu kopieren).


-1

Ich treffe das gleiche Problem, nachdem die Installation macvimimmer noch nicht funktioniert hat, habe ich endlich einen Weg gefunden, es zu lösen:

Versuchen Sie zuerst, alle vim zu deinstallieren.

brew uninstall macvim

brew uninstall --force vim

und installieren Sie macvim neu

brew install macvim --with-override-system-vim

Dann können Sie verwenden "*yoder "+ymüssen nichtset clipboard=unnamed


-2

Command-c funktioniert für mich sowohl in MacVim als auch im Terminal.


Herkömmliches Kopieren und Einfügen funktioniert nicht mit Vim-Puffern und kann Ihre Formatierung völlig durcheinander bringen. Wenn Sie beispielsweise 15 Zeilen verschachtelter Objekte mit Cmd + C kopieren und dann mit Cmd + V einfügen, verliert dies das Verständnis für die Verschachtelung. Dies hängt sehr wahrscheinlich von Ihren Einstellungen in Ihrer .vimrc ab und kann sehr speziell sein
netpoetica
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.