Hoe vim plakken van (en kopiëren naar) het klembord van het systeem?

In tegenstelling tot andere editors slaat vim gekopieerde tekst op zijn eigen klembord op. Het is dus erg moeilijk voor mij om wat tekst van een webpagina te kopiëren en in het huidige werkbestand te plakken. Toevallig moet ik gedit openen of handmatig typen.

Kan ik vim plakken van en naar het klembord van het systeem?


Antwoord 1, autoriteit 100%

De "*en "+registers zijn voor het klembord van het systeem (:help registers). Afhankelijk van uw systeem kunnen ze verschillende dingen doen. Op systemen die bijvoorbeeld geen X11 gebruiken, zoals OSX of Windows, wordt het "*register gebruikt om te lezen en te schrijven naar het systeemklembord. Op X11-systemen kunnen beide registers worden gebruikt. Zie :help x11-selectionvoor meer details, maar in feite is de "*analoog aan de _PRIMARY_-selectie van X11 (die gewoonlijk dingen kopieert die u selecteert met de muis en plakt met de middelste muisknop) en "+is analoog aan de _CLIPBOARD_-selectie van X11 (wat het eigenlijke klembord is).

Als je dat allemaal te boven bent gekomen, probeer dan "*yyof "+yyte gebruiken om een regel naar het klembord van je systeem te kopiëren. Ervan uitgaande dat u over de juiste compileeropties beschikt, zou de een of de ander moeten werken.

Misschien wil je dit opnieuw toewijzen aan iets dat handiger voor je is. U kunt bijvoorbeeld vnoremap <C-c> "*yin uw ~/.vimrczodat u visueel kunt selecteren en op Ctrl+ckunt drukken om naar uw systeem te rukken klembord.

Houd er rekening mee dat kopiëren/plakken vanaf het systeemklembord niet werkt als :echo has('clipboard')0 retourneert. In dit geval is vim niet gecompileerd met de functie +clipboarden moet je een andere versie installeren of opnieuw compileren. Sommige Linux-distributies leveren standaard een minimale vim-installatie, maar als je het vim-gtkof vim-gtk3pakketinstalleert, kun je de extra functies niettemin.

Misschien wil je ook de optie 'clipboard'bekijken die wordt beschreven in :help cb. In dit geval kunt u :set clipboard=unnamedof :set clipboard=unnamedplusom alle ruk-/verwijderbewerkingen automatisch naar het systeemklembord te kopiëren. Dit kan een ongemak zijn in sommige gevallen waarin u iets anders op het klembord opslaat, omdat het dit zal overschrijven.

Om te plakken kunt u "+pof "*pgebruiken (opnieuw, afhankelijk van uw systeem en/of gewenste selectie) of u kunt deze toewijzen aan iets anders . Ik typ ze expliciet, maar ik bevind me vaak in de invoegmodus. Als je in de invoegmodus bent, kun je ze nog steeds plakken met de juiste inspringing door <C-r><C-p>*of <C-r><C-p>+. Zie :help i_CTRL-R_CTRL-P.

Het is ook het vermelden waard vim’s pasteoptie (:help paste). Dit plaatst vim in een speciale “plakmodus”die verschillende andere opties uitschakelt, zodat je gemakkelijk in vim kunt plakken met behulp van de bekende plaksnelkoppeling van je terminalemulator of multiplexer. (Typ gewoon :set pasteom het in te schakelen, plak je inhoud en typ vervolgens :set nopasteom het uit te schakelen.) Je kunt ook de pastetoggleoptie om een sleutelcode in te stellen die de modus omschakelt (:help pastetoggle).

Ik raad aan om registers te gebruiken in plaats van deze opties, maar als ze nog steeds te eng zijn, kan dit een handige oplossing zijn terwijl je je vim-koteletten perfectioneert.

Zie :help clipboardvoor meer gedetailleerde informatie.


Antwoord 2, autoriteit 23%

Je kunt in vim plakken met de snelkoppeling van gnome-terminal om te plakken.
Plaats het bestand in de invoegmodus en gebruik

Ctrl+Shift+v.

Vergeet niet om

:set paste 

om te voorkomen dat er met de inspringing wordt geknoeid.


Antwoord 3, autoriteit 7%

Ik ben van mening dat deze vraag een objectiever en grafischer antwoord verdient:

De plakmodus openen

  • ESC
  • :set plakken
  • druk op i
  • SHIFT+ Invoegen(met een tekst gekopieerd naar je klembord)

Plakmodus verlaten

  • ESC
  • :set nopaste
  • druk op i

Je hebt de tekst geplakt en je kunt opnieuw typen.


Antwoord 4, autoriteit 5%

Linux

Op mijn Linux-systeem verwijzen de +en *registers naar een X11-selectie, die kan worden geplakt met de middelste muisknop. Wanneer :set clipboard=unnameden :set clipboard=unnamedplusworden gebruikt, dan worden de registers toegewezen aan het klembord en kunnen ze worden geplakt met CTRL-V.

De details lijken enigszins configuratie- en systeemafhankelijk te zijn, dus je kilometerstand zal zeker variëren. Het zou je echter zeker in de goede richting moeten wijzen.

Zie ook

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


Antwoord 5, autoriteit 5%

Voor mij werkt die configuratie voor kopiëren en plakken

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

Antwoord 6, autoriteit 4%

Dit zijn de regels die je voor dit doel in je vimrc nodig hebt:

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

Antwoord 7, autoriteit 2%

klembord

Er is een speciaal register om deze selectie op te slaan, het is de “*
register. Er wordt hier niets ingevoerd, tenzij de informatie over wat tekst is
geselecteerde staat op het punt te veranderen (bijvoorbeeld met een linkermuisklik ergens), of wanneer
een andere toepassing wil de geselecteerde tekst plakken. Dan wordt de tekst gezet
in het “* register. Om bijvoorbeeld een lijn te knippen en deze de huidige te maken
selectie/zet het op het KLEMBORD:

   "*dd

Op dezelfde manier, wanneer u een selectie uit een andere toepassing wilt plakken, bijv.
door op de middelste muisknop te klikken, wordt de selectie in het “* register” gezet
eerst, en dan ‘put’ zoals elk ander register. Om bijvoorbeeld de
selectie (inhoud van het KLEMBORD):

   "*p

registreertE354

> 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 "/

Plakken van klembord

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

Controleer op X11-klembordondersteuning in terminal

Als je Vim in een terminal wilt draaien, moet je zoeken naar een versie van Vim die is gecompileerd met klembordondersteuning.
Controleer op ondersteuning voor X11-klembord, typ vanaf de console:

% vim --version

Als je “+xterm_clipboard” ziet, ben je klaar om te gaan.

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

De X-server onderhoudt drie selecties, genaamd:

PRIMAIR, SECUNDAIRE en KLEMBORD

De PRIMARY-selectie wordt gewoonlijk gebruikt om kopiëren en
plakken via de middelste muisknop. Het SECUNDAIRE en KLEMBORD
selecties worden minder vaak gebruikt door applicatieprogramma’s.

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


Antwoord 8

Ik had geen +klembord, dus bedacht ik deze alternatieve oplossing met xsel:

Voeg toe aan je ~/.vimrc:

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


Antwoord 9

Ik heb de bovenstaande suggesties geprobeerd en geen enkele werkte in mijn omgeving. (Windows PuTTY-kloon over ssh)

Enig extra googlen kwam naar voren:
https://unix.stackexchange.com/questions/ 110684/copy-paste-into-sshd-vim-from-local-windows-clipboard

Een van de opmerkingen stelde voor om SHIFT+INSERTte gebruiken, wat de truc deed om van het klembord van mijn bureaublad in de buffer van Vim te plakken. Ctrl-Cwas al bezig om vanuit Vim naar het klembord van het bureaublad te kopiëren.


Antwoord 10

Kopiëren naar OS-klembord

Selecteer tekst in visuele modus, druk op "*y

Plakken van OS-klembord

Druk op "*p


Antwoord 11

Een korte opmerking voor mensen wiens vim-installatie de * en + registers niet ondersteunt. Het is niet nodig om een nieuwe vim-installatie te downloaden om vanaf het klembord te plakken. Hier is een alternatieve methode:

1) Installeer parcellite (een klembordmanager met weinig geheugen);

2) Voeg in uw .vimrc-bestand het volgende toe:

command Clip r !parcellite -c

3) Start vim opnieuw.

Als je nu :Clip typt als een ex-commando, wordt de inhoud van het klembord bij de cursor geplakt. U kunt het nieuwe commando ook toewijzen aan een functietoets om dit met één toetsaanslag te kunnen doen.


Antwoord 12

De eenvoudigste oplossing hiervoor, die ook tussen verschillende Linux-machines werkt via sshis:

  1. Controleer of vim X-11 klembord ondersteunt: vim --version | grep clipboard. Als het -clipboarden -xterm_clipboardmeldt, moet je vim-gtkof vim-gnome(gvim op arch linux)

  2. Voeg de volgende regels toe aan uw .vimrc:

set clipboard=unnamedplus
set paste
  1. Als je inlogt op een andere machine via ssh, gebruik dan de optie -Y: ssh -Y machine

Het kopiëren en plakken zou nu precies moeten werken zoals verwacht op één en op verschillende machines door alleen yte gebruiken voor yank en pvoor plakken. NB wijzig .vimrcop alle machines waarop u deze functie wilt gebruiken.


Antwoord 13

Dit werkt voor mij: Ctrl+Shift+V


Antwoord 14

Als je een muis gebruikt, doe dan eerst

:set paste 

Vervolgens right click mouseen de inhoud in de buffer wordt geplakt


Antwoord 15

Ik kwam dit probleem tegen op een Macbook Pro uit medio 2017 met vimbinnen iTerm2als mijn primaire ontwikkelomgeving.

Zoals andere antwoorden hebben gesuggereerd, heb ik vim --versionuitgevoerd en merkte op dat het -clipboardretourneerde, wat betekent dat de versie van vimdie bij mijn machine is geleverd, is niet gecompileerd met de klembordoptie.

Het homebrew-pakket voor vimlijkt te compileren met de optie clipboard, dus de oplossing voor mij was om:

  1. Voer brew install vim
  2. uit

  3. Voeg set clipboard+=unnamedtoe aan mijn ~/.vimrc-bestand
  4. Sluit en heropen iTerm2

Antwoord 16

Als vervolg op het antwoord van Conner, wat geweldig was, maar C-r C-p +en C-R C-p *in de invoegmodus is een beetje onhandig. Idem "*pen "+pvanuit de opdrachtmodus.

een VIM-goeroe stelde het volgende voor om C-vtoe te wijzen aan wat C-r C-p +doet.

Je zou :inoremap <C-v> <C-o>"+palleen voor invoegmodus

als je de bloksgewijs visuele modus echt wilt overschrijven (door hem niet aanbevolen als visueel)
modus is goed) zou u map <C-v> "+p


Antwoord 17

Als je vim gebruikt in MAC OSX, wordt het helaas geleverd met een oudere versie en niet in overeenstemming met de klembordopties. Gelukkig kan homebrew dit probleem gemakkelijk oplossen.

installeer vim:

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

gui-versie van vim installeren:

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

start de terminal opnieuw om van kracht te worden.

voeg de volgende regel toe aan ~/.vimrc

set clipboard=unnamed

je kunt nu de regel in vim kopiëren met yyen deze in het hele systeem plakken.


Antwoord 18

Bovenop de instelling :set clipboard=unnamed, moet je mvim -vgebruiken die je kunt krijgen met brew install macvimals je gebruikt vim op Terminal.app op Mac OS X 10.9. Standaard vim ondersteunt geen klembordoptie.


Antwoord 19

De andere oplossingen zijn goed als je je vimrc, enz. wilt wijzigen… Ik wilde echter een eenvoudige manier om vanvim te kopiëren naarmijn systeemtoetsenbord. Dit is wat ik bedacht.

  • Selecteer de tekst die u wilt kopiëren met visuele modus v
  • Druk op :(het wordt automatisch uitgevouwen om :'<,'>weer te geven)
  • Typ y *ofy +(afhankelijk van uw systeem) om de geselecteerde tekst naar het systeemklembord te rukken

Antwoord 20

