Există o modalitate de a copia un bloc de text în clipboard-ul sistemului, astfel încât să îl pot lipi într-un alt program?

Comentarii

  • Acest lucru a fost deja întrebat și răspuns la SO. Este posibil să găsiți mai multe informații diferite acolo.
  • Am folosit acest plugin pe macvim christoomey / vim-system-copy și chiar îl ador. Funcționează foarte bine cu mișcări cpip, cpi{.
  • Ceea ce aveți cu adevărat nevoie este EasyClip . Va face exact asta și multe altele …
  • Nu pot adăuga un răspuns, ci un comentariu. Dacă doriți doar să copiați un text, puteți utiliza și sed :). sed -n 5p file; doar a 5-a linie. sed -n -e 5p -e 8p file; doar rândurile 5 și 6. sed -n 5,8p file; linii între 5 și 8. Acesta va imprima liniile din consolă. Puteți copia cu ușurință selectând text.

Răspuns

Pentru X11 (adică Linux și majoritatea celorlalte UNIX ca sisteme) există două clipboard-uri care sunt independente unul de celălalt:

  • PRIMAR – Acesta este copy-on-select și poate fi lipit cu butonul din mijloc al mouse-ului.
  • CLIPBOARD – Acesta este copiat cu (de obicei) ^C și lipit cu ^V (este ca MS Windows).

OS X și Sistemele Windows au un singur clipboard.

Pentru X11 sisteme există, de asemenea, un număr de instrumente care sincronizează aceste clipboard-uri pentru dvs., așa că, dacă acestea par a fi aceleași, este posibil să aveți unul dintre ele rulat.

Vim are două regi speciale tere corespunzătoare acestor clipboard-uri:

  • * utilizează PRIMARY; mnemonic: S tar is S elect (pentru copy-on- s elect)
  • + folosește CLIPBOARD; mnemonic: CTRL PLUS C (pentru tastarea comună)

Pe Windows & OS X nu există nicio diferență între + și *, deoarece aceste sisteme au doar un singur clipboard și ambele registre se referă la același lucru (nu contează pe care îl utilizați).

Puteți utiliza aceste registre ca orice registru. De exemplu, folosind clipboard-ul PRIMAR * cu comenzile y și p:

  • "*yy
  • "*p

Puteți folosi acest lucru ca legături de taste mai convenabile:

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

Dacă doriți să ” automat ” interfața cu sistemul „Clipboardul” în loc să vă referiți la el manual tot timpul, puteți seta variabila clipboard:

  • Setați-l la unnamed pentru a utiliza * (PRIMAR, la selectare)
  • Setați-l la unnamedplus pentru a utiliza + (CLIPBOARD, ^C)

Acum, doar folosind yy, veți merge la clipboard-ul sistemului, în loc de registrul nenumit al lui Vim și p va lipi sistemul „s clipboard.

De asemenea, puteți atribui acestor registre exact ca orice registru cu let:

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

clipboard setarea are mai multe opțiuni (cum ar fi filtre de excludere) dar acestea sunt elementele de bază. Consultați :help "clipboard" pentru povestea completă 😉

gVim

Dacă utilizați gVim, puteți obține un comportament de copiere la selectare atunci când folosind :set guioptions+=a.
Acest lucru este activat în mod implicit pe sistemele X11 (copiază în PRIMAR), dar nu pe MS Windows & OSX (deoarece selectarea oricărui text ar suprascrie clipboardul dvs.).

Nu +clipboard?

Vim necesită +clipboard semnalizator de caracteristici pentru ca oricare dintre acestea să funcționeze; puteți verifica dacă Vim are acest lucru utilizând :echo has("clipboard") din interiorul Vim (dacă ieșirea este 0, este nu prezent, dacă este „s 1, este), sau verificarea rezultatului vim --version pentru +clipboard.

Majoritatea distribuțiilor Linux sunt livrate cu o ” minimă ” Vim în mod implicit, care nu are +clipboard, dar îl puteți instala de obicei:

  • Debian & Ubuntu: Instalați vim-gtk3.
  • Fedora: instalați vim-X11 și rulați vimx în loc de vim ( mai multe informații ).
  • Arch Linux: instalați gvim (aceasta va activa +clipboard și pentru vim normal).

Ați putea, de asemenea, utilizați xclip, xcopy sau xsel pentru a copia textul în clipboard; consultați următoarele întrebări pentru soluții:

SSH

Puteți utiliza și un clipboard pe mașini la distanță dacă activați redirecționarea X11 prin SSH. Acest lucru este util mai ales cu sfatul de mai sus, deoarece puteți utiliza apoi xclip pentru a accesa clipboard-ul desktop-ului dvs. Vim-ul de pe aparatul pe care îl selectați va avea în continuare nevoie de +clipboard caracteristică.

Aceasta necesită setarea ForwardX11Trusted și ar trebui să să se facă numai cu servere de încredere , deoarece acest lucru oferă serverului control aproape complet asupra sesiunii dvs. X11:

$ ssh -XY myhost 

Pentru ca aceste setări să persiste (deci nu trebuie să adăugați de fiecare dată -XY), puteți face așa ceva în ~/.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 a renovat suportul pentru clipboard. Interfața încorporată a fost eliminată și înlocuită cu un sistem care apelează un utilitar extern cum ar fi xclip, xsel sau pbcopy / pbpaste.

Ar trebui să fie automat preluați aceste utilități și utilizați-le. Pe OS X pbcopy și pbpaste ar trebui să fie disponibile în mod implicit, pe Linux probabil doriți să instalați xclip, deoarece acesta este cel mai disponibil pe scară largă (există de fapt două versiuni ale xsel cu semnalizatoare incompatibile . Aceasta este chiar prost).

Consultați și :help clipboard în Neovim.

Comentarii

  • ssh -Y implică -X deci -X poate fi omis.
  • Un efect secundar foarte interesant al învățării acestui lucru (câțiva ani acum) pentru mine a fost realizarea că " poate selecta multe registre numite. "+ nu este magic, este s doar înregistrează +. De exemplu, dacă doriți să copiați trei lucruri în același timp și să lipiți fiecare dintre ele unul câte unul, puteți "1y, "2y și "3y și l ater "1p, "2p și "3p. Acest lucru este cu adevărat puternic și inexistent în aproape orice alt editor. O altă utilizare interesantă este să te uiți la macrocomenzile stocate. De exemplu, dacă înregistrați cu qq, dar vă dați seama că trebuie să o remediați, puteți: într-o linie temporară "qp, remediați it și "qd.
  • Doar o notă: OS X are două clipboard-uri separate. Una este accesată folosind Cmd-C și Cmd-V, iar cealaltă utilizând legăturile de taste emacs Ctrl-K și Ctrl-Y.
  • @shahbaz – probabil mai bine să utilizați registrele de litere pentru un astfel de scop, deoarece cele numerotate se modifică de fiecare dată când textul este șters.
  • Copiați & lipiți așa cum este descris în întrebare este destinat desktopului. Este adevărat că instalarea pachetului gvim alături de vim vă oferă funcționalități din clipboard. dar în browserele de fișiere vi se oferă apoi doi editori de text pentru a deschide fișiere! Și asta pare urât. Acesta este motivul pentru care este mai bine să instalați numai pachete vim și vim-gui-common. Mai târziu, unul oferă funcționalitățile din clipboard fără a fi nevoie să instalați gvim. Acesta este pe Linux Debian 10.

Răspuns

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

set clipboard=unnamedplus 

Aceasta schimbă registrul Vim implicit la + register, care este legat de clipboard-ul sistemului.De la :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") 

Comentarii

  • De ce acest lucru nu funcționează pentru mine când smulge & lipiți între instanțele vim (fiecare într-un terminal terminator separat)?
  • Dacă sunteți pe Linux și Vim a fost compilat cu caracteristica + X11 și aveți setul clipboard = unnamedplus, atunci ar trebui să puteți extrage o linie într-o singură instanță de vim și să o lipiți într-o altă instanță de vim. De asemenea, ar trebui să îl puteți lipi în orice altă aplicație cu CTRL + V sau SHIFT + INSERT. Puteți utiliza :version în cadrul Vim pentru a vedea dacă + X11 apare în lista caracteristicilor incluse. De asemenea, puteți verifica dacă funcția ‘ unnamedplus ‘ este disponibilă cu :if has('unnamedplus')⏎ echo 'yes'⏎ endif Dacă sunteți nu pe Linux, atunci ar trebui să utilizați unnamed în loc de unnamedplus.

