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
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țivimx
în loc devim
( mai multe informații ). - Arch Linux: instalați
gvim
(aceasta va activa+clipboard
și pentruvim
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:
- Definiți comenzi personalizate pentru registrele * și +
- Cum pot copia peste o sesiune ssh fără + clip bord?
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 cuqq
, 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 devim
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 pachetevim
șivim-gui-common
. Mai târziu, unul oferă funcționalitățile din clipboard fără a fi nevoie să instalațigvim
. 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 registrua
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 stdinulcmd
, consultați mai multe la:help w_c
-
wl-copy
șixclip
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:registers
puteț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.
cpip
,cpi{
.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.