Sinds vim 8wordt met rechts klikken standaard de visuele modus ingeschakeld. Dit voorkomt het “normale” kopiëren & plakken (noem het een “defect door ontwerp” https://github.com/vim/vim/ problemen/1326).
Los het op door te doen:

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

Verlaat en herstart vim.


Antwoord 21

Met Vim 8+ op Linux of Mac kun je nu eenvoudig de native plak van het besturingssysteem gebruiken (ctrl+shift+Vop Linux, cmd+Vop Mac ). Druk niet op ivoor de invoegmodus.

Het plakt de inhoud van het klembord van uw besturingssysteem, waarbij de spaties en tabbladen behouden blijven zonder automatisch inspringen toe te voegen. Het is gelijk aan de oude :set paste, i, ctrl+shift+V, esc, :set nopastemethode.

Je hoeft niet eens meer de functies +clipboardof +xterm_clipboardvim te installeren. Deze functie wordt “tussen haakjes plakken” genoemd. Zie voor meer informatie Automatisch inspringen uitschakelen wanneer tekst in vim plakken


Antwoord 22

Als je het hebt, probeer dit dan van je vimrc te verwijderen:
set mouse=a

Het knoeit met de plakfunctionaliteit.


Antwoord 23

Het is misschien ook de moeite waard om te vermelden dat je op OSX met Vim tekst kunt selecteren met de muis, Cmd-C om naar het OSX-systeemklembord te kopiëren, en de gekopieerde tekst zal beschikbaar zijn op het klembord buiten Vim.

Met andere woorden, OSX behandelt het alsof het een gewoon venster is, en dit is waar de veel verguisde Apple “Command”-knop van pas komt.

B-30


Antwoord 24

Er zijn twee eenvoudige manieren om dit te doen. Maak uw bestand in de invoegmodus en
1) druk op de middelste knop (het scrollwiel) in uw muis, of
2) Ctrl + Shift + V


Antwoord 25

Op basis van het antwoord van @lis2 gebruik ik een eenvoudigere configuratie die de invoegmodus aan het einde niet forceert:

" 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

Houd er rekening mee dat al deze standaard Vim-toewijzingen overschrijven:

  • v_CTRL-C: stop Visuele modus
  • v_CTRL-X: aftrekken [tel] vanaf nummer
  • v_CTRL-V: bloksgewijs Visuele modus
  • i_CTRL-V: invoegen volgende niet-cijferige letterlijk, die ook is toegewezen aan i_CTRL-Q

Als alternatief kan men toetsen gebruiken die geïnspireerd zijn op de “yank”, “delete” en “put” Vim-werkwoorden: <C-y>, <C-d>en <C-p>respectievelijk. Deze zouden slechts één standaardtoewijzing overschrijven:

  • i_CTRL-P: achteruit zoekwoord voor voltooiing

Antwoord 26

Wat je echt nodig hebt is EasyClip. Het zal precies dat doen en nog veel meer…


Antwoord 27

Wat gewoon voor mij werkte in Linux (Ubuntu 20.04)

  • Kopiëren naar systeemklembord:

    1. Selecteer wat u wilt kopiëren in de visuele modus.
    2. Typ "+y
    3. Druk op Enter
  • Plak iets op het klembord van het systeem:

    1. Ga naar de plaats waar je de gekopieerde tekst in vim wilt plakken.
    2. Typ gewoon "+pom voor de cursor te plakken / "+pom na de cursor te plakken.

Voor meer informatie over hoe dit werkt: Kopieer en plak naar/van Vim van/naar Overige Programma’s!


Antwoord 28

Als ik mijn Debian vim gebruik die niet is geïntegreerd met Gnome (vim –version | grep clip # toont geen klembordondersteuning), kan ik naar het klembord kopiëren nadat ik de Shift-toets ingedrukt heb gehouden en de tekst met de muis heb geselecteerd, gewoon zoals bij elk ander vloekprogramma. Zoals ik uit een opmerking van @Conner begreep, is het de terminal (gnome-terminal in mijn geval) die de rapportage van muisgebeurtenissen uitschakelt wanneer hij mijn Shift-druk detecteert. Ik denk dat op vloeken gebaseerde programma’s muisgebeurtenissen kunnen ontvangen nadat ze een bepaalde Escape-reeks naar de terminal hebben gestuurd.


Antwoord 29

Als je Windows gebruikt en je wilt de inhoud van het systeemklembord plakken met p, typ dan deze opdracht.

:set clipboard = unnamed

Dit heeft mijn probleem opgelost.


Antwoord 30

Voor sommige internationale toetsenborden moet u mogelijk op "+Spacedrukken om een "te krijgen.

Dus in dat geval moet u op "Space+yof "< drukken /kbd>Spatie*yom te kopiëren.

En "Space+pof "Space< /kbd>*pom te plakken.

Other episodes