Voinko kopioida tekstilohkon järjestelmän leikepöydälle, jotta voin liittää sen toiseen ohjelmaan?

Kommentit

  • Tätä on jo kysytty ja vastattu SO: ssä. Sieltä saatat löytää lisää ja erilaista tietoa.
  • Olen käyttänyt tätä laajennusta macvim christoomey / vim-system-copy -sovelluksessa ja rakastan sitä todella. Se toimii todella hyvin liikkeillä cpip, cpi{.
  • Tarvitset todella EasyClip . Se tekee juuri niin ja paljon muuta …
  • En voi lisätä vastausta vaan kommentin. Jos haluat kopioida vain tekstin, voit käyttää myös sed :). sed -n 5p file; vain viides rivi. sed -n -e 5p -e 8p file; vain 5. ja 6. rivi. sed -n 5,8p file; linjat 5. ja 8. välillä. Se tulostaa viivat konsolissa. Voit helposti kopioida valitsemalla tekstin.

Vastaa

Mille X11 -pohjaiset järjestelmät (ts. Linux ja useimmat muut UNIX -tyyppiset järjestelmät) on olemassa kaksi toisistaan riippumatonta leikepöytää:

  • ENSISIJAINEN – Tämä on copy-on-select, ja se voidaan liittää hiiren keskimmäisellä painikkeella.
  • Leikepöytä – tämä kopioidaan (yleensä) ^C ja liitetään ^V kanssa (se muistuttaa MS Windowsia).

OS X ja Windows -järjestelmissä on vain yksi leikepöytä.

X11: lle järjestelmissä on myös useita työkaluja, jotka synkronoivat nämä leikepöydät puolestasi; joten jos ne näyttävät olevan samat, sinulla voi olla yksi niistä käynnissä.

Vimillä on kaksi erityistä rekisteriä näitä leikepöytiä vastaavat tunnukset:

  • * käyttää ENSISIJAISTA; muistitiedosto: S terva on S valitut (copy-on- s valitut)
  • + käyttää leikepöytää; muistitiedosto: CTRL PLUS C (tavalliselle näppäimistölle)

Windows & OS X: ssä + ja * ei ole eroa, koska näillä järjestelmillä on vain yksi leikepöytä ja molemmat rekisterit viittaavat samaan asiaan (sillä ei ole väliä mitä käytät).

Voit käyttää näitä rekistereitä mihin tahansa rekisterinä. Esimerkiksi ENSISIJAINEN leikepöytä * komennoilla y ja p -komennoilla:

  • "*yy
  • "*p

Voisit ehkä käyttää tätä mukavampina näppäinsideinä:

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

Jos haluat ” automaattisesti ” liittyä järjestelmään Leikepöytä sen sijaan, että viittaisi siihen manuaalisesti koko ajan, voit asettaa muuttujan clipboard:

  • Määritä sen arvoon unnamed käyttääksesi * (ENSISIJAINEN, valituissa)
  • Aseta sen arvoon unnamedplus käyttää + (leikepöytä, ^C)

Nyt pelkästään yy -toiminnon käyttäminen siirtyy järjestelmän leikepöydälle Vimin nimeämättömän rekisterin sijaan, ja p liittää järjestelmän ”s leikepöytä.

Voit myös määrittää näihin rekistereihin aivan kuten minkä tahansa rekisterin, jolla on let:

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

clipboard asetuksella on vielä joitain vaihtoehtoja (kuten sulje pois suodattimet); mutta nämä ovat perusasiat. Katso koko tarina kohdasta :help "clipboard" 😉

gVim

Jos käytät gVim-ohjelmaa, saat käytönaikaisen kopioinnin käyttäytymistä, kun käyttämällä :set guioptions+=a.
Tämä on oletusarvoisesti käytössä X11-järjestelmissä (kopioi ENSISIJAISEKSI), mutta ei MS Windowsissa & OSX (koska minkä tahansa tekstin valitseminen ohittaa leikepöydän).

Ei +clipboard?

Vim vaatii +clipboard ominaisuuslippu, että mikä tahansa näistä toimii; voit tarkistaa, onko Vimilläsi tämä, käyttämällä :echo has("clipboard") -sovellusta Vimissä (jos lähtö on 0, se ”s ei läsnä, jos se on ”s 1, se on), tai tarkista vim --version -viestin tulos +clipboard.

Useimmissa Linux-jakeluissa on ” minimaalinen ” Vim-koontiversio oletusarvoisesti, jolla ei ole +clipboard, mutta voit yleensä asentaa sen:

  • Debian & Ubuntu: Asenna vim-gtk3.
  • Fedora: asenna vim-X11 ja suorita vimx vim ( lisätietoja ).
  • Arch Linux: asenna gvim (tämä sallii +clipboard myös normaalille vim).

Voit myös käytä xclip, xcopy tai xsel kopioidaksesi tekstiä leikepöydälle; katso seuraava ratkaisukysymykset:

SSH

Voit käyttää leikepöytää myös etäkoneissa, jos otat X11-edelleenlähetyksen käyttöön SSH: n kautta. Tämä on erityisen hyödyllistä yllä olevan vihjeen kohdalla, koska voit sitten käyttää xclip käyttääksesi työpöydän leikepöytää. Vim koneessa, johon olet lähettämässä, tarvitsee silti +clipboard -ominaisuus.

Tämä edellyttää ForwardX11Trusted -asetusta, ja sen pitäisi olla tehdään vain luotettujen palvelimien kanssa , koska tämä antaa palvelimelle melkein täydellisen hallinnan X11-istunnossasi:

$ ssh -XY myhost 

Jotta nämä asetukset pysyisivät jatkuvasti (joten sinun ei tarvitse lisätä -XY joka kerta), voit tehdä jotain tällaista kohdassa ~/.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 uudisti leikepöydän tuen. Sisäinen käyttöliittymä poistettiin ja korvattiin järjestelmällä, joka kutsuu ulkoinen apuohjelma, kuten xclip, xsel tai pbcopy / pbpaste.

Sen pitäisi olla automaattinen noudata näitä apuohjelmia ja käytä niitä. OS X: ssä pbcopy ja pbpaste pitäisi olla oletusarvoisesti käytettävissä, Linuxissa haluat todennäköisesti asentaa xclip, koska se on yleisimmin saatavana (xsel -sarjasta on kaksi versiota, joissa on yhteensopimattomat liput . on todella tyhmä).

Katso myös :help clipboard Neovimissa.

Kommentit

  • ssh -Y merkitsee -X joten -X voidaan jättää pois.
  • Erittäin mielenkiintoinen sivuvaikutus tämän oppimisessa (muutama vuosi sitten) on ollut minulle oivallus, että " voi valita useita nimettyjä rekistereitä. "+ ei ole taikuutta, se ’ s vain rekisteröi +. Joten jos esimerkiksi haluat kopioida kolme asiaa samanaikaisesti ja liittää ne yksi kerrallaan, voit "1y, "2y ja "3y ja l ater "1p, "2p ja "3p. Tämä on todella tehokasta ja olematonta melkein missään muussa editorissa. Toinen mielenkiintoinen käyttö on tarkastella tallennettuja makroja. Esimerkiksi, jos nauhoitat tiedostolla qq, mutta huomaat, että se on korjattava, voit: väliaikaisella rivillä "qp korjata se ja "qd.
  • Vain huomautus: OS X: ssä on kaksi erillistä leikepöytää. Toiseen pääsee Cmd-C: llä ja Cmd-V: llä ja toiseen käyttämällä emacs-näppäinsidoksia Ctrl-K ja Ctrl-Y.
  • @shahbaz – luultavasti parempi käyttää kirjainrekistereitä tähän tarkoitukseen, koska numeroidut muuttuvat aina, kun teksti poistetaan.
  • Kopioi & liitä kysymyksessä kuvatulla tavalla työpöydälle. On totta, että paketin gvim asentaminen vim -rivin viereen antaa sinulle leikepöydän toiminnot. mutta tiedostoselaimissa sinulle tarjotaan kaksi tekstieditoria tiedostojen avaamiseen! Ja tämä näyttää rumalta. Siksi on parempi asentaa vain paketit vim ja vim-gui-common. Myöhemmin yksi tarjoaa leikepöydän toiminnot tarvitsematta asentaa gvim. Tämä on Linux Debian 10: ssä.

Vastaa

Lähettäjä http://vim.wikia.com/wiki/Accessing_the_system_clipboard

set clipboard=unnamedplus 

Tämä muuttaa oletusarvoisen Vim-rekisterin + -rekisteri, joka on linkitetty järjestelmän leikepöydälle.Alkaen :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") 

kommentteja

  • Miksi tämä ei toimi minulle, kun yank & liitä vim-instanssien väliin (kukin erillisessä päätelaitteessa)?
  • Jos käytät Linuxia ja Vim on käännetty + X11 -ominaisuudella ja sinulla on leikepöytä = unnamedplus, sinun pitäisi pystyä jenkki rivillä yhdessä VIM-ilmentymässä ja liittämään se toiseen esiintymään vim. Sinun pitäisi myös pystyä liittämään se mihin tahansa muuhun sovellukseen CTRL + V tai SHIFT + INSERT. Voit käyttää :version -sovellusta Vimissä nähdäksesi, onko + X11 mukana olevien ominaisuuksien luettelossa. Voit myös tarkistaa, onko ’ unnamedplus ’ -ominaisuus käytettävissä

-toiminnolla. ei Linuxissa, sinun tulisi käyttää nimeämätöntä plussin sijaan.

Vastaa

Muut vastaukset koskevat kopiointia teksti puskurista järjestelmän leikepöydälle. Toinen yleinen toiminto on tekstin kopioiminen toisesta rekisteröinnistä leikepöydälle. Esimerkiksi, jos olet jo jännyt jonkin verran tekstiä " (oletusrekisteri), haluat ehkä ladata kyseisen rekisterin leikepöydälle.

Voit tee tämä valitsemalla :let:

  • let @+=@" — kopioi oletusrekisterin leikepöydälle
  • let @*=@" — kopioi oletusrekisterin ensisijaiseen X11-valintaan (”hiiri leikepöytä ”)
  • let @+=@a — kopio rekisteristä a leikepöytä
  • jne.

Huomaa, että tämä toimii yleensä rekistereissä: let @a=@b kopioi rekisterin b rekisteröidäksesi a.

Vastaa

Käytössä rakennuksia, jotka tukevat sitä, rekisteri nimeltä * on järjestelmän leikepöytä. Jos haluat kopioida tekstiä Vimistä järjestelmän leikepöydälle, voit valitse teksti visuaalisessa tilassa ja kopioi se sitten leikepöydälle painamalla "* y .

Käänteisesti, käytä "* p -toimintoa liittääksesi tekstiä järjestelmän leikepöydältä Vimiin.

Vastaa

Jos et pysty selvittämään, kuinka saada +clipboard toimimaan, enkä voinut jostain syystä, niin voit tehdä tämä.

Olettaen, että haluat kopioida vain osan tiedostosta, menen shift + v. visuaaliseen tilaan ja korosta vain kopioitavat rivit. Sitten teen tämän.

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

Selitys

  • "<,"> – tarkoittaa sinua käytti alueen visuaalista tilaa (et kirjoita tätä)
  • w !{cmd} – kirjoita alue cmd, katso lisää osoitteista :help w_c
  • wl-copy ja xclip ovat ohjelmia, joihin voit lähettää tekstiä, ja ne ”lisäävät ne järjestelmän leikepöydälle

Kun tämä on historiasi, sinun ei tarvitse kirjoittaa koko asiaa uudelleen. Valitse vain visuaalisen tilan avulla, kirjoita w ja paina sitten ylöspäin, ja komennon tulisi suorittaa automaattinen täydennys. Myöskään sinun ei tarvitse käyttää visuaalista tilaa. Voit asettaa haluamasi alueen.

Kommentit

  • Äänestät tätä (toisen vastaavan vastauksen yli), koska tämä antaa selityksen. Muuten, huomautus itselleni tai muille lukijoille: kun käytät xclip, sinun ei tarvitse lisätä sitä -selection clipboard -parametria, joka on liian kova kirjoittamaan. Oletus :'<,'>w !xclip kopioi sisällön ” ensisijaiseen ” eli kopioi edelleen valitse leikepöytä, joka voidaan liittää hiiren keskimmäisellä painikkeella.

Vastaa

Suosittelen, että käytät Gvimiä, ja lisää tämä .vimrc -kansioon:

source $VIMRUNTIME/mswin.vim behave mswin 

Tämä mahdollistaa Ctrl <: n tuen kbd> C , Ctrl X , Ctrl V kuten muistikirja Windowsissa.

Huomaa, että tämä lisää myös joitain muita yleisiä Windowsin pikakuvakkeita, kuten Ctrl S kohteelle :w, Ctrl A valitaksesi kaikki jne.

Vastaa

Minulla oli vaikeuksia järjestelmän leikepöytä ja vim tmux.

Se on ratkaistu käyttämällä xsel tai xclip, kuten tässä esimerkissä:

1.) koko liittolainen valitsee lohkotekstin normaalitilassa: V<motionkey>

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

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

3.) liitä toiseen ohjelmaan

… ja nyt nmap tämä mieluummin.

Nämä vaihtoehdot (-b tai -selection leikepöytä) tarkoittavat periaatteessa, että ohjelma (xsel tai xclip) lähetetään taustalle ja odottaa toisen ohjelman liitä sisältö niin, että se voi ”häiritä”.

(i3: n, xfce4-päätteen, tmux: n manjarossa)

Vastaa

Tämä on käytös Halusin, kun se tuli järjestelmän leikepöydälle:

  • Rajan kiskominen uudella rivillä toimii
  • Rajan karsiminen ilman uutta riviä toimii
  • Kaikkien visuaalisten jenkkiminen valitut teokset
  • Leikkaa teokset
  • Viivan leikkaaminen uudella rivillä olevilla teoksilla
  • Viivan leikkaaminen ilman uuden rivin teoksia

Teosten mukaan Tarkoitan: Pystyn edelleen käyttämään p -sovellusta liitettäessä vimissä ja voin käyttää myös järjestelmän leikepöydää. Pohjimmiltaan haluan kopioinnin ja liittämisen toimivan odotetusti ja en en halua sekoittaa järjestelmän leikepöytää enemmän kuin tarpeen.

Tekniikani oli kartoittaa tavallinen jenkki, leikata ja poistaa komentoja järjestelmän leikepöydän käyttämiseksi lisäämällä nämä rivit ~/.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 

Avaintiedote https://anuragpeshne.github.io/essays/vim/7.html -blogiviesti on:

Rekursiivinen kartoitus on paha, käytä aina ei-rekursiivista kartoitusta. (noremap)

kommentit

  • Mitä " tehdä? Ensimmäisessä vastauksessa jo selitettiin, mihin * on tarkoitettu (viitaten ensisijaiseen leikepöydälle), mutta en näe ’ mitään selitystä mistään mihin " on tarkoitettu ja miksi se saa komennon toimimaan.
  • Se ’ ei ole heti ilmeinen, koska sinä ’ on todennäköisesti tottunut siihen, että lainausta käytetään kiertämään sanoja, kuten "foo"; vimille "* on tosiasiallisesti ” -rekisterin ” (vim) nimi käsite), joka yhdistetään järjestelmän leikepöydälle. Jos avaat VIM: n ja kirjoitat :registers, näet muiden rekisterien nimet, kuten: "", "0, "1 ja edelleen. Minusta tämä artikkeli oli hyödyllinen rekisterien oppimisessa: brianstorti.com/vim-registers

Vastaus

Jos vim ei tue +clipboard, voit käyttää fakeclip laajennus Linuxille, Macille, Windowsille, tmux, screenille, …

Vastaa

Kaikki muut vastaukset on käsitelty kaikki tärkeät asiat rekistereistä. Haluaisin lisätä vielä yhden käyttämäni asian.

Vimissä on tapa kopioida visuaalisesti valittu teksti leikepöydälle. Laita tämä vain vimrc -tiedostoon:

set guioptions+=a 

Ja tämän kanssa aina, kun valitset visuaalisesti jonkin tekstin, se kopioidaan leikepöydälle. Lisätietoja tästä, :help guioptions

BTW, tämä on vain gVimille.

Kommentit

  • guioptions+=a mainitaan myös Carpetsmokerin ’ vastauksessa.
  • @muru Joo, anteeksi . En nähnyt ’ sitä ennen. Näin juuri sen.

Vastaa

Voit myös käyttää yleistä komentoa laittamaan tiettyä mallia leikepöydälle. Se voi olla hyödyllinen tilanteissa, joissa tiedostoja on hajallaan ja manuaalinen kopiointi on altis virheille ja väsyttävälle.

Puhdista ensin rekisteri, joka vastaanottaa tiedot

:let @a="" 

Kopioi sitten kaikki kuvion sisältävät rivit siihen

:g/pattern/yank A 

Lopuksi siirretään (kopioidaan) tiedot järjestelmän leikepöydälle

:let @+=@a 

jos yrität kopioida kaikki ”kuvio” sisältävät rivit suoraan leikepöydälle, se ei toimi, koska leikepöydälle ei ole mahdollista lisätä uutta sisältöä, joten käytämme tässä normaalia vim-rekisteriä tallentaaksemme kaikki kuvion sisältävät rivit kerralla ja laittaen sen sitten leikepöydälle.

OBS: Rekisteri on puhdistettava ennen sen käyttöä, ja Rekisterin UPPERCASE-version käyttö antaa meille mahdollisuuden lisätä sisältöä, muuten se ei toimi.

Vastaa

MacVim Cmd + x/c/v leikkaa / kopioi / liitä

Jos käytät MacVimiä, tavallinen Cmd+x/c/v määritetään kohdassa $ VIMRUNTIME / macmap.vim , joka on oletusarvoisesti hankittu ja on siten saatavana ilman määrityksiä:

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

Niiden käyttö voi kuitenkin johtaa vim-käyttäjiin, jotka eivät tiedä vim tavalla ja menetetään vieraassa tietokoneessa / ympäristössä.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *