Hoe kopieer ik naar het klembord in Vim?

Is het mogelijk om rechtstreeks vanuit Vim naar het klembord te kopiëren? yykopieert alleen dingen naar de interne buffer van Vim. Ik wil kopiëren naar het klembord van het besturingssysteem. Is er een dergelijk commando in Vim of kun je alleen dingen binnen Vim rukken?


Antwoord 1, autoriteit 100%

Het *register zal dit doen. In Windows zijn +en *equivalent. In Unix is er een subtiel verschil tussen +en *:

Onder Windows, de * en + registers
gelijkwaardig zijn. Voor X11-systemen,
ze verschillen echter. Voor X11-systemen,
* is de selectie en + is de knipbuffer (zoals klembord).
http://vim.wikia.com/wiki/Accessing_the_system_clipboard

*is waarschijnlijk wat je meestal wilt, dus ik gebruik *omdat het in beide omgevingen werkt zoals ik verwacht.

In Linux-distributies moet je eerst vim-gtk(ook bekend als gvim) installeren om klembordfunctionaliteit te krijgen. Dit komt omdat niet-gtk vim doorgaans wordt gecompileerd zonder X11-ondersteuning. Dit is om het mogelijk te maken om alleen op console-machines te draaien (vaak servers).

En voor degenen die niet weten hoe ze registers moeten gebruiken bij het trekken of plaatsen, schrijf je gewoon "en vervolgens de naam van het register. Dus om iets naar het klembordregister te kopiëren typ je "*yen typ vervolgens "*p(credit: Kyle Mathews)


Antwoord 2, autoriteit 71%

Op Mac OSX

  • kopieer geselecteerd onderdeel: selecteer visueel tekst (type Vof Vin normaal
    modus) en typ :w !pbcopy

  • kopieer het hele bestand :%w !pbcopy

  • plakken vanaf het klembord :r !pbpaste

Op de meesteLinuxDistro’s kun je het volgende vervangen:

  • pbcopyhierboven met xclip -i -sel cof xsel -i -b
  • pbpastemet xclip -o -sel -cof xsel -o -b
    Opmerking:Als geen van deze tools (xselen xclip) vooraf op je distro zijn geïnstalleerd, kun je ze waarschijnlijk vinden in de repo’s

Antwoord 3, autoriteit 33%

In uw vimrc-bestand kunt u aangeven dat het systeemklembord automatisch moet worden gebruikt voor kopiëren en plakken.

Op Windows ingesteld:

set clipboard=unnamed

Op Linux-set (vim 7.3.74+):

set clipboard=unnamedplus

OPMERKING: je moet mogelijk een up-to-date versie van Vim gebruiken om deze te laten werken.

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


Antwoord 4, autoriteit 25%

Gebruik het register "+om naar het systeemklembord te kopiëren (d.w.z. "+yin plaats van y).

Je kunt ook plakken vanuit "+om tekst van het systeemklembord te krijgen (dwz "+pin plaats van p).

p>


Antwoord 5, autoriteit 15%

@jacob Dalton heeft dit in een reactie vermeld, maar niemand lijkt te hebben vermeld in een antwoord dat VIM moet worden samengesteld met klembordondersteuning voor een van de hier vermelde suggesties. De mijne was niet op die manier op Mac OS X geconfigureerd en ik moest vim opnieuw opbouwen. Gebruik dit de opdracht om erachter te komen of u het hebt of niet vim --version | grep 'clipboard'. +clipboardBetekent dat je goed bent en de suggesties hier zullen voor je werken, terwijl -clipboardbetekent dat je vim moet hercompileren en opnieuw opbouwen.


6, Autoriteit 9%

voor ubuntu – juli 2018

Gebruik het register “+ om naar het systeemklembord te kopiëren (d.w.z. ” + y in plaats van y ).

Op dezelfde manier kunt u plakken van “+ om tekst van het systeemklembord te krijgen (dwz ” + p in plaats van p .

U moet er ook voor zorgen dat VIM is samengesteld met ondersteuning voor het klembord. Probeer:

vim --version | grep .xterm_clipboard -o 

en als het -xterm_clipboard (een minprefix) is, dan doe je niet ondersteuning.

Hier zijn enkele instructies voor het ruilen met een werkversie van VIM die klembordondersteuning heeft.

  • $ SUDO APT-GET PUNGE VIM
  • $ sudo apt-halen autoremove (verwijdert elk
    externe vim-afhankelijkheidspakketten van het systeem)
  • $ sudo apt-get install vim-gnome (of sudo apt-get install vim-gtk3voor nieuwere Ubuntu-versies)

Controleer opnieuw met vim --version | grep .xterm_clipboard -oen u kunt bevestigen dat het klembord nu beschikbaar is (bijv. +xterm_clipboard)

Veel succes.


Antwoord 7, autoriteit 6%

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

installatie gui versie van vim:

brew install macvim

start de terminal opnieuw om van kracht te worden.

voeg de volgende regel toe aan ~/.vimrc

set clipboard=unnamed

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

Bijgewerkte methode:

Ik was jarenlang nooit tevreden met de vaste klembordmethode. Het grootste nadeel is dat het je klembordgeschiedenis zal verknoeien, zelfs als je xgebruikt om te verwijderen. Hier is een betere en elegantere oplossing.

  1. Kopieer de tekst [bereik] van vim naar het klembord van het systeem. (Hint: gebruik Vof Vom eerst het bereik te selecteren en typ vervolgens de dubbele punt :om het Ex-commando te activeren):
    :[line-range]yank +
    bijv.
    :5,10y *(kopieer/trek regels 5-10 naar het *register van het systeemklembord)

  2. Plak de inhoud van het systeemklembord in vim op een nieuwe regel:
    :put +

Opmerking:

  1. Als u een woordbereik selecteert, werkt het bovenstaande niet. Gebruik “* y of ” + y om dit visuele blok op te slaan op het klembord. Dit is echter moeilijk te typen, ik denk nog steeds aan alternatieven.
  2. : Help “* of : Help * + voor meer informatie
  3. brew info vimkan andere opties zien voor het installeren van VIM. Strelend heeft het geen andere opties.

8, Autoriteit 4%

Ik was niet in staat om naar het systeem van mijn klembord te kopiëren omdat ik dit had in mijn ~ / .vimrc-bestand:

if has('mouse')
   set mouse=a
 endif

Maar als u deze regel vervolgens toevoegt, kunt u eenvoudig CTRL + C TO wat je ook hebt geselecteerd in je klembord.

vmap <C-c> "+y

Oorspronkelijke discussie en meer details: kopieer tekst uit van vim met set muis = een ingeschakeld


Antwoord 9, autoriteit 3%

de oplossing voor mij was om extra vim te installeren met de klembordoptie: 

sudo apt-get install vim-gnome

Antwoord 10, autoriteit 3%

Als u GVim gebruikt, kunt u ook set guioptions+=ainstellen. Dit activeert automatisch kopiëren naar het klembord van tekst die u markeert in de visuele modus.
Nadeel: Houd er rekening mee dat geavanceerde klembordmanagers (met geschiedenis) in dit geval al uw selectiegeschiedenis krijgen ...


Antwoord 11, autoriteit 3%

Je kunt de antwoorden hier vinden
Arch Wiki

Voor Linux:
Allereerst moet je Klembord inschakelen in je vim-versie door te installeren
gvim.


Vervolgens moet u deze regel op uw .vimrc-bestand plaatsen.

set clipboard=unnamedplus


12, Autoriteit 2%

Alleen in VIM onder Ubuntu-terminal,

Druk op shift + drag mouseom een ​​tekst in VIM te selecteren, dan ctrl + shift + cop de terminal

Dan ctrl + vop andere editor


13, Autoriteit 2%

Als je vim toevallig zonder +xterm_clipboardoptie wordt gecompileerd, zoals het is standaard in Debian en ik denk dat Ubuntu, je selectie of hele buffer kunt pijpen naar extern programma dat desktopklembord behandelt. Voor xclip(die u mogelijk eerder moet installeren), is de opdracht :w !xclip -sel clip


14, Autoriteit 2%

Als u XClip een eenvoudige manier van kopiëren van tekst naar het klembord hebt, is het als volgt:

  1. Yank-tekst die u wilt kopiëren. (yopdracht in vanille vim)
  2. Type in :call system("xclip -selection clipboard", @")

:call system()Voert een opdracht terminal. Het duurt twee argumenten, de eerste het commando, de tweede wat te pijpen naar die opdracht. Bijvoorbeeld :echom system("head -1", "Hello\nWorld")Retourneert Hallo (met wat vulling). ECHOM retourneert de uitvoer van een opdracht, bel niet.

xclip -selection clipboardKopieert tekst in het systeemklembord, in plaats van het standaard X-klembord, (toegankelijk via de middelste MouE-knop).

@"retourneert de laatste getreeuwde tekst." is het standaardregister, maar u kunt elk register gebruiken. Om de inhoud van alle registers te bekijken, typt u :registers.


15

  1. Zet set clipboard=unnamedin uw .vimrc.
  2. Selecteer wat u wilt kopiëren in VisualMODE (druk op V om in te voeren).
  3. Terug naar NormalMODE (Druk op Escape [ESC]), druk op Y om te kopiëren.
  4. Als u iets van het OS-klembord wilt plakken, drukt u op P / P in VIM NormalMODE.

16

Ik heb hier maanden mee tegen meegemaakt met MacOSX met behulp van toetsenbordsnelkoppelingen.
Ik weet dat de vraag gaat niet over het gebruik van toetsenbordshort. Maar dit kan iemand met dezelfde zorg helpen.

Ik heb aangetroffen dat als je uitdrukt:

Bekijken - & GT; Muisrapportage toestaan ​​

Vanaf Terminal-menu, u kunt naar het klembord kopiëren met

-opdracht + C

opnieuw.


17

Deze vraag heeft al veel antwoorden. Ik voeg mijn manier toe waarvan ik denk dat het snel is.

Snel, u kunt op V(SHIFT + V) op de actieve visuele modus drukken. In de zichtbare modus kunt u jen kgebruiken om de tekst die u wilt kopiëren te selecteren. Gebruik na de selectie

"*y

Nu, geselecteerde tekst wordt gekopieerd naar klembord.


18

Misschien zal iemand het nuttig vinden. Ik wilde onafhankelijk blijven van x klembord en nog steeds in staat zijn om wat tekst tussen twee lopende vim te kopiëren en te plakken. Deze kleine code bewaart de geselecteerde tekst in Temp.txt-bestand voor het kopiëren. Plaats de onderstaande code in uw .vimrc. Gebruik CTRL-C CTRL-V om het werk te doen.

VNOREMAP: W! CP / Dev / NULL ~ / TEMP.TXT & AMP; & AMP; CAT & GT; ~ / temp.txt

NOREMAP: R! CAT ~ / TEMP.TXT


19

Ik ben een vim Newby, maar om alle tekst naar het systeemklembord te kopiëren (bijvoorbeeld als u het wilt plakken op een tekstverwerker of een andere teksteditor zoals Gedit, Mousepad enz ...), in de normale modus:

ggvgy

Of, sneller:

:% y

Zoals voorgesteld, heb ik ook vim-gtkgeïnstalleerd en

set clipboard=unnamedplus

in mijn .vimrc

en alles werkt prima

Als u slechts een deel van de tekst wilt kopiëren, gebruikt u visuele modus (v), selecteert u de tekst die u wilt kopiëren en drukt u op y.

Tot slot raad ik een klembordprogramma aan zoals Clipman (mijn favoriet), Clipit, Parcellite of iets dergelijks.

(Ik gebruik vim 8.0 in Debian Stretch Xfce)

VERGEET MIJN ENGELS! 🙂


Antwoord 20

Als je geen grafische interface voor vim wilt gebruiken en je liever gewoon bij de terminalemulator blijft, is er misschien een veel eenvoudigere aanpak voor dit probleem. In plaats van yank of iets dergelijks te gebruiken, kijk eerst eens naar de documentatie van de terminal die je gebruikt. Ik heb met hetzelfde probleem geworsteld (probeerde +klembord en xclip enzovoort te gebruiken) en uiteindelijk bleek dat het in mijn terminalemulator voldoende is om gewoon op shift te drukken en elke tekst te selecteren die u wilt kopiëren. Dat is het. Heel eenvoudig en geen gedoe met configuratie. (Ik gebruik trouwens urxvt).


Antwoord 21

Ik had een probleem omdat mijn vim klembordniet ondersteunde:

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

Ik heb vim-gnome geïnstalleerd (die klembord ondersteunt) en heb het opnieuw gecontroleerd:

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

Nu kan ik kopiëren en plakken met respectievelijk "+y en "+p.


Antwoord 22

Mijn oplossing was om de volgende regel in .vimrc te plaatsen:

map <C-y> :w !xclip -sel c <CR><CR>

Het script kopieert de geselecteerde regel (via visuele modus) of de bestandsinhoud (als er geen is geselecteerd) naar het klembord met Ctrl + y. Ik gebruik Manjaro Linux als dat belangrijk is.


Antwoord 23

Ik gebruik mac osx (10.15.3) en ben nieuw bij vim. Ik vond dit zo frustrerend en alle antwoorden hier te ingewikkeld en/of niet van toepassing op mijn situatie. Ik heb dit uiteindelijk op 2 manieren werkend gekregen:

  1. sleuteltoewijzing die pbcopy gebruikt: werkt op de oude versie van vim die bij mac wordt geleverd.

    Voeg vmap '' :w !pbcopy<CR><CR>toe aan uw ~/.vimrc

    U kunt nu visueel selecteren en op ''(twee apostrofs) drukken om naar het klembord te kopiëren

  2. Installeer een nieuwere versie van vim zodat ik toegang heb tot de oplossing die het meest wordt aanbevolen in andere antwoorden:

    brew install vim
    alias vim=/usr/local/bin/vim(moet dit toevoegen aan je ~/.bashrc of equivalent)

    U kunt nu visueel selecteren en op "+yydrukken om naar het klembord te kopiëren


Antwoord 24

Ik heb een eenvoudige regel in mijn .vimrc geschreven om het kopiëren werkend te krijgen. Hoop dat dit iemand helpt. Mijn vim is helaas niet geïnstalleerd met ondersteuning voor klembord, dus geen van deze suggesties werkte voor mij. Plak deze regel in uw .vimrc:

map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>

Als je details wilt lezen over wat dit doet, kun je hierover lezen op mijn blog


Antwoord 25

Voor sommige internationale toetsenborden moet u mogelijk op "+ Space drukken om een ​​"te krijgen.

Dus in dat geval zou u moeten op Space Y of "<" < / KBD>RUIMTE * Y


26

Voor OSX, zoals de bovenstaande antwoorden van 10342 hierboven gemaakt, moet u ervoor zorgen dat VIM de klembordfunctie ondersteunt, zei dat de degene die vooraf wordt geleverd met OSX ondersteunt geen klembord, en dat als u dit doet
brew install vimHet zou werken.

behalve dat het uitvoeren van VI u nog steeds de PreshnitMed OSX-versie uitvoert, niet degene die u hebt geïnstalleerd in Brew.

Om hierover te komen, heb ik eenvoudig mijn VIM-opdracht aan de Brew-versie alias, niet de OSX Standaard één:

alias vim="/usr/local/Cellar/vim/8.0.1100_1/bin/vim"

En nu ben ik gouden


27

In mijn instantie selecteren tekst door te markeren (klikken en slepen) met mijn muis veroorzaakte VIM om de visuele modus aan te gaan.

Hoe dan ook op een Mac, de gemakkelijkste oplossing is om fn + mouse click and dragom te voorkomen dat u de visuele modus invoert.

Als u dit gedrag standaard wilt vermijden, kunt u uw VIMRC

bewerken


28

Ik heb veel moeite gehad bij het kopiëren naar klembord. Binnen VIM is het vrij eenvoudig met behulp van visuele modus, maar als je wilt kopiëren naar de klembord zijn dingen behoorlijk verpest. Ik heb een eenvoudige methode om te kopiëren met behulp van Xclip-hulpprogramma. Hiervoor moet u xclip eerst installeren.

Voor het hele bestand is het heel eenvoudig

xclip -sel clip filename

Maar als u alleen een bepaald bereik van lijnnummers wilt kopiëren
tail -n +[n1] filename | head -n [n2] | xclip -sel clip

U kunt gebruik maken van ~ / .bashrc om dit

te vereenvoudigen

#rangecp copy lines from n1 to n2 from a given file to clipboard
function rangecp()
{
    if [ -f $1 ]
    then
        if [ ! -z $3 ]
        then
            diff=$(($3 - $2 + 1))
            #diff=`expr $3 - $2 + 1`
            tail -n +$2  $1 | head -n $diff | xclip -sel clip
        elif [ ! -z $2 ]
        then
            tail -n +$2  $1 | xclip -sel clip
        else
            echo "Provide a range from [n1] lines to [n2] lines"
        fi
    else
        echo "[ $1 ] file doesn't exist"
    fi
}

Dan

source ~/.bashrc
Hoe

te gebruiken

rangecp filename.txt 50 89
rangecp filename.txt 50

Other episodes