it-swarm.com.de

Wie kann ich vim einfügen (und in die Zwischenablage kopieren)?

Im Gegensatz zu anderen Editoren speichert vim kopierten Text in einer eigenen Zwischenablage. Daher fällt es mir sehr schwer, Text von einer Webseite zu kopieren und in die aktuelle Arbeitsdatei einzufügen. Es kommt also vor, dass ich gedit entweder öffnen oder manuell eingeben muss.

Kann ich Vim Paste aus und in die Zwischenablage des Systems einfügen?

695
Santosh Kumar

Die Register "* und "+ sind für die Zwischenablage des Systems bestimmt (:help registers). Abhängig von Ihrem System können sie unterschiedliche Aufgaben ausführen. Auf Systemen, die X11 nicht verwenden, wie z. B. OSX oder Windows, wird das Register "* zum Lesen und Schreiben in die Systemzwischenablage verwendet. Auf X11-Systemen können beide Register verwendet werden. Siehe :help x11-selection für weitere Details, aber im Grunde ist der "* analog zu X11s PRIMÄRER Auswahl (die normalerweise Dinge kopiert, die Sie haben) mit der Maus auswählen und mit der mittleren Maustaste einfügen) und "+ ist analog zu X11s ZWISCHENABLAGE Auswahl (das ist die eigentliche Zwischenablage) ).

Wenn alles über Ihren Kopf ging, versuchen Sie es mit "*yy oder "+yy, um eine Zeile in die Zwischenablage Ihres Systems zu kopieren. Vorausgesetzt, Sie haben die entsprechenden Kompilierungsoptionen, sollte die eine oder andere funktionieren. Vielleicht möchten Sie dies auf etwas für Sie bequemeres übertragen. Zum Beispiel könnten Sie vnoremap <C-c> "*y in Ihre ~/.vimrc einfügen, damit Sie visuell auswählen und drücken können Ctrl+c in die Zwischenablage Ihres Systems ziehen.

Beachten Sie, dass das Kopieren/Einfügen aus der System-Zwischenablage funktioniert nicht wenn :echo has('clipboard') 0 zurückgibt. In diesem Fall wird vim nicht mit der Funktion +clipboard kompiliert, und Sie werden haben um eine andere Version zu installieren oder neu zu kompilieren. Einige Linux-Distributionen bieten standardmäßig eine minimale VIM-Installation an. Wenn Sie jedoch das Paket vim-gtk oder vim-gtk3 installieren können Sie die zusätzlichen Funktionen nutzen.

Sie können sich auch die Option 'clipboard' ansehen, die unter :help cb beschrieben ist. In diesem Fall können Sie :set clipboard=unnamed oder :set clipboard=unnamedplus verwenden, damit alle Vorgänge zum Ziehen/Löschen automatisch in die Systemzwischenablage kopiert werden. Dies kann in einigen Fällen eine Unannehmlichkeit sein, wenn Sie etwas anderes in der Zwischenablage speichern, da es diese überschreibt.

Zum Einfügen können Sie "+p oder "*p verwenden (ebenfalls abhängig von Ihrem System und/oder der gewünschten Auswahl) oder diese einem anderen Element zuordnen. Ich tippe sie explizit ein, befinde mich aber oft im Einfügemodus. Wenn Sie sich im Einfügemodus befinden, können Sie sie weiterhin mit dem richtigen Einzug einfügen, indem Sie <C-r><C-p>* oder <C-r><C-p>+ verwenden. Siehe :help i_CTRL-R_CTRL-P.

