Gibt es eine Möglichkeit, einen Textblock in die Systemzwischenablage zu kopieren, damit ich ihn in ein anderes Programm einfügen kann?
Kommentare
- Dies wurde bereits auf SO gefragt und beantwortet. Möglicherweise finden Sie dort weitere Informationen.
- Ich habe dieses Plugin auf macvim christoomey / vim-system-copy verwendet und liebe es wirklich. Es funktioniert sehr gut mit Bewegungen
cpip
,cpi{
. - Was Sie wirklich brauchen, ist EasyClip . Es wird genau das und noch viel mehr tun …
- Ich kann keine Antwort hinzufügen, sondern einen Kommentar. Wenn Sie nur einen Text kopieren möchten, können Sie auch
sed
🙂 verwenden.sed -n 5p file
; nur 5. Zeile.sed -n -e 5p -e 8p file
; nur 5. und 6. Zeile.sed -n 5,8p file
; Linien zwischen 5. und 8 .. Die Zeilen werden in der Konsole gedruckt. Sie können einfach kopieren, indem Sie Text auswählen.
Antwort
Für X11 -basierte Systeme (dh Linux und die meisten anderen UNIX -ähnliche Systeme) Es gibt zwei voneinander unabhängige Zwischenablagen:
- PRIMARY – Dies ist Copy-on-Select und kann mit der mittleren Maustaste eingefügt werden.
- CLIPBOARD – Dies wird (normalerweise) mit
^C
kopiert und eingefügt mit^V
(es ist wie bei MS Windows).
OS X und Windows Systeme haben nur eine Zwischenablage.
Für X11 Auf Systemen gibt es auch eine Reihe von Tools, die diese Zwischenablagen für Sie synchronisieren. Wenn sie also identisch zu sein scheinen, wird möglicherweise eines davon ausgeführt.
Vim verfügt über zwei spezielle Register Diesen Zwischenablagen entsprechen:
-
*
verwendet PRIMARY; Mnemonik: S tar ist S elect (für copy-on- s elect) -
+
verwendet CLIPBOARD; Mnemonik: STRG PLUS C (für die allgemeine Tastenkombination)
Unter Windows & OS X Es gibt keinen Unterschied zwischen +
und *
, da diese Systeme nur ein einziges haben Zwischenablage und beide Register beziehen sich auf dasselbe (es spielt keine Rolle, welches Sie verwenden).
Sie können diese Register als beliebiges Register verwenden. Verwenden Sie beispielsweise die PRIMARY-Zwischenablage *
mit den Befehlen y
und p
:
-
"*yy
-
"*p
Sie können dies möglicherweise als bequemere Tastenkombination verwenden:
noremap <Leader>y "*y noremap <Leader>p "*p noremap <Leader>Y "+y noremap <Leader>P "+p
Wenn Sie “ automatisch “ mit dem System verbinden möchten „s Zwischenablage, anstatt ständig manuell darauf zu verweisen, können Sie die Variable clipboard
festlegen:
- Setzen Sie es auf
unnamed
, um*
zu verwenden (PRIMARY, on select) - Setzen Sie es auf
unnamedplus
zur Verwendung von+
(CLIPBOARD,^C
)
Wenn Sie jetzt nur yy
verwenden, wird anstelle des unbenannten Registers von Vim die Zwischenablage des Systems aufgerufen, und p
fügt das System ein „s Zwischenablage.
Sie können diesen Registern auch wie jedem Register mit let
:
-
:let @+=42
-
:let @*=42
Die clipboard
Die Einstellung enthält einige weitere Optionen (z. B. Filter ausschließen). Aber das sind die Grundlagen. Siehe :help "clipboard"
für die vollständige Geschichte 😉
gVim
Wenn Sie gVim verwenden, können Sie bei Auswahl ein Kopierverhalten erhalten Verwenden von :set guioptions+=a
.
Dies ist standardmäßig auf X11-Systemen aktiviert (Kopien nach PRIMARY), jedoch nicht unter MS Windows & OSX (da die Auswahl eines Textes Ihre Zwischenablage überschreiben würde).
Nein +clipboard
?
Vim erfordert das +clipboard
Feature-Flag, damit dies funktioniert; Sie können überprüfen, ob Ihr Vim dies hat, indem Sie :echo has("clipboard")
aus Vim heraus verwenden (wenn die Ausgabe 0
ist, ist dies nicht der Fall vorhanden, wenn es „s 1
ist, oder wenn die Ausgabe von vim --version
auf .
Die meisten Linux-Distributionen werden mit einem “ minimalen “ Vim-Build geliefert, der standardmäßig kein +clipboard
, aber Sie können es normalerweise installieren:
- Debian & Ubuntu: Installieren Sie
vim-gtk3
. - Fedora: Installieren Sie
vim-X11
und führen Sievimx
anstelle vonvim
( weitere Informationen ). - Arch Linux: Installieren Sie
gvim
(dies aktiviert+clipboard
auch für normalesvim
).
Sie können dies auch Verwenden Sie xclip
, xcopy
oder xsel
, um Text in die Zwischenablage zu kopieren Fragen zur Lösung:
- Definieren Sie benutzerdefinierte Befehle für die Register * und +
- Wie kann ich über eine SSH-Sitzung ohne + Clip kopieren? Board?
SSH
Sie können auch eine Zwischenablage auf Remotecomputern verwenden, wenn Sie die X11-Weiterleitung über SSH aktivieren. Dies ist besonders nützlich mit dem obigen Tipp, da Sie dann xclip
verwenden können, um auf die Zwischenablage Ihres Desktops zuzugreifen. Das Vim auf dem Computer, auf den Sie senden, benötigt weiterhin das +clipboard
-Funktion.
Dies erfordert die Einstellung ForwardX11Trusted
und sollte Nur mit vertrauenswürdigen Servern , da der Server dadurch fast die vollständige Kontrolle über Ihre X11-Sitzung hat:
$ ssh -XY myhost
Um diese Einstellungen dauerhaft zu machen (Sie müssen also nicht jedes Mal -XY
hinzufügen), können Sie Folgendes in Ihrem ~/.ssh/config
:
# Do **NOT** set this globally; it gives the server complete control over # your X11 session. Host myhost ForwardX11 yes ForwardX11Trusted yes
Neovim
Neovim hat die Unterstützung für die Zwischenablage überarbeitet. Die integrierte Schnittstelle wurde entfernt und durch ein aufrufendes System ersetzt ein externes Dienstprogramm wie xclip
, xsel
oder pbcopy
/ pbpaste
.
Es sollte automatisieren Nehmen Sie diese Dienstprogramme auf und verwenden Sie sie. Unter OS X sollten pbcopy
und pbpaste
standardmäßig verfügbar sein. Unter Linux möchten Sie wahrscheinlich xclip
, da dies am weitesten verbreitet ist (es gibt tatsächlich zwei Versionen von xsel
mit inkompatiblen Flags ist wirklich dumm).
Siehe auch :help clipboard
in Neovim.
Kommentare
- ssh -Y impliziert -X, sodass -X weggelassen werden kann.
- Ein sehr interessanter Nebeneffekt beim Lernen (einige Jahre) vor) war für mich die Erkenntnis, dass
"
viele benannte Register auswählen kann."+
ist keine Magie, sondern ‚ registriert einfach+
. Wenn Sie beispielsweise drei Dinge gleichzeitig kopieren und jedes einzeln einfügen möchten, können Sie"1y
,"2y
und"3y
und l ater"1p
,"2p
und"3p
. Dies ist wirklich mächtig und in fast jedem anderen Editor nicht vorhanden. Eine weitere interessante Verwendung ist das Betrachten gespeicherter Makros. Wenn Sie beispielsweise mitqq
aufnehmen, aber feststellen, dass Sie das Problem beheben müssen, können Sie Folgendes tun: in einer temporären Zeile"qp
beheben it und"qd
. - Nur ein Hinweis: OS X verfügt über zwei separate Zwischenablagen. Auf einen wird über Cmd-C und Cmd-V zugegriffen, auf den anderen über die Emacs-Tastenkombinationen Ctrl-K und Ctrl-Y.
- @shahbaz – wahrscheinlich besser, um die Buchstabenregister für einen solchen Zweck zu verwenden, da Die nummerierten werden geändert, wenn Text gelöscht wird.
- Kopieren & Einfügen wie in der Frage beschrieben ist für den Desktop gedacht. Es ist richtig, dass Sie durch die Installation des Pakets
gvim
nebenvim
Funktionen für die Zwischenablage erhalten. In Dateibrowsern werden Ihnen dann zwei Texteditoren zum Öffnen von Dateien angeboten! Und das sieht hässlich aus. Aus diesem Grund ist es besser, nur die Paketevim
undvim-gui-common
zu installieren. Später werden die Funktionen der Zwischenablage bereitgestellt, ohne dassgvim
installiert werden muss. Dies ist unter Linux Debian 10.
Antwort
Von http://vim.wikia.com/wiki/Accessing_the_system_clipboard
set clipboard=unnamedplus
Dadurch wird das Standard-Vim-Register in Register, 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")
Kommentare
- Warum funktioniert das bei mir nicht, wenn Sie & zwischen vim-Instanzen einfügen (jeweils in einem separaten Terminator-Terminal)?
- Wenn Sie unter Linux arbeiten und Vim mit der Funktion + X11 kompiliert wurde und Sie clipboard = unnamedplus festgelegt haben, sollten Sie in der Lage sein, eine Zeile in einer Instanz von vim zu ziehen und in einer anderen Instanz einzufügen von vim. Sie sollten es auch mit STRG + V oder UMSCHALT + EINFÜGEN in jede andere Anwendung einfügen können. Sie können
:version
in Vim verwenden, um festzustellen, ob + X11 in der Liste der enthaltenen Funktionen angezeigt wird. Sie können auch überprüfen, ob die Funktion ‚ unnamedplus ‚ mit:if has('unnamedplus')⏎ echo 'yes'⏎ endif
verfügbar ist Nicht unter Linux sollten Sie unbenannt anstelle von unbenannt verwenden.
Antwort
Die anderen Antworten beziehen sich auf das Kopieren Text aus Ihrem Puffer in die Systemzwischenablage. Eine weitere häufige Operation besteht darin, Text aus einem anderen Register in die Zwischenablage zu kopieren. Wenn Sie beispielsweise bereits Text in "
(das Standardregister) gerissen haben, möchten Sie dieses Register möglicherweise in die Zwischenablage laden.
Sie können Führen Sie dies mit :let
:
-
let @+=@"
— aus kopiert das Standardregister in die Zwischenablage -
let @*=@"
— kopiert das Standardregister in die X11-Primärauswahl („Maus“ Zwischenablage „) -
let @+=@a
— Kopie aus dem Registera
nach die Zwischenablage - usw.
Beachten Sie, dass dies im Allgemeinen für Register funktioniert: let @a=@b
kopiert das Register b
zum Registrieren von a
.
Antwort
Ein Builds, die dies unterstützen, das Register mit dem Namen *
ist die Systemzwischenablage. Um Text von Vim in die Systemzwischenablage zu kopieren, können Sie Wählen Sie den Text im visuellen Modus aus und drücken Sie dann " * y , um ihn in die Systemzwischenablage zu kopieren.
Umgekehrt: Verwenden Sie " * p , um Text aus der Systemzwischenablage in Vim einzufügen.
Antwort
Wenn Sie nicht herausfinden können, wie +clipboard
funktioniert, was ich aus irgendeinem Grund nicht konnte, können Sie dies tun
Angenommen, Sie möchten nur einen Abschnitt der Datei kopieren, dann mache ich shift
+ v
, um zu gehen in den visuellen Modus und markieren Sie nur die Zeilen, die ich kopieren möchte. Dann mache ich das.
# Linux Wayland :"<,">w !wl-copy # Linux Xorg :"<,">w !xclip -selection clipboard
Erklärung
-
"<,">
– bedeutet Sie Verwenden Sie den visuellen Modus, um einen Bereich auszuwählen (geben Sie diesen nicht ein). -
w !{cmd}
– Schreiben Sie den Bereich in den Standardwert voncmd
Weitere Informationen finden Sie unter:help w_c
-
wl-copy
undxclip
sind Programme, an die Sie Text weiterleiten können und die „Ihrer System-Zwischenablage hinzugefügt werden
. Sobald dies in Ihrem Verlauf ist, müssen Sie nicht mehr das Ganze eingeben Wählen Sie einfach im visuellen Modus, geben Sie w
ein und drücken Sie dann nach oben. Der Befehl sollte automatisch vervollständigt werden. Außerdem müssen Sie den visuellen Modus nicht verwenden. Sie können einen beliebigen Bereich festlegen.
Kommentare
- Dies (über die andere ähnliche Antwort) abstimmen, da dieser eine Erklärung gibt. Übrigens ein Hinweis für mich oder andere Leser: Wenn Sie
xclip
verwenden, müssen Sie den Parameter-selection clipboard
NICHT hinzufügen zu lang zum tippen. Die Standardeinstellung:'<,'>w !xclip
kopiert den Inhalt in die “ primäre “ dh copy-on- Wählen Sie die Zwischenablage aus, die mit der mittleren Maustaste eingefügt werden kann.
Antwort
Ich empfehle Ihnen, Gvim zu verwenden. und fügen Sie dies Ihrer .vimrc
hinzu:
source $VIMRUNTIME/mswin.vim behave mswin
Dies aktiviert die Unterstützung für Strg C , Strg X , Strg V wie Editor in Windows.
Beachten Sie, dass dadurch auch einige andere gängige Windows-Verknüpfungen hinzugefügt werden, z. B. Strg S für :w
, Strg A zum Auswählen aller usw.
Antwort
Ich hatte Probleme Die System-Zwischenablage und vim
in tmux
.
Es wurde mit xsel
oder xclip
, wie in diesem Beispiel:
1.) visu Wählen Sie im normalen Modus einen Blocktext aus: V<motionkey>
2.a) mit xsel
Beispiel ausführen: :"<,">w !xsel -b
2.b) mit xclip
ausführen ex: :"<,">w !xclip -selection clipboard
3.) in ein anderes Programm einfügen
… und jetzt nmap dies wie bevorzugt.
Diese Optionen (-b oder -selection-Zwischenablage) bedeuten im Grunde, dass das Programm (xsel oder xclip) in den Hintergrund gesendet wird und auf ein anderes Programm wartet Fügen Sie den Inhalt ein, damit er „stören“ kann.
(auf Manjaro mit i3, xfce4-terminal, tmux)
Antwort
Dies ist das Verhalten Ich wollte, wenn es um die System-Zwischenablage ging:
- Das Ziehen einer Zeile mit Zeilenumbruch funktioniert
- Das Ziehen einer Zeile ohne Zeilenumbruch funktioniert
- Das Ziehen, was auch immer visuell ist Ausgewählte Werke
- Werke schneiden
- Eine Linie mit Zeilenumbrüchen schneiden
- Eine Linie ohne Zeilenumbruch schneiden
Nach Werken Ich meine: Ich kann immer noch p
verwenden, um in vim einzufügen, und ich kann auch die System-Zwischenablage verwenden. Grundsätzlich möchte ich, dass Kopieren und Einfügen wie erwartet funktioniert und ich habe es nicht getan. “ Ich möchte meine System-Zwischenablage nicht mehr als nötig überladen.
Meine Technik bestand darin, die allgemeinen Befehle zum Ziehen, Ausschneiden und Löschen zuzuordnen, um die System-Zwischenablage zu verwenden, indem ich diese Zeilen zu meiner :
" use system clipboard " https://anuragpeshne.github.io/essays/vim/7.html noremap y "*y noremap yy "*yy noremap Y "*y$ noremap x "*x noremap dd "*dd noremap D "*D
Die wichtigsten Erkenntnisse aus der https://anuragpeshne.github.io/essays/vim/7.html Blog-Beitrag lautet:
Rekursives Mapping ist böse. Verwenden Sie immer nicht rekursives Mapping. (noremap)
Kommentare
- Was bedeutet die
"
tun? In der ersten Antwort wurde bereits erklärt, wofür*
ist (bezogen auf die primäre Zwischenablage), aber ich sehe ‚ nirgendwo eine Erklärung dafür Wofür"
ist und warum der Befehl dadurch funktioniert. - ‚ ist nicht sofort offensichtlich, weil Sie ‚ wird wahrscheinlich verwendet, um das Zitat zu verwenden, um Wörter zu umgehen, wie
"foo"
; Für vim"*
ist jedoch der Name des Registers “ “ (ein vim) Konzept), das eine Verbindung zur Systemzwischenablage herstellt. Wenn Sie vim öffnen und:registers
eingeben, sehen Sie die Namen anderer Register wie:""
,"0
,"1
und weiter. Ich fand diesen Artikel nützlich, um mehr über Register zu erfahren: brianstorti.com/vim-registers
Antwort
Wenn Ihr vim +clipboard
nicht unterstützt, können Sie den fakeclip
Antwort
Jede andere Antwort wurde behandelt alle wichtigen Dinge über die Register. Ich möchte noch eine Sache hinzufügen, die ich verwende.
In Vim gibt es eine Möglichkeit, die visuell ausgewählte Text in die Zwischenablage. Fügen Sie dies einfach in Ihre vimrc -Datei ein:
set guioptions+=a
Und wenn Sie visuell einen Text auswählen, wird dieser in Ihre Datei kopiert Zwischenablage. Weitere Informationen hierzu finden Sie unter :help guioptions
Übrigens nur für gVim.
Kommentare
-
guioptions+=a
wird auch in der Antwort von Carpetsmoker ‚ erwähnt. - @muru Ja, tut mir leid . Ich habe ‚ das vorher nicht gesehen. Ich habe es gerade gesehen.
Antwort
Sie können auch einen globalen Befehl verwenden, um ein bestimmtes Muster auf das zu setzen Zwischenablage. Dies kann in Situationen hilfreich sein, in denen Informationen in einer Datei verstreut sind und das manuelle Kopieren fehleranfällig und ermüdend ist.
Bereinigen Sie zuerst das Register, das die Informationen erhält.
:let @a=""
Kopieren Sie dann alle Zeilen mit dem Muster darauf.
:g/pattern/yank A
Übertragen Sie die Informationen schließlich in die System-Zwischenablage
:let @+=@a
Wenn Sie versuchen, jede Zeile mit einem „Muster“ direkt in die Zwischenablage zu kopieren, funktioniert dies nicht, da die Zwischenablage nicht in der Lage ist, neue anzuhängen Inhalt, daher verwenden wir hier ein normales vim-Register, um alle Zeilen, die das Muster enthalten, auf einmal zu speichern und es dann in die Zwischenablage zu legen.
OBS: Es ist erforderlich, das Register vor der Verwendung zu verkleinern, und das Die Verwendung der UPPERCASE-Version des Registers ermöglicht das Anhängen von Inhalten, andernfalls funktioniert dies auch nicht.
Antwort
MacVim Cmd + x/c/v
zum Ausschneiden / Kopieren / Einfügen
Wenn Sie MacVim verwenden, werden die üblichen Cmd+x/c/v
in $ VIMRUNTIME / macmap.vim , das standardmäßig bezogen wird und daher ohne Konfiguration verfügbar ist:
vnoremap <special> <D-x> "+x vnoremap <special> <D-c> "+y cnoremap <special> <D-c> <C-Y> nnoremap <special> <D-v> "+gP cnoremap <special> <D-v> <C-R>+ execute "vnoremap <script> <special> <D-v>" paste#paste_cmd["v"] execute "inoremap <script> <special> <D-v>" paste#paste_cmd["i"]
Die Verwendung kann jedoch dazu führen, dass vim-Benutzer das nicht kennen vim way und gehen auf einem fremden Computer / einer fremden Umgebung verloren.