Răspuns

Celelalte răspunsuri acoperă modul de copiere text din buffer-ul dvs. în clipboard-ul sistemului. O altă operație obișnuită este copierea textului dintr-un alt registru în clipboard. De exemplu, dacă ați „scos deja un text în " (registrul implicit), vă recomandăm să încărcați acel registru în clipboard.

Puteți faceți acest lucru cu :let:

  • let @+=@" — copiază registrul implicit în clipboard
  • let @*=@" — copiază registrul implicit în selecția principală X11 („mouse clipboard „)
  • let @+=@a — copiați din registru a la clipboard-ul
  • etc.

Rețineți că acest lucru funcționează pentru registre în general: let @a=@b copiază registrul b pentru a înregistra a.

Răspuns

Activat versiuni care îl susțin, registrul numit * este clipboard-ul sistemului. Pentru a copia textul din Vim în clipboard-ul sistemului, puteți selectați textul utilizând modul vizual, apoi apăsați "* y pentru a-l copia în clipboard-ul sistemului.

În schimb, utilizați "* p pentru a lipi textul din clipboard-ul sistemului în Vim.

Răspuns

Dacă nu poți afla cum să funcționezi +clipboard, lucru pe care nu l-aș putea „din anumite motive, atunci poți face asta.

Presupunând că doriți doar să copiați o secțiune a fișierului, fac shift + v în modul vizual și evidențiați doar liniile pe care vreau să le copiez. Apoi fac asta.

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

Explicație

  • "<,"> – înseamnă tu a folosit modul vizual pentru a selecta un interval (nu tastați acest lucru)
  • w !{cmd} – scrieți intervalul în stdinul cmd, consultați mai multe la :help w_c
  • wl-copy și xclip sunt programe la care puteți trimite text și le vor adăuga în clipboardul sistemului

De asemenea, odată ce acest lucru este în istoricul dvs., nu trebuie să introduceți totul din nou. Doar selectați cu modul vizual, tastați w apoi apăsați în sus și comanda ar trebui să se completeze automat. De asemenea, nu trebuie să utilizați modul vizual. Puteți seta orice interval doriți.

Comentarii

  • Susținând acest lucru (peste celălalt răspuns similar), deoarece acesta oferă explicații. Apropo, o notă pentru mine sau pentru alți cititori: atunci când utilizați xclip, NU trebuie să adăugați acel parametru -selection clipboard, care este prea mult pentru a tasta. Setarea implicită :'<,'>w !xclip ar copia conținutul în ” primar ” adică copiere-pe- selectați clipboard, care poate fi lipit cu butonul din mijloc al mouse-ului.

Răspuns

Vă recomand să utilizați Gvim, și adăugați acest lucru la .vimrc:

source $VIMRUNTIME/mswin.vim behave mswin 

Acest lucru permite asistență pentru Ctrl C , Ctrl X , Ctrl V ca notepad în Windows.

Rețineți că acest lucru va adăuga și alte comenzi rapide pentru Windows, cum ar fi Ctrl S pentru :w, Ctrl A pentru selectarea tuturor etc.

Răspuns

Cu care mă luptam clipboard-ul sistemului și vim din tmux.

A fost rezolvat folosind xsel sau xclip, ca în acest exemplu:

1.) visu selectați aliat un text bloc în modul normal: V<motionkey>

2.a) cu xsel rulați ex: :"<,">w !xsel -b

2.b) cu xclip rulați ex: :"<,">w !xclip -selection clipboard

3.) lipiți într-un alt program

… și acum nmapează acest lucru după cum se preferă.

Aceste opțiuni (-b sau-clipboard de selecție) înseamnă practic că programul (xsel sau xclip) este trimis în fundal și așteaptă ca un alt program să fie lipiți conținutul, astfel încât să poată „interfera”.

(pe manjaro cu i3, xfce4-terminal, tmux)

Răspuns

Acesta este comportamentul Mi-am dorit când a venit la clipboard-ul sistemului:

  • Extragerea unei linii cu funcția Newline funcționează
  • Extragerea unei linii fără funcționarea liniei noi
  • Extragerea oricărui aspect vizual lucrări selectate
  • Tăiați lucrările
  • Tăierea unei linii cu lucrări newline
  • Tăierea unei linii fără lucrări newline

Prin lucrări Adică: „încă mai pot folosi p pentru a lipi în timp ce sunt în vim și pot folosi și clipboard-ul sistemului. Practic vreau ca copierea și lipirea să funcționeze așa cum era de așteptat și nu am făcut-o” Nu vreau să aglomerez clipboard-ul sistemului mai mult decât este necesar.

Tehnica mea a fost să mapez comenzile obișnuite, tăiate și șterse pentru a utiliza clipboard-ul sistemului adăugând aceste linii la ~/.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 

Prezentarea cheie din https://anuragpeshne.github.io/essays/vim/7.html postarea pe blog este:

Cartografierea recursivă este rea, Folosiți întotdeauna cartarea non recursivă. (noremap)

Comentarii

  • Ce înseamnă " face? Primul răspuns a explicat deja pentru ce este *, (referindu-se la clipboardul principal), dar nu ‘ nu văd nicio explicație oriunde pentru la ce servește " și de ce asta face ca comanda să funcționeze.
  • Nu este

imediat evident pentru că ‘ este probabil folosit pentru ca citatul să fie folosit pentru a înconjura cuvinte, cum ar fi"foo"; totuși, pentru vim"*este, de fapt, numele registrului ” ” (un vim concept) care se conectează la clipboard-ul sistemului. Dacă deschideți vim și tastați:registersputeți vedea numele altor registre precum:"","0,"1și mai departe. Am găsit acest articol util pentru a afla despre registre: brianstorti.com/vim-registers

Răspuns

Dacă vim-ul dvs. nu acceptă +clipboard puteți utiliza fakeclip plugin pentru Linux, Mac, Windows, tmux, ecran, …

Răspuns

Toate celelalte răspunsuri au acoperit toate lucrurile importante despre registre. Aș dori să adaug încă un lucru pe care îl folosesc.

Există o modalitate în Vim de a copia direct selectat vizual text în clipboard. Pur și simplu introduceți acest lucru în fișierul vimrc :

set guioptions+=a 

Și, cu aceasta ori de câte ori selectați vizual un text, acesta va fi copiat în clipboard. Pentru mai multe informații despre acest lucru, :help guioptions

BTW, aceasta este doar pentru gVim.

Comentarii

  • guioptions+=a este menționat și în răspunsul Carpetsmoker ‘.
  • @muru Da, îmi pare rău . ‘ nu am văzut asta înainte. Tocmai l-am văzut.

Răspuns

De asemenea, puteți utiliza o comandă globală pentru a pune un anumit model pe clipboard. Poate fi util în situațiile în care aveți informații împrăștiate într-un fișier și copierea manuală este predispusă la erori și obositoare.

Mai întâi curățați registrul care va primi informațiile

:let @a="" 

Apoi copiați toate liniile care conțin modelul pe acesta

:g/pattern/yank A 

În cele din urmă transferați (copiați) informațiile în clipboard-ul sistemului

:let @+=@a 

dacă încercați să copiați fiecare linie care conține un „model” direct în clipboard, nu va funcționa, deoarece clipboard-ul nu are capacitatea de a adăuga un nou conținut, astfel folosim aici un registru vim normal pentru a stoca toate liniile care conțin modelul simultan și apoi pentru a-l pune în clipboard.

OBS: Este necesar să clinați registrul înainte de a-l utiliza și utilizarea versiunii cu majuscule a registrului ne permite să adăugăm conținut, altfel nu va funcționa.

Răspuns

MacVim Cmd + x/c/v pentru tăiere / copiere / lipire

Dacă utilizați MacVim, Cmd+x/c/v obișnuit sunt definite în $ VIMRUNTIME / macmap.vim care este obținut în mod implicit și, prin urmare, este disponibil fără configurare:

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

Cu toate acestea, utilizarea acestora poate duce la utilizatorul vim care nu cunoaște vim și se pierd pe un computer / mediu străin.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *