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 Sie vimx anstelle von vim ( weitere Informationen ).
  • Arch Linux: Installieren Sie gvim (dies aktiviert +clipboard auch für normales vim).

Sie können dies auch Verwenden Sie xclip, xcopy oder xsel, um Text in die Zwischenablage zu kopieren Fragen zur Lösung:

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 mit qq 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 neben vim 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 Pakete vim und vim-gui-common zu installieren. Später werden die Funktionen der Zwischenablage bereitgestellt, ohne dass gvim 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 Register a 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 von cmd Weitere Informationen finden Sie unter :help w_c
  • wl-copy und xclip 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 Plugin für Linux, Mac, Windows, tmux, screen, …

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.