Gibt es eine Möglichkeit, einen Textblock in die Systemzwischenablage zu kopieren, damit ich ihn in ein anderes Programm einfügen kann?
cpip
, cpi{
.
Gibt es eine Möglichkeit, einen Textblock in die Systemzwischenablage zu kopieren, damit ich ihn in ein anderes Programm einfügen kann?
cpip
, cpi{
.
Antworten:
Für X11- basierte Systeme (dh Linux und die meisten anderen UNIX- ähnlichen Systeme) gibt es zwei voneinander unabhängige Zwischenablagen:
^C
und eingefügt ^V
(es ist wie bei MS Windows).OS X- und Windows- Systeme haben nur eine Zwischenablage.
Für X11-Systeme gibt es auch eine Reihe von Tools, die diese Zwischenablagen für Sie synchronisieren. Wenn sie also identisch zu sein scheinen, kann einer von ihnen ausgeführt werden.
Vim hat zwei spezielle Register, die diesen Zwischenablagen entsprechen:
*
benutzt PRIMARY; mnemonic: S Teer ist S elect (für Copy-on - s wählen)+
benutzt CLIPBOARD; Gedächtnisstütze: STRG PLUS C (für die allgemeine Tastenkombination)Unter Windows und OS X gibt es keinen Unterschied zwischen +
und *
, da diese Systeme nur eine Zwischenablage haben und beide Register auf dasselbe verweisen (es ist egal, welches Sie verwenden).
Sie können diese Register als jedes Register verwenden. Verwenden Sie beispielsweise die PRIMARY-Zwischenablage *
mit den Befehlen y
und p
:
"*yy
"*p
Sie könnten dies vielleicht als bequemere Tastenkombination verwenden:
noremap <Leader>y "*y
noremap <Leader>p "*p
noremap <Leader>Y "+y
noremap <Leader>P "+p
Wenn Sie sich "automatisch" mit der Zwischenablage des Systems verbinden möchten, anstatt ständig manuell darauf zu verweisen, können Sie die clipboard
Variable festlegen :
unnamed
verwenden *
(primär, bei der Auswahl)unnamedplus
verwenden +
(Zwischenablage ^C
)Wenn Sie jetzt nur verwenden, yy
wird anstelle des unbenannten Registers von Vim die Zwischenablage des Systems aufgerufen und p
die Zwischenablage des Systems eingefügt.
Sie können diesen Registern auch wie jedem anderen Register Folgendes zuweisen let
:
:let @+=42
:let @*=42
Die clipboard
Einstellung verfügt über einige weitere Optionen (z. B. Filter ausschließen). Aber das sind die Grundlagen. Siehe :help 'clipboard'
für die ganze Geschichte ;-)
Wenn Sie gVim verwenden, können Sie bei der Verwendung Copy-on-Select-Verhalten erhalten
:set guioptions+=a
.
Dies ist standardmäßig auf X11-Systemen aktiviert (Kopien nach PRIMARY), jedoch nicht unter MS Windows und OSX (wenn Sie einen beliebigen Text auswählen, wird Ihre Zwischenablage überschrieben).
+clipboard
?Für Vim ist das +clipboard
Feature-Flag erforderlich, damit dies funktioniert. Sie können überprüfen, ob Ihr Vim dies hat, indem Sie :echo has('clipboard')
in Vim (wenn die Ausgabe vorhanden ist 0
, ist sie nicht vorhanden, wenn sie vorhanden 1
ist) oder die Ausgabe von vim --version
for überprüfen
+clipboard
.
Die meisten Linux-Distributionen werden standardmäßig mit einem "minimalen" Vim-Build ausgeliefert, den es nicht gibt +clipboard
, den Sie jedoch normalerweise installieren können:
vim-gtk
oder vim-gnome
.vim-X11
und ausführen vimx
statt vim
( mehr Infos ).gvim
(dies wird auch +clipboard
für den normalen Betrieb aktiviert vim
).Sie können auch verwenden xclip
, xcopy
oder xsel
Text in die Zwischenablage zu kopieren; Siehe die folgenden Fragen für Lösungen:
Sie können eine Zwischenablage auch auf Remotecomputern verwenden, wenn Sie die X11-Weiterleitung über SSH aktivieren. Dies ist besonders bei dem obigen Tipp hilfreich, da Sie dann
xclip
auf die Zwischenablage Ihres Desktops zugreifen können. Das Vim auf dem Computer, auf dem Sie gerade shoppen, benötigt diese +clipboard
Funktion weiterhin.
Dies erfordert die ForwardX11Trusted
Einstellung und sollte nur mit vertrauenswürdigen Servern durchgeführt werden , da der Server so fast die vollständige Kontrolle über Ihre X11-Sitzung hat:
$ ssh -XY myhost
Um diese Einstellungen dauerhaft zu machen (sodass Sie sie nicht -XY
jedes Mal hinzufügen müssen ), können Sie in folgenden Schritten Folgendes tun ~/.ssh/config
:
# Do **NOT** set this globally; it gives the server complete control over
# your X11 session.
Host myhost
ForwardX11 yes
ForwardX11Trusted yes
Neovim überarbeitete die Unterstützung für die Zwischenablage. Die eingebaute Schnittstelle wurde mit einem System entfernt und ersetzt werden, die ein externes Dienstprogramm aufrufen , wie beispielsweise xclip
, xsel
oder
pbcopy
/ pbpaste
.
Diese Dienstprogramme sollten automatisch abgerufen und verwendet werden. Unter OS X pbcopy
und pbpaste
sollte standardmäßig verfügbar sein, unter Linux möchten Sie wahrscheinlich installieren xclip
, da dies am weitesten verbreitet ist (es gibt tatsächlich zwei
Versionen xsel
mit inkompatiblen Flags . Das ist wirklich dumm).
Siehe auch :help clipboard
in Neovim.
"<Space>
, um eine zu erhalten "
. In diesem Fall müssten Sie also drücken "<Space>+y
oder "<Space>*y
kopieren.
"
viele benannte Register ausgewählt werden können. "+
ist keine Magie, es ist nur registrieren +
. So zum Beispiel, wenn Sie wollen drei Dinge gleichzeitig kopieren und jeder von ihnen eins nach dem anderen einfügen, können Sie "1y
, "2y
und "3y
später "1p
, "2p
und "3p
. Das ist wirklich mächtig und in fast jedem anderen Editor nicht vorhanden. Eine andere interessante Verwendung ist das Betrachten gespeicherter Makros. Wenn Sie beispielsweise mit aufnehmen qq
, aber feststellen, dass Sie das Problem beheben müssen, können Sie: in einer temporären Zeile das Problem "qp
beheben und "qd
.
Die anderen Antworten beschreiben, wie Sie Text aus Ihrem Puffer in die Zwischenablage des Systems kopieren. Eine weitere häufige Operation ist das Kopieren von Text aus einem anderen Register in die Zwischenablage. Wenn Sie beispielsweise bereits Text in "
das Standardregister gezogen haben, möchten Sie dieses Register möglicherweise in die Zwischenablage laden.
Sie können dies tun mit :let
:
let @+=@"
- kopiert das Standardregister in die Zwischenablagelet @*=@"
- kopiert das Standardregister in die X11-Primärauswahl ("Maus-Zwischenablage")let @+=@a
- aus dem Register a
in die Zwischenablage kopierenBeachten Sie, dass dies für Register im Allgemeinen funktioniert: let @a=@b
kopiert Register b
zu Register a
.
Von http://vim.wikia.com/wiki/Accessing_the_system_clipboard
set clipboard=unnamedplus
Dadurch wird das Standard-Vim-Register in das +
Register geändert , das mit der Systemzwischenablage verknüpft ist. Von :h clipboard-unnamedplus
:
clipboard-unnamedplus
unnamedplus A variant of the "unnamed" flag which uses the
clipboard register '+' (quoteplus) instead of
register '*' for all yank, delete, change and put
operations which would normally go to the unnamed
register. When "unnamed" is also included to the
option, yank operations (but not delete, change or
put) will additionally copy the text into register
'*'.
Only available with the +X11 feature.
Availability can be checked with:
if has('unnamedplus')
:version
in Vim überprüfen, ob + X11 in der Liste der enthaltenen Funktionen angezeigt wird. Sie können auch überprüfen, ob die Funktion "unnamedplus" verfügbar ist. :if has('unnamedplus')⏎ echo 'yes'⏎ endif
Wenn Sie nicht unter Linux arbeiten, sollten Sie unnamed anstelle von unnamedplus verwenden.
Bei Builds, die dies unterstützen, ist das genannte Register *
die Systemzwischenablage. Um Text von Vim in die Systemzwischenablage zu kopieren, können Sie den Text im visuellen Modus auswählen und dann drücken, "*yum ihn in die Systemzwischenablage zu kopieren.
Verwenden Sie umgekehrt, um "*pText aus der Systemzwischenablage in Vim einzufügen.
Ich empfehle Ihnen, Gvim zu verwenden und Folgendes hinzuzufügen .vimrc
:
source $VIMRUNTIME/mswin.vim
behave mswin
Dies ermöglicht die Unterstützung für CtrlC, CtrlX, CtrlVwie Notepad in Windows.
Beachten Sie, dass dies auch einige andere gängige Windows - Verknüpfungen hinzuzufügen, wie CtrlSfür :w
, CtrlAfür alle auswählen usw.
Jede andere Antwort hat alle wichtigen Dinge über die Register abgedeckt. Ich möchte noch eine Sache hinzufügen, die ich benutze.
In Vim gibt es eine Möglichkeit, den visuell ausgewählten Text direkt in die Zwischenablage zu kopieren . Fügen Sie dies einfach in Ihre vimrc- Datei ein:
set guioptions+=a
Wenn Sie einen Text visuell auswählen, wird dieser in Ihre Zwischenablage kopiert. Weitere Informationen hierzu finden Sie unter:help guioptions
Übrigens ist dies nur für gVim.
guioptions+=a
wird auch in der Antwort von Carpetsmoker erwähnt.
Sie können auch einen globalen Befehl verwenden, um ein bestimmtes Muster in die Zwischenablage zu kopieren. Dies kann in Situationen nützlich sein, in denen Informationen in einer Datei verstreut sind und das manuelle Kopieren fehleranfällig und anstrengend ist.
Reinigen Sie zuerst das Register, das die Informationen erhalten soll
:let @a=""
Kopieren Sie dann alle Zeilen, die das Muster enthalten
:g/pattern/yank A
Zuletzt werden die Informationen in die Zwischenablage des Systems übertragen (kopiert)
:let @+=@a
Wenn Sie versuchen, jede Zeile, die ein "Muster" enthält, direkt in die Zwischenablage zu kopieren, funktioniert dies nicht, da die Zwischenablage keinen neuen Inhalt anfügen kann. Daher verwenden wir hier ein normales VIM-Register, um alle Zeilen zu speichern, die das Muster enthalten Muster sofort und dann in die Zwischenablage legen.
OBS: Es ist notwendig, das Register zu löschen, bevor es verwendet wird, und die Verwendung der GROSSBUCHSTABEN-Version des Registers ermöglicht es uns, Inhalte anzufügen, andernfalls funktioniert es auch nicht.
Wenn Sie nicht herausfinden können, wie Sie +clipboard
zur Arbeit kommen, was ich aus irgendeinem Grund nicht konnte, dann können Sie dies tun.
Angenommen, Sie möchten nur einen Teil der Datei kopieren , dann gehe ich shift
+ v
in den visuellen Modus und hebe nur die Zeilen hervor, die ich kopieren möchte. Dann mache ich das.
# Linux Wayland
:'<,'>w !wl-copy
# Linux Xorg
:'<,'>w !xclip -selection clipboard
Erläuterung
'<,'>
- bedeutet, dass Sie den visuellen Modus zur Auswahl eines Bereichs verwendet haben (Sie geben dies nicht ein)w !{cmd}
- Schreibe den Bereich auf den Standard von cmd
, siehe mehr unter:help w_c
wl-copy
und xclip
sind Programme, an die Sie Text weiterleiten können, und diese fügen ihn in die Zwischenablage Ihres Systems einSobald dies einmal in Ihrem Verlauf ist, müssen Sie das Ganze nicht noch einmal eingeben. Wählen Sie einfach im visuellen Modus aus, geben Sie ein w
und drücken Sie die Taste nach oben. Der Befehl sollte sich automatisch vervollständigen. Außerdem müssen Sie den visuellen Modus nicht verwenden. Sie können den gewünschten Bereich einstellen.