Er det en måte å kopiere en tekstblokk til systemutklippstavlen, så jeg kan lime den inn i et annet program?
Kommentarer
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ørvimx
i stedet forvim
( mer info ). - Arch Linux: installer
gvim
(dette vil aktivere+clipboard
for normalvim
også).
Du kan også bruk xclip
, xcopy
, eller xsel
for å kopiere tekst til utklippstavlen; se følgende spørsmål for løsninger:
- Definer egendefinerte kommandoer for * og + -registrene
- Hvordan kan jeg kopiere over en ssh-økt uten + klipp bord?
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 medqq
, 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 medvim
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 pakkervim
ogvim-gui-common
. Senere gir du utklippstavlefunksjonene uten å måtte installeregvim
. 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 registera
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 tilcmd
, se mer på:help w_c
-
wl-copy
ogxclip
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ø.
cpip
,cpi{
.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.