Erwähnenswert ist auch die Option paste (:help paste) von vim. Dies versetzt vim in einen speziellen "Einfügemodus", in dem verschiedene andere Optionen deaktiviert sind. So können Sie mit Ihrem Terminalemulator oder der bekannten Einfügeverknüpfung des Multiplexers problemlos in vim einfügen. Geben Sie einfach :set paste ein, um es zu aktivieren, fügen Sie Ihren Inhalt ein und geben Sie dann :set nopaste ein, um es zu deaktivieren. Alternativ können Sie die Option pastetoggle verwenden, um einen Schlüsselcode festzulegen, mit dem der Modus umgeschaltet wird (:help pastetoggle). Ich empfehle die Verwendung von Registern anstelle dieser Optionen, aber wenn sie immer noch zu gruselig sind, kann dies eine praktische Umgehung sein, während Sie Ihre Vim-Chops perfektionieren.

Weitere Informationen finden Sie unter :help clipboard.

811
Conner

Sie können nach vim kopieren, indem Sie die Verknüpfung von gnome-terminal zum Einfügen verwenden. Machen Sie die Datei im Einfügemodus und verwenden Sie

Ctrl+Shift+v.

Erinnern Sie sich vorher an

 :set paste 

zu vermeiden, mit dem Einzug zu verwirren.

130
neel

Linux

Auf meinem Linux-System werden die Register + und * einer X11-Auswahl zugeordnet, die mit der mittleren Maustaste eingefügt werden kann. Wenn :set clipboard=unnamed und :set clipboard=unnamedplus verwendet werden, werden die Register der Zwischenablage zugeordnet und können mit STRG-V eingefügt werden.

Die Details scheinen etwas konfigurations- und systemabhängig zu sein, sodass Ihre Laufleistung definitiv variieren wird. Es sollte Sie aber auf jeden Fall in die richtige Richtung führen.

Siehe auch

http://vim.wikia.com/wiki/Accessing_the_system_clipboard

39
Todd A. Jacobs

Bei mir funktioniert diese Konfiguration zum Kopieren und Einfügen

" copy and paste
vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa
38
lis2

Dies sind die Zeilen, die Sie in Ihrem vimrc für diesen Zweck benötigen:

set clipboard+=unnamed  " use the clipboards of vim and win
set paste               " Paste from a windows or from vim
set go+=a               " Visual selection automatically copied to the clipboard
33
Danniel Little

Ich glaube, dass diese Frage eine objektivere Antwort verdient.

Aufrufen des Einfügemodus

  • ESC
  • : Paste setzen
  • drücken Sie i
  • SHIFT + Insert (mit einem Text, der in Ihre Zwischenablage kopiert wurde)


Paste-Modus verlassen

  • ESC
  • : Nopaste einstellen
  • drücken Sie i

Sie haben den Text eingefügt und können ihn erneut eingeben.

20
ivanleoncz

Zwischenablage

Es gibt ein spezielles Register zum Speichern dieser Auswahl. Es ist das "*" - Register. Hier wird nichts eingetragen, es sei denn, die Informationen darüber, welcher Text ausgewählt wird, werden geändert (z. B. durch Klicken mit der linken Maustaste) oder wenn eine andere Anwendung dies wünscht Den ausgewählten Text einfügen. Dann wird der Text in das "*" - Register eingetragen. Zum Beispiel, um eine Linie auszuschneiden und sie zur aktuellen Auswahl zu machen/sie auf die KLEMMBRETT zu setzen:

    "*dd

Wenn Sie eine Auswahl aus einer anderen Anwendung einfügen möchten, z. B. durch Klicken mit der mittleren Maustaste, wird die Auswahl zuerst in das Register "*" und dann wie jedes andere Register "gesetzt". Zum Beispiel, um die Auswahl zu setzen (Inhalt der CLIPBOARD):

    "*p

Register E354

> There are nine types of registers:                      
> 1. The unnamed register ""
> 2. 10 numbered registers "0 to "9
> 3. The small delete register "-
> 4. 26 named registers "a to "z or "A to "Z
> 5. four read-only registers ":, "., "% and "#
> 6. the expression register "=
> 7. The selection and drop registers "*, "+ and "~ 
> 8. The black hole register "_
> 9. Last search pattern register "/

Einfügen aus der Zwischenablage

1. Clipboard: Copy
2. Vim insertmode, middle mouse key

Überprüfen Sie, ob die X11-Zwischenablage im Terminal unterstützt wird

Wenn Sie Vim in einem Terminal ausführen möchten, müssen Sie nach einer Version von Vim suchen, die mit Unterstützung für die Zwischenablage kompiliert wurde. Überprüfen Sie, ob die X11-Zwischenablage von der Konsole unterstützt wird, und geben Sie Folgendes ein:

% vim --version

Wenn Sie "+ xterm_clipboard" sehen, können Sie loslegen.

http://vim.wikia.com/wiki/Accessing_the_system_clipboard

Der X-Server verfügt über drei Auswahlmöglichkeiten:

PRIMARY, SECONDARY und CLIPBOARD

Die PRIMARY-Auswahl wird üblicherweise zum Kopieren und Einfügen über die mittlere Maustaste verwendet. Die Auswahlen SECONDARY und CLIPBOARD werden von Anwendungsprogrammen weniger häufig verwendet.

http://linux.die.net/man/1/xsel

16
The Demz

Ich habe die obigen Vorschläge ausprobiert und keiner von ihnen hat in meiner Umgebung funktioniert. (Windows PuTTY Klon über ssh)

Einige zusätzliche Google-Meldungen wurden angezeigt: https://unix.stackexchange.com/questions/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard

Einer der Kommentare schlug vor, SHIFT+INSERT zu verwenden, was den Trick zum Einfügen aus der Zwischenablage meines Desktops in Vims Puffer bewirkte. Ctrl-C kopierte bereits von Vim in die Zwischenablage des Desktops.

12
jinksPadlock

Hatte keine + Zwischenablage, also habe ich mir diese alternative Lösung mit xsel ausgedacht:

Fügen Sie zu Ihrer ~/.vimrc hinzu:

vnoremap <C-C> :w !xsel -b<CR><CR>

9
rotestein

Ein kurzer Hinweis für Personen, deren VIM-Installation die Register * und + nicht unterstützt. Es ist nicht erforderlich, eine neue vim-Installation herunterzuladen, um sie aus der Zwischenablage einzufügen. Hier ist eine alternative Methode:

1) Installieren Sie Parcellite (einen Manager für die Zwischenablage mit geringem Speicherbedarf).

2) Fügen Sie in Ihrer .vimrc-Datei Folgendes hinzu:

command Clip r !parcellite -c

3) Starten Sie vim neu.

Wenn Sie nun Folgendes eingeben: Clip als Ex-Befehl, wird der Inhalt der Zwischenablage am Cursor eingefügt. Sie können den neuen Befehl auch einer Funktionstaste zuordnen, um dies mit einem Tastendruck zu tun.

6
lovecraftian

Das funktioniert bei mir: Ctrl+Shift+V

3
Boseam

Nach Conners Antwort zu folgen, war großartig, aber C-R C-p + und C-R C-p * im Einfügemodus sind etwas unpraktisch. Ditto "*p und "+p aus dem Befehlsmodus.

ein VIM Guru schlug Folgendes vor, um C-v dem zuzuordnen, was C-r C-p + tut.

Sie können :inoremap <C-v> <C-o>"+p nur für den Einfügemodus festlegen

wenn du wirklich den blockweisen visuellen Modus überschreiben wolltest (von ihm nicht empfohlen, da der visuelle Modus gut ist), könntest du map <C-v> "+p haben

2
barlop

Wenn Sie vim unter MAC OSX verwenden, wird es leider mit einer älteren Version ausgeliefert und entspricht nicht den Optionen für die Zwischenablage. Glücklicherweise kann Homebrew dieses Problem leicht lösen.

installiere vim:

brew install vim --with-lua --with-override-system-vim

installiere die Version von vim:

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

starten Sie das Terminal neu, damit es wirksam wird.


füge die folgende Zeile an ~/.vimrc an
set clipboard=unnamed

jetzt können Sie die Zeile in vim mit yy kopieren und systemweit einfügen.

2
anonymous

Die einfachste Lösung dafür, die auch zwischen verschiedenen Linux-Rechnern über ssh funktioniert, ist:

  1. Überprüfen Sie, ob vim die X-11-Zwischenablage unterstützt: vim --version | grep clipboard. Wenn es -clipboard und -xterm_clipboard zurückmeldet, sollten Sie entweder vim-gtk oder vim-gnome installieren (gvim unter Arch Linux)

  2. Fügen Sie Ihrem .vimrc die folgenden Zeilen hinzu:

set clipboard=unnamedplus
set paste
  1. Wenn Sie sich über ssh auf einem anderen Computer anmelden, verwenden Sie die Option -Y: ssh -Y machine

Jetzt sollte das Kopieren und Einfügen auf einem einzelnen Computer und auf verschiedenen Computern genau wie erwartet funktionieren, indem nur y für yank und p für paste verwendet werden. NB Ändern Sie .vimrc auf allen Computern, auf denen Sie diese Funktion verwenden möchten.

1
chao

Basierend auf der @ lis2-Antwort verwende ich eine einfachere Konfiguration, die den Einfügemodus am Ende nicht erzwingt:

_" Copy and paste
if has('clipboard') && !has('gui_running')
  vnoremap <C-c> "+y
  vnoremap <C-x> "+d
  vnoremap <C-v> "+p
  inoremap <C-v> <C-r><C-o>+
endif
_

Beachten Sie, dass alle diese Standard-Vim-Zuordnungen überschreiben:

  • v_CTRL-C : visuellen Modus beenden
  • v_CTRL-X : subtrahiere [count] von der Zahl
  • v_CTRL-V : Blockweiser visueller Modus
  • i_CTRL-V : füge die nächste Nicht-Ziffer wörtlich ein, die auch _i_CTRL-Q_ zugeordnet ist

Alternativ kann man Schlüssel verwenden, die von den Vim-Verben "yank", "delete" und "put" inspiriert sind: _<C-y>_, _<C-d>_ und _<C-p>_. Diese würden nur eine Standardzuordnung überschreiben:

  • i_CTRL-P : Rückwärtssuche nach Vervollständigung
1
ericbn

Wenn Sie zuerst eine Maus benutzen, tun Sie dies

 :set paste 

Dann right click mouse und der Inhalt im Puffer wird eingefügt

1
Mohammed Rafeeq

Die anderen Lösungen sind gut, wenn Sie Ihre vimrc ändern möchten, etc ... Allerdings wollte ich einen einfachen Weg, um von zu kopieren = vim zu meiner Systemtastatur. Das habe ich mir ausgedacht.

  • Wählen Sie den zu kopierenden Text im visuellen Modus aus. v
  • Drücken Sie : (es wird automatisch erweitert, um :'<,'> anzuzeigen)
  • Geben Sie y *odery + (abhängig von Ihrem System) ein, um den ausgewählten Text in die Systemzwischenablage zu ziehen
1
NateW

Neben der Einstellung :set clipboard=unnamed sollten Sie mvim -v verwenden, die Sie mit brew install macvim erhalten, wenn Sie vim unter Terminal.app unter Mac OS X 10.9 verwenden. Standardmäßig unterstützt vim die Zwischenablageoption nicht.

1
Nobu

Was Sie wirklich brauchen, ist EasyClip . Genau das und noch viel mehr ...

1
Scott Wade

Erwähnenswert ist auch, dass Sie unter OSX mit Vim Text mit der Maus auswählen und Cmd-C in die Zwischenablage des OSX-Systems kopieren können. Der kopierte Text wird in der Zwischenablage außerhalb von Vim verfügbar sein.

Mit anderen Worten, OSX behandelt es so, als wäre es ein normales Fenster, und hier ist die häufig verwendete Schaltfläche Apple "Befehl" nützlich.

B-30

1
B-30

Ich bin auf einem Macbook Pro Mitte 2017 auf dieses Problem gestoßen, auf dem vim in iTerm2 als meine primäre Entwicklungsumgebung ausgeführt wurde.

Wie andere Antworten bereits angedeutet haben, habe ich vim --version ausgeführt und festgestellt, dass -clipboard zurückgegeben wird. Dies bedeutet, dass die mit meinem Computer gelieferte Version von vim nicht mit der Option "Zwischenablage" kompiliert wurde.

Das homebrew -Paket für vim scheint mit der clipboard -Option kompiliert zu werden.

  1. brew install vim ausführen
  2. set clipboard+=unnamed zu meiner ~/.vimrc Datei hinzufügen
  3. Schließe und öffne iTerm2
1
NM Pennypacker

Mit Vim 8+ unter Linux oder Mac können Sie jetzt einfach das native Einfügen des Betriebssystems verwenden (ctrl+shift+V unter Linux, cmd+V unter Mac). Drücken Sie für den Einfügemodus nicht i.

Der Inhalt der Zwischenablage Ihres Betriebssystems wird eingefügt, die Leerzeichen und Tabulatoren bleiben erhalten, ohne dass ein automatischer Einzug hinzugefügt wird. Es entspricht der alten Methode :set paste, i, ctrl+shift+V, esc, :set nopaste.

Die vim-Funktionen +clipboard oder +xterm_clipboard müssen nicht mehr installiert werden. Diese Funktion wird als "Einfügen in Klammern" bezeichnet. Weitere Informationen finden Sie unter Deaktivieren der automatischen Einrückung beim Einfügen von Text in vim

1
wisbucky

Bei einigen internationalen Tastaturen müssen Sie möglicherweise drücken "+Space um einen " zu bekommen.

In diesem Fall müssten Sie also drücken "Space+y oder "Space*y Kopieren.

Und "Space+p oder "Space*p einfügen.

0
Arthur F

Hierfür gibt es zwei einfache Möglichkeiten. Stellen Sie Ihre Datei in den Einfügemodus und 1) drücken Sie die mittlere Taste (das Scrollrad) in Ihrer Maus, oder 2) Strg + Umschalt + V

0
user1898814

Wenn ich mein Debian-vim verwende, das nicht in Gnome integriert ist (vim --version | grep clip # zeigt keine Unterstützung für die Zwischenablage), kann ich in die Zwischenablage kopieren, indem ich die Umschalttaste gedrückt halte und den Text mit der Maus auswähle, wie bei jedem anderen andere Flüche Programm. Wie ich anhand eines Kommentars von @Conner herausgefunden habe, ist es das Terminal (in meinem Fall das Gnome-Terminal), das die Mausereignis-Berichterstattung deaktiviert, wenn es meine Umschalttaste erkennt. Ich vermute, dass Programme, die auf Flüchen basieren, Mausereignisse empfangen können, nachdem eine bestimmte Escape-Sequenz an das Terminal gesendet wurde.

0
eel ghEEz

Da vim 8 Rechtsklick aktiviert standardmäßig den visuellen Modus. Dies verhindert das "normale" Kopieren und Einfügen (nennen Sie es "defect by design" https://github.com/vim/vim/issues/1326 ). Beheben Sie es, indem Sie Folgendes tun:

echo "set mouse-=a" >> ~/.vimrc.

Beenden Sie vim und starten Sie es neu.

0
dr0i

Wenn Sie Windows verwenden und den Inhalt der Systemzwischenablage mit p einfügen möchten, geben Sie diesen Befehl ein.

:set clipboard = unnamed

Das hat mein Problem gelöst.

0
vincent mathew