Er der en måde at kopiere en tekstblok til systemets udklipsholder, så jeg kan indsætte den i et andet program?

Kommentarer

  • Dette er allerede blevet bedt om og besvaret på SO. Du kan finde flere og forskellige oplysninger der.
  • Jeg har brugt dette plugin på macvim christoomey / vim-system-copy og elsker det virkelig. Det fungerer rigtig godt med bevægelser cpip, cpi{.
  • Hvad du virkelig har brug for er EasyClip . Det gør netop det og så meget mere …
  • Jeg kan ikke tilføje svar, men en kommentar. Hvis du kun vil kopiere en tekst, kan du også bruge 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.

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ør vimx i stedet for vim ( flere oplysninger ).
  • Arch Linux: installer gvim (dette aktiverer +clipboard for normal vim også).

Du kan også brug xclip, xcopy eller xsel til at kopiere tekst til udklipsholderen; se følgende spørgsmål til løsninger:

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 med qq, 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 med vim 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 pakker vim og vim-gui-common. Senere leverer man udklipsholderfunktionerne uden behov for installation af gvim. 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 register a 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 af cmd, se mere på :help w_c
  • wl-copy og xclip 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ø.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *