Er der en måde at kopiere en tekstblok til systemets udklipsholder, så jeg kan indsætte den i et andet program?
Kommentarer
Svar
For X11 -baserede systemer (dvs. Linux og de fleste andre UNIX -lignende systemer) der er to udklipsholder, der er uafhængige af hinanden:
- PRIMÆR – Dette er copy-on-select og kan indsættes med den midterste museknap.
- CLIPBOARD – Dette kopieres med (normalt)
^C
og indsættes med^V
(Det ligner MS Windows).
OS X og Windows -systemer har kun et udklipsholder.
For X11 systemer er der også et antal værktøjer, der synkroniserer disse udklipsholder til dig, så hvis de ser ud til at være de samme, kan du muligvis have et af dem, der kører.
Vim har to specielle regis ter svarende til disse udklipsholder:
-
*
bruger PRIMÆR; mnemonic: S tar er S elect (til copy-on- s elect) -
+
bruger CLIPBOARD; mnemonic: CTRL PLUS C (for den fælles keybind)
På Windows & OS X er der ingen forskel mellem +
og *
, da disse systemer kun har en enkelt udklipsholder, og begge registre henviser til den samme ting (det betyder ikke noget, hvilken du bruger).
Du kan bruge disse registre som ethvert register. For eksempel ved hjælp af det PRIMÆRE udklipsholder *
med y
og p
kommandoerne:
-
"*yy
-
"*p
Du kan måske bruge dette som mere bekvemme nøglebind:
noremap <Leader>y "*y noremap <Leader>p "*p noremap <Leader>Y "+y noremap <Leader>P "+p
Hvis du vil ” automatisk ” interface til systemet “s udklipsholder i stedet for at referere til det manuelt hele tiden, kan du indstille variablen clipboard
:
- Sæt det til
unnamed
for at bruge*
(PRIMÆR, ved valg) - Sæt det til
unnamedplus
for at bruge+
(CLIPBOARD,^C
)
Brug bare yy
til systemets udklipsholder i stedet for Vims unavngivne register, og p
indsætter systemet “s udklipsholder.
Du kan også tildele disse registre ligesom ethvert register med let
:
-
:let @+=42
-
:let @*=42
clipboard
indstillingen har nogle flere muligheder (såsom ekskluder filtre); men det er de grundlæggende. Se :help "clipboard"
for den fulde historie 😉
gVim
Hvis du bruger gVim, kan du få copy-on-select adfærd, når ved hjælp af :set guioptions+=a
.
Dette er som standard aktiveret på X11-systemer (kopier til PRIMÆR), men ikke på MS Windows & OSX (som valg af tekst vil tilsidesætte dit udklipsholder).
Nej +clipboard
?
Vim kræver +clipboard
funktionsflag for at noget af dette fungerer; du kan kontrollere, om din Vim har dette ved at bruge :echo has("clipboard")
fra Vim (hvis output er 0
, er det “s ikke til stede, hvis det er “s 1
, er det) eller kontrollerer output for vim --version
for +clipboard
.
De fleste Linux-distributioner leveres med en ” minimal ” Vim-build er som standard, hvilket ikke har +clipboard
, men du kan normalt installere det:
- Debian & Ubuntu: Installer
vim-gtk3
. - Fedora: installer
vim-X11
, og kørvimx
i stedet forvim
( flere oplysninger ). - Arch Linux: installer
gvim
(dette aktiverer+clipboard
for normalvim
også).
Du kan også brug xclip
, xcopy
eller xsel
til at kopiere tekst til udklipsholderen; se følgende spørgsmål til løsninger:
- Definer brugerdefinerede kommandoer til * og + registre
- Hvordan kan jeg kopiere over en ssh-session uden + klip board?
SSH
Du kan også bruge et udklipsholder på eksterne maskiner, hvis du aktiverer X11-videresendelse via SSH. Dette er især nyttigt med ovenstående tip, da du derefter kan bruge xclip
til at få adgang til skrivebordets udklipsholder. Vim på den maskine, du ønsker at bruge, har stadig brug for +clipboard
-funktion.
Dette kræver ForwardX11Trusted
indstilling, og skal kun gøres med pålidelige servere , da dette giver serveren næsten fuldstændig kontrol over din X11-session:
$ ssh -XY myhost
For at gøre disse indstillinger vedvarende (så du ikke behøver at tilføje -XY
hver gang), kan du gøre noget lignende i din ~/.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 opdaterede udklipsholderstøtten. Den indbyggede grænseflade blev fjernet og erstattet med et system, der kalder et eksternt værktøj såsom xclip
, xsel
eller pbcopy
/ pbpaste
.
Det skal automatiseres afhent disse værktøjer og brug dem. På OS X skal pbcopy
og pbpaste
være tilgængelige som standard, på Linux vil du sandsynligvis installere xclip
, da det “er den mest tilgængelige (der er faktisk to versioner af xsel
med uforenelige flag . Dette er virkelig dumt).
Se også :help clipboard
i Neovim.
Kommentarer
- ssh -Y antyder -X så -X kan udelades.
- En meget interessant bivirkning ved at lære dette (et par år siden) for mig har været erkendelsen af, at
"
kan vælge mange navngivne registre."+
er ikke magisk, det er ‘ registrerer bare+
. Så hvis du f.eks. vil kopiere tre ting på samme tid og indsætte hver af dem en efter en, kan du"1y
,"2y
og"3y
og l ater"1p
,"2p
og"3p
. Dette er virkelig stærkt og ikke-eksisterende i næsten enhver anden editor. En anden interessant anvendelse er at se på lagrede makroer. Hvis du f.eks. Optager medqq
, men du er klar over, at du skal rette det, kan du: i en tempelinie"qp
, rette det og"qd
. - Bare en note: OS X har to separate udklipsholder. Den ene er tilgængelig ved hjælp af Cmd-C og Cmd-V og den anden ved hjælp af emacs-tastebindingerne Ctrl-K og Ctrl-Y.
- @shahbaz – sandsynligvis bedre at bruge bogstavregistrene til et sådant formål, da de nummererede ændres, hver gang tekst slettes.
- Kopier & Indsæt som beskrevet i spørgsmålet er beregnet til desktop. Det er rigtigt, at installation af pakke
gvim
sammen medvim
giver dig udklipsholderfunktioner. men i filbrowsere tilbydes du derefter to teksteditorer til at åbne filer! Og det ser grimt ud. Derfor er det bedre at kun installere pakkervim
ogvim-gui-common
. Senere leverer man udklipsholderfunktionerne uden behov for installation afgvim
. Dette er på Linux Debian 10.
Svar
Fra http://vim.wikia.com/wiki/Accessing_the_system_clipboard
set clipboard=unnamedplus
Dette ændrer standard Vim-registeret til +
register, som er knyttet til systemets udklipsholder.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 dette ikke for mig, når yank & indsættes mellem vim-forekomster (hver i en separat terminatorterminal)?
- Hvis du er på Linux, og Vim er blevet kompileret med + X11-funktionen, og du har udklipsholder = unnamedplus set, skal du kunne rykke en linje i en forekomst af vim og indsætte den i en anden forekomst af vim. Du skal også kunne indsætte det i enhver anden applikation med CTRL + V eller SHIFT + INSERT. Du kan bruge
:version
i Vim for at se, om + X11 vises på listen over inkluderede funktioner. Du kan også kontrollere, om ‘ unnamedplus ‘ -funktionen er tilgængelig med:if has('unnamedplus')⏎ echo 'yes'⏎ endif
Hvis du er ikke på Linux, så skal du bruge unavngivne i stedet for unnamedplus.
Svar
De andre svar dækker, hvordan man kopierer tekst fra din buffer til systemets udklipsholder. En anden almindelig handling er at kopiere tekst fra et andet register til udklipsholderen. Hvis du f.eks. “Allerede har rukket noget tekst til "
(standardregistret), kan du muligvis indlæse registret i udklipsholderen.
Du kan f.eks. gør dette med :let
:
-
let @+=@"
— kopierer standardregistret til udklipsholderen -
let @*=@"
— kopierer standardregistret til det primære X11-valg (“mus udklipsholder “) -
let @+=@a
— kopi fra registera
klippebordet - osv.
Bemærk, at dette fungerer generelt for registre: let @a=@b
kopierer register b
for at registrere a
.
Svar
Til bygger der understøtter det, registret med navnet *
er systemudklipsholderen. For at kopiere tekst fra Vim til systemudklipsholderen kan du vælg teksten ved hjælp af visuel tilstand, og tryk derefter på "* y for at kopiere den til systemets udklipsholder.
Omvendt, brug "* p til at indsætte tekst fra systemets udklipsholder i Vim.
Svar
Hvis du ikke kan finde ud af, hvordan du får +clipboard
til at arbejde, hvilket jeg af en eller anden grund ikke kunne få, så kan du gøre dette.
Forudsat at du kun vil kopiere en del af filen, skal jeg shift
+ v
i visuel tilstand og kun fremhæve de linjer, jeg vil kopiere. Så gør jeg dette.
# Linux Wayland :"<,">w !wl-copy # Linux Xorg :"<,">w !xclip -selection clipboard
Forklaring
-
"<,">
– betyder dig brugte visuel tilstand til at vælge et interval (du skriver ikke dette) -
w !{cmd}
– skriv området til stdin afcmd
, se mere på:help w_c
-
wl-copy
ogxclip
er programmer, som du kan røre tekst til, og de “tilføjer den til dit system udklipsholder
Når dette først er i din historie, behøver du ikke skrive det hele igen. Vælg bare med visuel tilstand, skriv w
, tryk derefter op, og kommandoen skal udfyldes automatisk. Du behøver heller ikke at bruge visuel tilstand. Du kan indstille det område, du vil.
Kommentarer
- Opstemning af dette (frem for det andet lignende svar), fordi dette giver forklaring. Forresten, en note til mig selv eller andre læsere: Når du bruger
xclip
, behøver du IKKE tilføje den-selection clipboard
-parameter, som er for længe at skrive. Standard:'<,'>w !xclip
kopierer indholdet til ” primær ” dvs. copy-on- vælg udklipsholder, som kan indsættes med den midterste museknap.
Svar
Jeg anbefaler, at du bruger Gvim, og tilføj dette til din .vimrc
:
source $VIMRUNTIME/mswin.vim behave mswin
Dette muliggør understøttelse af Ctrl C , Ctrl X , Ctrl V som notesblok i Windows.
Bemærk, at dette også tilføjer nogle andre almindelige Windows-genveje, såsom Ctrl S til :w
, Ctrl A for at vælge alle osv.
Svar
Jeg kæmpede med systemets udklipsholder og vim
inde i tmux
.
Det blev løst ved hjælp af xsel
eller xclip
, som i dette eksempel:
1.) visu allieret vælg en bloktekst i normal tilstand: V<motionkey>
2.a) med xsel
kør ex: :"<,">w !xsel -b
2.b) med xclip
kør ex: :"<,">w !xclip -selection clipboard
3.) Indsæt i et andet program
… og nu nmap dette som foretrukket.
Disse indstillinger (-b eller -valg udklipsholder) betyder grundlæggende, at programmet (xsel eller xclip) sendes til baggrunden og venter på, at et andet program skal indsæt indholdet, så det kan “blande sig”.
(på manjaro med i3, xfce4-terminal, tmux)
Svar
Dette er adfærden Jeg ville have, når det kom til systemets udklipsholder:
- Yanking af en linje med newline-værker
- Yanking af en linje uden newline-værker
- Yanking uanset hvad der er visuelt valgte værker
- Klipværker
- Klipning af en linje med newline-værker
- Klipning af en linje uden newline-værker
Af værker Jeg mener: Jeg er stadig i stand til at bruge p
til at indsætte, mens jeg er i vim, og jeg kan også bruge systemets udklipsholder. Dybest set vil jeg gerne have, at kopi og indsæt fungerer som forventet, og det gjorde jeg ikke ” t ønsker at rodet mit systemudklipsholder mere end nødvendigt.
Min teknik var at kortlægge det fælles yank, klippe og slette kommandoer for at bruge systemets udklipsholder ved at tilføje disse linjer til min ~/.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
Nøgleindsatsen fra https://anuragpeshne.github.io/essays/vim/7.html blogindlæg er:
Rekursiv kortlægning er ond, brug altid ikke-rekursiv kortlægning. (noremap)
Kommentarer
- Hvad betyder
"
gøre? Det første svar forklarede allerede, hvad*
er til (med henvisning til det primære udklipsholder), men jeg kan ikke ‘ ikke se nogen forklaring hvor som helst for hvad"
er til, og hvorfor det får kommandoen til at fungere. - Det ‘ er ikke umiddelbart indlysende, fordi du ‘ er sandsynligvis vant til, at citatet blev brugt til at gå rundt om ord, som
"foo"
; dog for vim er"*
faktisk navnet på ” register ” (en vim koncept), der opretter forbindelse til systemets udklipsholder. Hvis du åbner vim og skriver:registers
kan du se navnene på andre registre som:""
,"0
,"1
og videre. Jeg fandt denne artikel nyttig til at lære om registre: brianstorti.com/vim-registers
Svar
Hvis din vim ikke understøtter +clipboard
kan du bruge fakeclip plugin til Linux, Mac, Windows, tmux, skærm, …
Svar
Hvert andet svar har dækket alle de vigtige ting ved registre. Jeg vil gerne tilføje en ting mere, som jeg bruger.
Der er en måde i Vim på direkte at kopiere visuelt valgt tekst ind på udklipsholderen. Bare læg dette i din vimrc fil:
set guioptions+=a
Og med dette, når du visuelt vælger en tekst, kopieres den til din udklipsholder. For mere information om dette, :help guioptions
BTW, dette er kun til gVim.
Kommentarer
-
guioptions+=a
er også nævnt i Carpetsmoker ‘ s svar. - @muru Ja, undskyld . Jeg så det ikke ‘. Jeg så det lige.
Svar
Du kan også bruge en global kommando til at sætte et bestemt mønster på udklipsholder. Det kan være nyttigt i situationer, hvor du har oplysninger spredt i en fil, og manuel håndtering er udsat for fejl og trættende.
Rens først det register, der modtager informationen
:let @a=""
Kopier derefter alle linjerne, der indeholder mønsteret til det
:g/pattern/yank A
Endelig overførsel (kopiering) af informationen til systemets udklipsholder
:let @+=@a
hvis du prøver at kopiere hver linje, der indeholder et “mønster” direkte til udklipsholderen, fungerer den ikke, fordi udklipsholderen ikke har mulighed for at tilføje nyt indhold, derfor bruger vi her et normalt vim-register til at gemme alle linjerne, der indeholder mønsteret på én gang og derefter lægge det på udklipsholderen.
OBS: Det er nødvendigt at klinge registeret, inden det bruges, og brug af UPPERCASE-versionen af registret giver os mulighed for at tilføje indhold, ellers fungerer det heller ikke.
Svar
MacVim Cmd + x/c/v
til klip / kopi / indsæt
Hvis du bruger MacVim, defineres den sædvanlige Cmd+x/c/v
i $ VIMRUNTIME / macmap.vim , der kommer som standard og derfor er tilgængelige uden konfiguration:
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"]
Brug af dem kan dog føre til vim-bruger, der ikke kender vim måde og går tabt på en fremmed computer / miljø.
cpip
,cpi{
.sed
:).sed -n 5p file
; kun 5. linje.sed -n -e 5p -e 8p file
; kun 5. og 6. linje.sed -n 5,8p file
; linjer mellem 5. og 8. Det udskriver linjerne i konsollen. Du kan nemt kopiere ved at vælge tekst.