Is er een manier om een blok tekst naar het systeemklembord te kopiëren, zodat ik het in een ander programma kan plakken?

Opmerkingen

  • Dit is al gevraagd en beantwoord op SO. Mogelijk vindt u daar meer en andere informatie.
  • Ik gebruik deze plug-in op macvim christoomey / vim-system-copy en vind het geweldig. Het werkt heel goed met bewegingen cpip, cpi{.
  • Wat je echt nodig hebt is EasyClip . Het zal precies dat doen en nog veel meer …
  • Ik kan alleen een opmerking toevoegen. Als u alleen een tekst wilt kopiëren, kunt u ook sed 🙂 gebruiken. sed -n 5p file; alleen 5e regel. sed -n -e 5p -e 8p file; alleen 5e en 6e regel. sed -n 5,8p file; lijnen tussen de 5e en 8e. Het zal de regels in de console afdrukken. U kunt gemakkelijk kopiëren door tekst te selecteren.

Antwoord

Voor X11 -gebaseerde systemen (bijv. Linux en de meeste andere UNIX -achtige systemen) zijn er twee klemborden die onafhankelijk van elkaar zijn:

  • PRIMAIR – Dit is copy-on-select, en kan met de middelste muisknop worden geplakt.
  • KLEMBORD – Dit wordt gekopieerd met (meestal) ^C, en geplakt met ^V (het lijkt op MS Windows).

OS X en Windows systemen hebben maar één klembord.

Voor X11 systemen zijn er ook een aantal tools die deze klemborden voor je synchroniseren; dus als ze hetzelfde lijken te zijn, heb je er misschien een actief.

Vim heeft twee speciale regis ters die overeenkomen met deze klemborden:

  • * gebruikt PRIMAIR; geheugensteun: S tar is S elect (voor copy-on- s elect)
  • + gebruikt CLIPBOARD; ezelsbruggetje: CTRL PLUS C (voor de algemene keybind)

Op Windows & OS X er is geen verschil tussen + en *, aangezien deze systemen maar één klembord, en beide registers verwijzen naar hetzelfde (het maakt niet uit welke je gebruikt).

Je kunt deze registers als elk register gebruiken. Gebruik bijvoorbeeld het PRIMAIRE klembord * met de y en p commandos:

  • "*yy
  • "*p

Je zou dit misschien kunnen gebruiken als handigere keybinds:

noremap <Leader>y "*y noremap <Leader>p "*p noremap <Leader>Y "+y noremap <Leader>P "+p 

Als u ” automatisch ” wilt koppelen met het systeem “s klembord in plaats van er altijd handmatig naar te verwijzen, kunt u de clipboard variabele instellen:

  • Stel het in op unnamed om * (PRIMAIR, bij selectie) te gebruiken
  • Zet het op unnamedplus om + (KLEMBORD, ^C) te gebruiken

Als je nu yy gebruikt, ga je naar het klembord van het systeem in plaats van het naamloze register van Vim, en p plakt het systeem “s klembord.

U kunt ook aan deze registers toewijzen, net als elk register met let:

  • :let @+=42
  • :let @*=42

De clipboard setting heeft wat meer opties (zoals filters uitsluiten); maar dit zijn de basisprincipes. Zie :help "clipboard" voor het volledige verhaal 😉

gVim

Als je gVim gebruikt, kun je kopieer-bij-selectie-gedrag krijgen als met :set guioptions+=a.
Dit is standaard ingeschakeld op X11-systemen (kopieën naar PRIMAIR), maar niet op MS Windows & OSX (aangezien het selecteren van elke tekst uw klembord zou overschrijven).

Nee +clipboard?

Vim vereist de +clipboard feature vlag om dit te laten werken; je kunt controleren of je Vim dit heeft door :echo has("clipboard") te gebruiken vanuit Vim (als de uitvoer 0 is, “s niet aanwezig, als het “s 1 is, is het), of controleert de uitvoer van vim --version voor +clipboard.

De meeste Linux-distributies worden geleverd met een ” minimale ” Vim-build standaard, die geen +clipboard, maar u kunt het meestal installeren:

  • Debian & Ubuntu: installeer vim-gtk3.
  • Fedora: installeer vim-X11, en voer vimx uit in plaats van vim ( meer info ).
  • Arch Linux: installeer gvim (dit zal +clipboard ook inschakelen voor normale vim).

Je zou ook gebruik xclip, xcopy of xsel om tekst naar het klembord te kopiëren; zie het volgende vragen voor oplossingen:

SSH

Je kunt ook een klembord gebruiken op externe machines als je X11-doorsturen via SSH inschakelt. Dit is vooral handig met de bovenstaande tip, omdat je dan xclip kunt gebruiken om toegang te krijgen tot het klembord van je bureaublad. De Vim op de machine waarnaar je wilt verzenden, heeft nog steeds de +clipboard feature.

Dit vereist de ForwardX11Trusted instelling, en zou alleen gedaan worden met vertrouwde servers , aangezien dit de server bijna volledige controle geeft over je X11-sessie:

$ ssh -XY myhost 

Om deze instellingen blijvend te maken (dus je hoeft niet elke keer -XY toe te voegen), zou je zoiets kunnen doen in je ~/.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 heeft de ondersteuning voor het klembord vernieuwd. De ingebouwde interface is verwijderd en vervangen door een systeem dat een extern hulpprogramma zoals xclip, xsel of pbcopy / pbpaste.

Het zou autom Pak deze hulpprogrammas atisch op en gebruik ze. Op OS X zouden pbcopy en pbpaste standaard beschikbaar moeten zijn, onder Linux wil je waarschijnlijk xclip, aangezien dat de meest algemeen beschikbare is (er zijn eigenlijk twee versies van xsel met incompatibele vlaggen . is echt stom).

Zie ook :help clipboard in Neovim.

Reacties

  • ssh -Y impliceert -X zodat -X kan worden weggelaten.
  • Een zeer interessant neveneffect van het leren hiervan (een paar jaar ago) voor mij was het besef dat " veel benoemde registers kan selecteren. "+ is geen magie, het is ‘ s registreer gewoon +. Dus als u bijvoorbeeld drie dingen tegelijk wilt kopiëren en ze een voor een wilt plakken, kunt u "1y, "2y en "3y en l ater "1p, "2p en "3p. Dit is echt krachtig en bestaat niet in bijna elke andere editor. Een ander interessant gebruik is om naar opgeslagen macros te kijken. Als u bijvoorbeeld opneemt met qq, maar u realiseert zich dat u dit moet corrigeren, kunt u: in een tijdelijke regel "qp repareren it, en "qd.
  • Gewoon een opmerking: OS X heeft twee aparte klemborden. De ene is toegankelijk met Cmd-C en Cmd-V en de andere met de emacs-sneltoetsen Ctrl-K en Ctrl-Y.
  • @shahbaz – waarschijnlijk beter om de letterregisters voor een dergelijk doel te gebruiken, aangezien de genummerde worden gewijzigd telkens wanneer tekst wordt verwijderd.
  • Kopieer & plak zoals beschreven in de vraag is bedoeld voor desktop. Het is waar dat het installeren van pakket gvim naast vim je klembordfuncties geeft. maar in bestandsbrowsers krijgt u dan twee teksteditors aangeboden om bestanden te openen! En dit ziet er lelijk uit. Daarom is het beter om alleen de pakketten vim en vim-gui-common te installeren. Later biedt men de klembordfunctionaliteit zonder de noodzaak om gvim te installeren. Dit is op Linux Debian 10.

Antwoord

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

set clipboard=unnamedplus 

Dit verandert het standaard Vim-register in het + register, dat is gekoppeld aan het systeemklembord.Van :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") 

opmerkingen

  • Waarom werkt dit niet voor mij als yank & plakken tussen vim instanties (elk in een aparte terminator terminal)?
  • Als je Linux gebruikt, en Vim is gecompileerd met de + X11-functie, en je hebt clipboard = unnamedplus ingesteld, dan zou je in staat moeten zijn om een regel in het ene exemplaar van vim te trekken en het in een ander exemplaar te plakken van vim. Je zou het ook in een andere applicatie moeten kunnen plakken met CTRL + V of SHIFT + INSERT. Je kunt :version binnen Vim gebruiken om te zien of + X11 verschijnt in de lijst met inbegrepen functies. U kunt ook controleren of de functie ‘ unnamedplus ‘ beschikbaar is met :if has('unnamedplus')⏎ echo 'yes'⏎ endif Als u dat bent niet op Linux, dan zou je unnamed in plaats van unnamedplus moeten gebruiken.

Answer

De andere antwoorden behandelen hoe te kopiëren tekst uit uw buffer naar het systeemklembord. Een andere veel voorkomende bewerking is om tekst van een ander register naar het klembord te kopiëren. Als u bijvoorbeeld “al wat tekst in " (het standaardregister) hebt getrokken, wilt u dat register misschien op het klembord laden.

U kunt doe dit met :let:

  • let @+=@" — kopieert het standaardregister naar het klembord
  • let @*=@" — kopieert het standaardregister naar de X11 primaire selectie (“mouse clipboard “)
  • let @+=@a — kopieer uit register a naar het klembord
  • etc.

Merk op dat dit werkt voor registers in het algemeen: let @a=@b kopieert register b om a te registreren.

Antwoord

Aan bouwt die het ondersteunen, is het register met de naam * het systeemklembord. Om tekst van Vim naar het systeemklembord te kopiëren, kunt u selecteer de tekst in visuele modus en druk vervolgens op "* y om deze naar het systeemklembord te kopiëren.

Omgekeerd, gebruik "* p om tekst van het systeemklembord in Vim te plakken.

Antwoord

Als je “niet kunt achterhalen hoe je +clipboard aan het werk kunt krijgen, wat ik om de een of andere reden niet kon, dan kun je het doen dit.

Ervan uitgaande dat u slechts een gedeelte van het bestand wilt kopiëren, moet ik shift + v gaan in visuele modus en markeer alleen de regels die ik wil kopiëren. Dan doe ik dit.

# Linux Wayland :"<,">w !wl-copy # Linux Xorg :"<,">w !xclip -selection clipboard 

Uitleg

  • "<,"> – betekent dat jij gebruikte visuele modus om een bereik te selecteren (je typt dit niet)
  • w !{cmd} – schrijf het bereik naar de standaard van cmd, zie meer op :help w_c
  • wl-copy en xclip zijn programmas waar je tekst naar toe kunt sturen en ze zullen het aan je systeemklembord toevoegen

Ook, als dit eenmaal in je geschiedenis staat, hoef je niet het hele ding te typen Selecteer gewoon met de visuele modus, typ w en druk op omhoog en de opdracht zou automatisch moeten worden aangevuld. Ook hoef je de visuele modus niet te gebruiken. Je kunt elk bereik instellen dat je wilt.

Opmerkingen

  • Dit omhoog stemmen (boven het andere vergelijkbare antwoord) omdat deze uitleg geeft. Trouwens, een opmerking voor mezelf of andere lezers: als je xclip gebruikt, hoef je die -selection clipboard parameter NIET toe te voegen, namelijk te lang om te typen. De standaard :'<,'>w !xclip kopieert de inhoud naar de ” primaire ” dwz copy-on- selecteer klembord, dat kan worden geplakt met de middelste muisknop.

Answer

Ik raad je aan om Gvim te gebruiken, en voeg dit toe aan uw .vimrc:

source $VIMRUNTIME/mswin.vim behave mswin 

Dit maakt ondersteuning mogelijk voor Ctrl C , Ctrl X , Ctrl V zoals kladblok in Windows.

Merk op dat dit ook enkele andere veelgebruikte Windows-snelkoppelingen zal toevoegen, zoals Ctrl S voor :w, Ctrl A voor alles selecteren, etc.

Answer

Ik worstelde met het systeemklembord en vim binnen tmux.

Het is opgelost door xsel of xclip, zoals in dit voorbeeld:

1.) visu selecteer een bloktekst in de normale modus: V<motionkey>

2.a) met xsel voer ex: :"<,">w !xsel -b

2.b) met xclip voer ex: :"<,">w !xclip -selection clipboard

3.) plak in een ander programma

… en geef dit nu de voorkeur.

Deze opties (-b of -selectie klembord) betekenen in feite dat het programma (xsel of xclip) naar de achtergrond wordt gestuurd en wacht tot een ander programma plak de inhoud, zodat deze kan “interfereren”.

(op manjaro met i3, xfce4-terminal, tmux)

Antwoord

Dit is het gedrag Ik wilde als het op het systeemklembord aankwam:

  • Een regel rukken met nieuwe regel werkt
  • Een regel rukken zonder nieuwe regel werkt
  • Wat visueel ook is geselecteerde werken
  • Werken knippen
  • Een lijn knippen met nieuwe lijnwerken
  • Een lijn knippen zonder nieuwe lijnwerken

Door werken Ik bedoel: ik “kan nog steeds p gebruiken om in vim te plakken en ik kan ook het systeemklembord gebruiken. In principe wil ik dat kopiëren en plakken werkt zoals verwacht en dat deed ik niet” Ik wil mijn systeemklembord niet meer dan nodig vol maken.

Mijn techniek was om de gebruikelijke opdrachten voor rukken, knippen en verwijderen in kaart te brengen om het systeemklembord te gebruiken door deze regels toe te voegen aan mijn ~/.vimrc:

" 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 

Het belangrijkste inzicht van de https://anuragpeshne.github.io/essays/vim/7.html blogpost is:

Recursieve mapping is slecht, gebruik altijd niet-recursieve mapping. (noremap)

Reacties

  • Wat doet de " doen? Het eerste antwoord legde al uit waar * voor is (verwijzend naar het primaire klembord), maar ik zie ‘ nergens enige uitleg voor waar " voor is en waarom dat het commando laat werken.
  • Het ‘ is niet meteen duidelijk omdat je ‘ wordt waarschijnlijk gebruikt om het citaat te gebruiken om woorden te doorlopen, zoals "foo"; echter, voor vim "* is eigenlijk de naam van het ” register ” (a vim concept) dat verbinding maakt met het systeemklembord. Als je vim opent en :registers typt, kun je de namen van andere registers zien, zoals: "", "0, "1, enzovoort. Ik vond dit artikel nuttig om meer te weten te komen over registers: brianstorti.com/vim-registers

Antwoord

Als uw vim +clipboard niet ondersteunt, kunt u de fakeclip plug-in voor Linux, Mac, Windows, tmux, scherm, …

Antwoord

Elk ander antwoord heeft betrekking op alle belangrijke dingen over de registers. Ik zou nog een ding willen toevoegen dat ik gebruik.

Er is een manier in Vim om de visueel geselecteerde tekst naar het klembord. Plaats dit gewoon in uw vimrc -bestand:

set guioptions+=a 

En wanneer u visueel een tekst selecteert, wordt het naar uw klembord. Voor meer informatie hierover, :help guioptions

Dit is trouwens alleen voor gVim.

Reacties

  • guioptions+=a wordt ook genoemd in het antwoord van Carpetsmoker ‘.
  • @muru Ja, sorry . Ik heb ‘ niet eerder gezien. Ik heb het net gezien.

Answer

Je kunt ook een globaal commando gebruiken om een specifiek patroon op de klembord. Het kan handig zijn in situaties waarin informatie verspreid is in een bestand en handmatig omgaan met fouten vatbaar is en vermoeiend is.

Maak eerst het register schoon dat de informatie zal ontvangen

:let @a="" 

Kopieer vervolgens alle regels met het patroon ernaar

:g/pattern/yank A 

Eindelijk de informatie overbrengen (kopiëren) naar het systeemklembord

:let @+=@a 

als je elke regel met een “patroon” rechtstreeks naar het klembord probeert te kopiëren, zal het niet werken omdat het klembord niet de mogelijkheid heeft om nieuwe inhoud, dus gebruiken we hier een normaal vim-register om alle regels met het patroon in één keer op te slaan en het vervolgens op het klembord te plaatsen.

OBS: het is noodzakelijk het register te clippen voordat u het gebruikt, en de door gebruik te maken van de HOOFDLETTERS-versie van het register kunnen we inhoud toevoegen, anders werkt het ook niet.

Antwoord

MacVim Cmd + x/c/v voor knippen / kopiëren / plakken

Als u MacVim gebruikt, worden de gebruikelijke Cmd+x/c/v gedefinieerd in $ VIMRUNTIME / macmap.vim die standaard wordt geleverd en daarom beschikbaar is zonder configuratie:

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

Het gebruik ervan kan echter leiden tot een vim-gebruiker die de vim manier en zijn verloren op een buitenlandse computer / omgeving.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *