Er det en måte å kopiere en tekstblokk til systemutklippstavlen, så jeg kan lime den inn i et annet program?

Kommentarer

  • Dette er allerede blitt spurt og besvart på SO. Du kan finne mer og annen informasjon der.
  • Jeg har brukt dette pluginet på macvim christoomey / vim-system-copy og virkelig elsker det. Det fungerer veldig bra med bevegelser cpip, cpi{.
  • Det du virkelig trenger er EasyClip . Det vil gjøre nettopp det og så mye mer …
  • Jeg kan ikke legge til svar, men en kommentar. Hvis du bare vil kopiere en tekst, kan du også bruke sed :). sed -n 5p file; bare 5. linje. sed -n -e 5p -e 8p file; bare 5. og 6. linje. sed -n 5,8p file; linjene mellom 5. og 8. Det vil skrive ut linjene i konsollen. Du kan enkelt kopiere ved å velge tekst.

Svar

For X11 -baserte systemer (dvs. Linux og de fleste andre UNIX -lignende systemer) det er to utklippstavler som er uavhengige av hverandre:

  • PRIMÆR – Dette er copy-on-select, og kan limes inn med den midterste museknappen.
  • CLIPBOARD – Dette kopieres med (vanligvis) ^C, og limes inn med ^V (Det er som MS Windows).

OS X og Windows -systemer har bare ett utklippstavle.

For X11 systemer, det finnes også mange verktøy som synkroniserer disse utklippstavlene for deg. Hvis de ser ut til å være de samme, kan det hende at ett av dem kjører.

Vim har to spesielle regis ter som tilsvarer disse utklippstavlene:

  • * bruker PRIMARY; mnemonic: S tar er S elect (for copy-on- s elect)
  • + bruker CLIPBOARD; mnemonic: CTRL PLUS C (for den vanlige tastebindingen)

På Windows & OS X er det ingen forskjell mellom + og *, siden disse systemene bare har en enkelt utklippstavlen, og begge registrene refererer til det samme (det spiller ingen rolle hvilken du bruker).

Du kan bruke disse registerene som et hvilket som helst register. For eksempel ved å bruke det PRIMÆRE utklippstavlen * med y og p kommandoene:

  • "*yy
  • "*p

Du kan kanskje bruke dette som mer praktiske nøkkelbind:

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

Hvis du vil » automatisk » grensesnitt med systemet «s utklippstavle i stedet for å referere til det manuelt hele tiden, kan du stille inn clipboard -variabelen:

  • Sett den til unnamed for å bruke * (PRIMÆR, ved valg)
  • Sett den til unnamedplus for å bruke + (CLIPBOARD, ^C)

Bare å bruke yy vil gå til systemets utklippstavle, i stedet for Vims unavngitte register, og p vil lime inn systemet «s utklippstavle.

Du kan også tildele til disse registerene akkurat som ethvert register med let:

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

clipboard innstillingen har noen flere alternativer (for eksempel ekskluder filtre); men dette er det grunnleggende. Se :help "clipboard" for den fulle historien 😉

gVim

Hvis du bruker gVim, kan du få kopi-på-valg-oppførsel når bruker :set guioptions+=a.
Dette er aktivert som standard på X11-systemer (kopier til PRIMARY), men ikke på MS Windows & OSX (som valg av tekst vil overstyre utklippstavlen din).

Nei +clipboard?

Vim krever +clipboard funksjonsflagg for at noe av dette skal fungere; Du kan sjekke om Vim har dette ved å bruke :echo has("clipboard") fra Vim (hvis utgangen er 0, er den «s ikke til stede, hvis det er «s 1, er det), eller sjekker utdataene fra vim --version for +clipboard.

De fleste Linux-distribusjoner leveres med en » minimal » Vim-bygging som standard, som ikke har +clipboard, men du kan vanligvis installere det:

  • Debian & Ubuntu: Installer vim-gtk3.
  • Fedora: installer vim-X11, og kjør vimx i stedet for vim ( mer info ).
  • Arch Linux: installer gvim (dette vil aktivere +clipboard for normal vim også).

Du kan også bruk xclip, xcopy, eller xsel for å kopiere tekst til utklippstavlen; se følgende spørsmål for løsninger:

SSH

Du kan også bruke et utklippstavle på eksterne maskiner hvis du aktiverer X11-videresending over SSH. Dette er spesielt nyttig med ovennevnte tips, siden du deretter kan bruke xclip for å få tilgang til utklippstavlen på skrivebordet. Vim på maskinen du ønsker å bruke vil fortsatt ha +clipboard -funksjon.

Dette krever ForwardX11Trusted innstillingen, og skal bare gjøres med pålitelige servere , da dette gir serveren nesten full kontroll over X11-økten din:

$ ssh -XY myhost 

For å gjøre disse innstillingene vedvarende (slik at du ikke trenger å legge til -XY hver gang), kan du gjøre noe sånt i ~/.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 moderniserte utklippstavlen. Det innebygde grensesnittet ble fjernet og erstattet med et system som kaller et eksternt verktøy som xclip, xsel, eller pbcopy / pbpaste.

Det skal automatisk plukke opp disse verktøyene og bruke dem. På OS X skal pbcopy og pbpaste være tilgjengelig som standard, på Linux vil du sannsynligvis installere xclip, da det er den mest tilgjengelige (det er faktisk to versjoner av xsel med inkompatible flagg . Dette er veldig dumt.)

Se også :help clipboard i Neovim.

Kommentarer

  • ssh -Y innebærer -X så -X kan utelates.
  • En veldig interessant bivirkning av å lære dette (noen få år siden) for meg har vært erkjennelsen at " kan velge mange navngitte registre. "+ er ikke magisk, det ‘ registrerer bare +. Så hvis du for eksempel vil kopiere tre ting samtidig og lime hver av dem en etter en, kan du "1y, "2y og "3y og l ater "1p, "2p og "3p. Dette er veldig kraftig og ikke-eksisterende i nesten hvilken som helst annen redaktør. En annen interessant bruk er å se på lagrede makroer. Hvis du for eksempel tar opp med qq, men du er klar over at du må fikse det, kan du: i en tempelinje "qp, fikse det, og "qd.
  • Bare en merknad: OS X har to separate utklippstavler. Den ene er tilgjengelig med Cmd-C og Cmd-V og den andre ved hjelp av emacs-tastebindingen Ctrl-K og Ctrl-Y.
  • @shahbaz – sannsynligvis bedre å bruke bokstavregistrene til et slikt formål, siden nummererte endres når tekst slettes.
  • Kopier & lim inn som beskrevet i spørsmålet er ment for skrivebordet. Det er sant at installering av pakke gvim sammen med vim gir deg utklippstavlefunksjonalitet. men i fillesere blir du deretter tilbudt to tekstredigerere for å åpne filer! Og dette ser stygt ut. Dette er grunnen til at det er bedre å bare installere pakker vim og vim-gui-common. Senere gir du utklippstavlefunksjonene uten å måtte installere gvim. Dette er på Linux Debian 10.

Svar

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

set clipboard=unnamedplus 

Dette endrer standard Vim-registeret til + register, som er koblet til systemutklippstavlen.Fra :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") 

Kommentarer

  • Hvorfor fungerer ikke dette for meg når yank & limer inn mellom vim-forekomster (hver i en egen terminatorterminal)?
  • Hvis du er på Linux, og Vim har blitt samlet med + X11-funksjonen, og du har utklippstavlen = unnamedplus sett, bør du kunne rykke en linje i en forekomst av vim og lime den inn i en annen forekomst av vim. Du bør også kunne lime den inn i andre applikasjoner med CTRL + V eller SHIFT + INSERT. Du kan bruke :version i Vim for å se om + X11 vises i listen over inkluderte funksjoner. Du kan også sjekke om ‘ unnamedplus ‘ -funksjonen er tilgjengelig med :if has('unnamedplus')⏎ echo 'yes'⏎ endif ikke på Linux, så bør du bruke navnløs i stedet for unnamedplus.

Svar

De andre svarene dekker hvordan du kopierer tekst fra bufferen til systemutklippstavlen. En annen vanlig operasjon er å kopiere tekst fra et annet register til utklippstavlen. Hvis du for eksempel «allerede har sendt tekst til " (standardregisteret), vil du kanskje laste det registret inn på utklippstavlen.

Du kan gjør dette med :let:

  • let @+=@" — kopierer standardregisteret til utklippstavlen
  • let @*=@" — kopierer standardregisteret til X11-primærvalget («mus utklippstavle «)
  • let @+=@a — kopi fra register a utklippstavlen
  • osv.

Merk at dette fungerer for registre generelt: let @a=@b kopierer register b for å registrere a.

Svar

På bygger som støtter det, er registeret med navnet * systemutklippstavlen. For å kopiere tekst fra Vim til systemutklippstavlen, kan du velg teksten i visuell modus, og trykk deretter på "* y for å kopiere den til systemutklippstavlen.

Omvendt, bruk "* p for å lime inn tekst fra systemutklippstavlen i Vim.

Svar

Hvis du ikke kan finne ut hvordan du kan få +clipboard til å fungere, noe jeg ikke kunne hatt av en eller annen grunn, så kan du gjøre dette.

Forutsatt at du bare vil kopiere en del av filen, gjør jeg shift + v i visuell modus og bare markere linjene jeg vil kopiere. Så gjør jeg dette.

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

Forklaring

  • "<,"> – betyr deg brukte visuell modus for å velge et område (du skriver ikke dette)
  • w !{cmd} – skriv området til stdin til cmd, se mer på :help w_c
  • wl-copy og xclip er programmer du kan pipe tekst til, og de vil legge den til i systemutklippstavlen din

Når dette først er i historien din, trenger du ikke å skrive det hele igjen. Bare velg med visuell modus, skriv w, trykk deretter opp og kommandoen skal fullføres automatisk. Du trenger heller ikke å bruke visuell modus. Du kan angi hvilket område du vil.

Kommentarer

  • Stemmer dette (i forhold til det andre lignende svaret) fordi dette gir forklaring. Forresten, et notat til meg selv eller andre lesere: når du bruker xclip, trenger du IKKE å legge til den -selection clipboard -parameteren, som er for loooong til å skrive. Standard :'<,'>w !xclip kopierer innholdet til » primær » dvs. copy-on- velg utklippstavlen, som kan limes inn med den midterste museknappen.

Svar

Jeg anbefaler at du bruker Gvim, og legg dette til .vimrc:

source $VIMRUNTIME/mswin.vim behave mswin 

Dette muliggjør støtte for Ctrl C , Ctrl X , Ctrl V som notisblokk i Windows.

Merk at dette også vil legge til noen andre vanlige Windows-snarveier, for eksempel Ctrl S for :w, Ctrl A for å velge alle osv.

Svar

Jeg slet med systemutklippstavlen og vim inne i tmux.

Det ble løst ved å bruke xsel eller xclip, som i dette eksemplet:

1.) visu velg en blokktekst i normal modus: V<motionkey>

2.a) med xsel kjør ex: :"<,">w !xsel -b

2.b) med xclip kjør ex: :"<,">w !xclip -selection clipboard

3.) lim inn i et annet program

… og nå nmap dette som ønsket.

Disse alternativene (-b eller -valg utklippstavle) betyr i utgangspunktet at programmet (xsel eller xclip) sendes til bakgrunnen og venter på at et annet program skal lim innholdet, slik at det kan «forstyrre».

(på manjaro med i3, xfce4-terminal, tmux)

Svar

Dette er oppførselen Jeg ville ha når det gjaldt systemutklippstavlen:

  • Yanking a line with newline works
  • Yanking a line without newline works
  • Yanking uansett hva som er visuelt valgte verk
  • Klippverk
  • Klipp av en linje med newline-verk
  • Klipp av en linje uten newline-verk

Av verk Jeg mener: Jeg kan fortsatt bruke p til å lime inn mens jeg er i vim, og jeg kan også bruke utklippstavlen til systemet. I utgangspunktet vil jeg at kopier og lim skal fungere som forventet, og jeg gjorde ikke » Jeg vil ikke rote systemutklippstavlen mer enn nødvendig.

Min teknikk var å kartlegge det vanlige rykket, kutte og slette kommandoer for å bruke systemutklippstavlen ved å legge til disse linjene i :

" 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 

Nøkkelinnblikk fra https://anuragpeshne.github.io/essays/vim/7.html blogginnlegg er:

Rekursiv kartlegging er ond, bruk alltid ikke-rekursiv kartlegging. (noremap)

Kommentarer

  • Hva gjør " gjøre? Det første svaret forklarte allerede hva * er til (med henvisning til det primære utklippstavlen), men jeg ser ikke ‘ noen forklaring hvor som helst hva " er til og hvorfor det får kommandoen til å fungere.
  • Den ‘ er ikke umiddelbart åpenbar fordi du ‘ er sannsynligvis vant til at sitatet ble brukt til å gå rundt ord, som "foo"; for vim "* er imidlertid faktisk navnet på » register » (a vim konsept) som kobles til systemutklippstavlen. Hvis du åpner vim og skriver :registers, kan du se navnene på andre registre som: "", "0, "1, og videre. Jeg fant denne artikkelen nyttig for å lære om registre: brianstorti.com/vim-registers

Svar

Hvis din vim ikke støtter +clipboard, kan du bruke fakeclip plugin for Linux, Mac, Windows, tmux, screen, …

Svar

Hvert annet svar har dekket alle viktige ting om registerene. Jeg vil legge til en ting til som jeg bruker.

Det er en måte i Vim å direkte kopiere visuelt valgt tekst inn på utklippstavlen. Bare legg dette i vimrc filen:

set guioptions+=a 

Og med dette når du visuelt velger tekst, blir det kopiert til din utklippstavlen. For mer informasjon om dette, :help guioptions

BTW, dette er bare for gVim.

Kommentarer

  • guioptions+=a er også nevnt i Carpetsmoker ‘ s svar.
  • @muru Ja, beklager . Jeg så ikke ‘ det før. Jeg så det akkurat.

Svar

Du kan også bruke en global kommando for å sette et bestemt mønster på utklippstavlen. Det kan være nyttig i situasjoner der du har informasjon spredt i en fil og manuell håndtering er utsatt for feil og slitsom.

Rengjør først registeret som vil motta informasjonen

:let @a="" 

Kopier deretter alle linjene som inneholder mønsteret til det

:g/pattern/yank A 

Endelig overføring (kopiering) av informasjonen til systemutklippstavlen

:let @+=@a 

hvis du prøver å kopiere hver linje som inneholder et «mønster» direkte til utklippstavlen, vil den ikke fungere fordi utklippstavlen ikke har mulighet til å legge til nytt innhold, derfor bruker vi her et normalt vim-register for å lagre alle linjene som inneholder mønsteret på en gang og deretter sette det på utklippstavlen.

OBS: Det er nødvendig å klinde registeret før du bruker det, og bruk av UPPERCASE-versjonen av registeret lar oss legge til innhold, ellers vil det ikke fungere heller.

Svar

MacVim Cmd + x/c/v for å klippe / kopiere / lime inn

Hvis du bruker MacVim, er det vanlige Cmd+x/c/v definert i $ VIMRUNTIME / macmap.vim som er hentet som standard og derav er tilgjengelig uten konfigurasjon:

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

Bruk av dem kan imidlertid føre til vim-bruker som ikke kjenner til vim måte og går tapt på en fremmed datamaskin / miljø.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *