Finns det ett sätt att kopiera ett textblock till systemets urklipp så att jag kan klistra in det i ett annat program?

Kommentarer

  • Detta har redan ställts och besvarats på SO. Du kan hitta mer och annan information där.
  • Jag har använt det här tillägget på macvim christoomey / vim-system-copy och älskar verkligen det. Det fungerar riktigt bra med rörelser cpip, cpi{.
  • Det du verkligen behöver är EasyClip . Det kommer att göra just det och så mycket mer …
  • Jag kan inte lägga till svar utan en kommentar. Om du bara vill kopiera en text kan du också använda sed :). sed -n 5p file; bara 5: e raden. sed -n -e 5p -e 8p file; bara femte och sjätte raden. sed -n 5,8p file; mellan 5: e och 8: e. Det kommer att skriva ut raderna i konsolen. Du kan enkelt kopiera genom att välja text.

Svar

För X11 -baserade system (dvs. Linux och de flesta andra UNIX -liknande system) det finns två klippbord som är oberoende av varandra:

  • PRIMÄR – Det här är copy-on-select och kan klistras in med mittknappen.
  • CLIPBOARD – Detta kopieras med (vanligtvis) ^C och klistras in med ^V (Det är som MS Windows).

OS X och Windows -system har bara ett urklipp.

För X11 system finns det också ett antal verktyg som synkroniserar dessa urklipp åt dig, så om de verkar vara desamma kan det hända att ett av dem körs.

Vim har två speciella regis ter motsvarande dessa urklipp:

  • * använder PRIMÄR; mnemonic: S tar är S elect (för copy-on- s elect)
  • + använder CLIPBOARD; mnemonic: CTRL PLUS C (för den vanliga tangentbindningen)

På Windows & OS X finns det ingen skillnad mellan + och *, eftersom dessa system bara har en enda Urklipp, och båda registren hänvisar till samma sak (det spelar ingen roll vilken du använder).

Du kan använda dessa register som valfritt register. Till exempel med PRIMÄR klippbord * med kommandona y och p:

  • "*yy
  • "*p

Du kan kanske använda detta som mer praktiska tangentbindningar:

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

Om du vill ” automatiskt ” gränssnitt med systemet ”Urklipp istället för att hänvisa till det manuellt hela tiden, kan du ställa in clipboard variabel:

  • Ställ in den på unnamed för att använda * (PRIMÄR, vid val)
  • Ställ in den på unnamedplus för att använda + (CLIPBOARD, ^C)

Att bara använda yy går nu till systemets urklipp, istället för Vims namnlösa register, och p klistrar in systemet ”Urklipp.

Du kan också tilldela dessa register precis som alla register med let:

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

clipboard inställningen har några fler alternativ (t.ex. exkludera filter); men det här är grunderna. Se :help "clipboard" för den fullständiga berättelsen 😉

gVim

Om du använder gVim kan du få beteenden för kopiering vid val när använder :set guioptions+=a.
Detta är aktiverat som standard på X11-system (kopior till PRIMÄR), men inte på MS Windows & OSX (eftersom val av text skulle åsidosätta ditt urklipp).

Nej +clipboard?

Vim kräver +clipboard funktionsflagga för att något av detta ska fungera; du kan kontrollera om din Vim har detta genom att använda :echo has("clipboard") inifrån Vim (om utdata är 0 är det ”s inte närvarande, om det är ”s 1, är det), eller kontrollerar utdata från vim --version för +clipboard.

De flesta Linux-distributioner levereras med en ” minimal ” Vim-build som standard, vilket inte har +clipboard, men du kan vanligtvis installera det:

  • Debian & Ubuntu: Installera vim-gtk3.
  • Fedora: installera vim-X11 och kör vimx istället för vim ( mer info ).
  • Arch Linux: installera gvim (detta aktiverar +clipboard för normal vim också).

Du kan också använd xclip, xcopy eller xsel för att kopiera text till urklipp; se följande frågor för lösningar:

SSH

Du kan också använda ett urklipp på fjärrmaskiner om du aktiverar X11 vidarebefordran via SSH. Detta är särskilt användbart med ovanstående tips eftersom du sedan kan använda xclip för att komma åt skrivbordets skrivbord. Vim på den maskin du ska använda kommer fortfarande att behöva +clipboard -funktion.

Detta kräver ForwardX11Trusted -inställning och bör gör endast med betrodda servrar , eftersom detta ger servern nästan fullständig kontroll över din X11-session:

$ ssh -XY myhost 

För att göra dessa inställningar bestående (så att du inte behöver lägga till -XY varje gång) kan du göra något liknande 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 moderniserade urklippsstödet. Det inbyggda gränssnittet togs bort och ersattes med ett system som kallar ett externt verktyg som xclip, xsel eller pbcopy / pbpaste.

Det borde automatiskt plocka upp dessa verktyg och använda dem. På OS X ska pbcopy och pbpaste vara tillgängliga som standard, på Linux vill du förmodligen installera xclip, eftersom det är den mest tillgängliga (det finns faktiskt två versioner av xsel med inkompatibla flaggor . Detta är riktigt dumt).

Se även :help clipboard i Neovim.

Kommentarer

  • ssh -Y antyder -X så -X kan utelämnas.
  • En mycket intressant bieffekt av att lära sig detta (några år sedan) har för mig varit insikten att " kan välja många namngivna register. "+ är inte magiskt, det är ’ registrerar bara +. Så om du till exempel vill kopiera tre saker samtidigt och klistra in var och en av dem kan du "1y, "2y och "3y och l ater "1p, "2p och "3p. Detta är verkligen kraftfullt och obefintligt i nästan alla andra redaktörer. En annan intressant användning är att titta på lagrade makron. Om du till exempel spelar in med qq men inser att du måste fixa det kan du: i en temprad "qp, fixa det och "qd.
  • Bara en anmärkning: OS X har två separata urklipp. Den ena nås med Cmd-C och Cmd-V och den andra med hjälp av emacs-tangentbindningarna Ctrl-K och Ctrl-Y.
  • @shahbaz – förmodligen bättre att använda brevregisterna för ett sådant ändamål, eftersom de numrerade ändras när text raderas.
  • Kopiera & klistra in som beskrivs i frågan är avsedd för skrivbordet. Det är sant att installation av paket gvim tillsammans med vim ger dig urklippsfunktioner. men i filwebbläsare erbjuds du sedan två textredigerare för att öppna filer! Och det här ser ful ut. Det är därför det är bättre att bara installera paket vim och vim-gui-common. Senare tillhandahåller man urklippsfunktionerna utan att behöva installera gvim. Detta finns på Linux Debian 10.

Svar

Från http://vim.wikia.com/wiki/Accessing_the_system_clipboard

set clipboard=unnamedplus 

Detta ändrar standard Vim-registret till + -registret, som är länkat till systemets urklipp.Från :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

  • Varför fungerar det inte för mig när yank & klistrar in mellan vim-instanser (var och en i en separat terminatorterminal)?
  • Om du är på Linux och Vim har kompilerats med + X11-funktionen och du har klippbordet = unnamedplus set, bör du kunna rycka en rad i en instans av vim och klistra in den i en annan instans av vim. Du bör också kunna klistra in den i alla andra applikationer med CTRL + V eller SHIFT + INSERT. Du kan använda :version i Vim för att se om + X11 visas i listan med inkluderade funktioner. Du kan också kontrollera om funktionen ’ unnamedplus ’ finns med :if has('unnamedplus')⏎ echo 'yes'⏎ endif Om du är inte på Linux ska du använda namngivna istället för unnamedplus.

Svar

De andra svaren täcker hur man kopierar text från din buffert till system Urklipp. En annan vanlig operation är att kopiera text från ett annat register till urklipp. Om du till exempel ”redan har skickat lite text till " (standardregistret) kanske du vill ladda registret i urklipp.

Du kan gör detta med :let:

  • let @+=@" — kopierar standardregistret till klippbordet
  • let @*=@" — kopierar standardregistret till X11-primärvalet (”mus urklipp ”)
  • let @+=@a — kopiera från register a klippbordet
  • etc.

Observera att detta fungerar för register i allmänhet: let @a=@b kopierar register b för att registrera a.

Svar

På bygger som stöder det, registret * är system Urklipp. För att kopiera text från Vim till system Urklipp kan du välj texten i visuellt läge och tryck sedan på "* y för att kopiera den till systemets urklipp.

Omvänt, använd "* p för att klistra in text från system Urklipp i Vim.

Svar

Om du inte kan ta reda på hur du får +clipboard, vilket jag inte kunde göra av någon anledning, kan du göra detta.

Förutsatt att du bara vill kopiera en del av filen, gör jag shift + v i visuellt läge och bara markera de rader jag vill kopiera. Då gör jag det här.

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

Förklaring

  • "<,"> – betyder att du använt visuellt läge för att välja ett intervall (du skriver inte det här)
  • w !{cmd} – skriv intervallet till stdin för cmd, se mer på :help w_c
  • wl-copy och xclip är program som du kan pipa text till och de lägger till den i system Urklipp

Dessutom, när det här är i din historia, behöver du inte skriva det hela igen. Välj bara med visuellt läge, skriv w och tryck sedan uppåt så kommer kommandot att kompletteras automatiskt. Dessutom behöver du inte använda visuellt läge. Du kan ställa in vilket intervall du vill.

Kommentarer

  • Att rösta om detta (över det andra liknande svaret) eftersom det här ger förklaring. Förresten, en anteckning till mig själv eller andra läsare: när du använder xclip behöver du INTE lägga till den -selection clipboard -parametern, vilket är för loooong att skriva. Standard :'<,'>w !xclip kopierar innehållet till ” primärt ” dvs. kopia-på- välj urklipp, som kan klistras in med mittknappen.

Svar

Jag rekommenderar att du använder Gvim, och lägg till detta i din .vimrc:

source $VIMRUNTIME/mswin.vim behave mswin 

Detta möjliggör stöd för Ctrl C , Ctrl X , Ctrl V som anteckningsblock i Windows.

Observera att detta också kommer att lägga till några andra vanliga Windows-genvägar, som Ctrl S för :w, Ctrl A för att välja alla osv.

Svar

Jag kämpade med system Urklipp och vim inuti tmux.

Det löstes med hjälp av xsel eller xclip, som i detta exempel:

1.) visu välj en blocktext i normalt läge: V<motionkey>

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

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

3.) klistra in i ett annat program

… och nu nmap detta som föredraget.

Dessa alternativ (-b eller-urval urklipp) betyder i princip att programmet (xsel eller xclip) skickas till bakgrunden och väntar på att ett annat program ska klistra in innehållet så att det kan ”störa”.

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

Svar

Detta är beteendet Jag ville ha när det kom till system Urklipp:

  • Yanking a line with newline works
  • Yanking a line without newline works
  • Yanking what is visually utvalda verk
  • Klippverk
  • Klippa en linje med newline-verk
  • Klippa en linje utan newline-verk

Av verk Jag menar: Jag kan fortfarande använda p för att klistra in medan jag är i vim och jag kan också använda systemets urklipp. I grund och botten vill jag att kopia och klistra ska fungera som förväntat och jag gjorde inte ” t vill störa mitt system Urklipp mer än nödvändigt.

Min teknik var att kartlägga det gemensamma rycket, klippa ut och ta bort kommandon för att använda system Urklipp genom att lägga till dessa rader i 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 

Nyckelinsikten från https://anuragpeshne.github.io/essays/vim/7.html blogginlägg är:

Rekursiv kartläggning är ond, använd alltid icke-rekursiv kartläggning. (noremap)

Kommentarer

  • Vad gör " göra? Det första svaret förklarade redan vad * är för (med hänvisning till det primära urklipp), men jag ser inte ’ någon förklaring var som helst vad " är för och varför det får kommandot att fungera.
  • Det ’ är inte omedelbart uppenbart eftersom du ’ är förmodligen van vid att citatet används för att gå runt ord, som "foo"; för vim "* är dock faktiskt namnet på ” registret ” (a vim koncept) som ansluts till systemets urklipp. Om du öppnar vim och skriver :registers kan du se namnen på andra register som: "", "0, "1 och vidare. Jag tyckte att den här artikeln var användbar för att lära mig mer om register: brianstorti.com/vim-registers

Svar

Om din vim inte stöder +clipboard kan du använda fakeclip plugin för Linux, Mac, Windows, tmux, skärm, …

Svar

Alla andra svar har täckt alla viktiga saker om registren. Jag vill lägga till en sak till som jag använder.

Det finns ett sätt i Vim att direkt kopiera visuellt valt text till klippbordet. Lägg bara detta i din vimrc -fil:

set guioptions+=a 

Och med detta när du visuellt väljer en text kommer den att kopieras till din Urklipp. För mer information om detta, :help guioptions

BTW, detta är endast för gVim.

Kommentarer

  • guioptions+=a nämns också i Carpetsmoker ’ s svar.
  • @muru Yeah, sorry . Jag såg inte ’ det tidigare. Jag såg det precis.

Svar

Du kan också använda ett globalt kommando för att sätta något specifikt mönster på Urklipp. Det kan vara användbart i situationer där du har information spridd i en fil och manuell hantering är utsatt för fel och tröttsam.

Rengör först registret som kommer att få informationen

:let @a="" 

Kopiera sedan alla rader som innehåller mönstret till det

:g/pattern/yank A 

Slutligen överföra (kopiera) informationen till systemets urklipp

:let @+=@a 

om du försöker kopiera varje rad som innehåller ett ”mönster” direkt till Urklipp fungerar det inte eftersom klippbordet inte har möjlighet att lägga till nytt innehåll, så vi använder här ett normalt vim-register för att lagra alla rader som innehåller mönstret på en gång och sedan lägga det på klippbordet.

OBS: Det är nödvändigt att klistra in registret innan du använder det, och användningen av UPPERCASE-versionen av registret gör att vi kan lägga till innehåll, annars fungerar det inte heller.

Svar

MacVim Cmd + x/c/v för klipp / kopiera / klistra in

Om du använder MacVim definieras det vanliga Cmd+x/c/v i $ VIMRUNTIME / macmap.vim som hämtas som standard och därmed är tillgängliga utan 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"] 

Att använda dem kan dock leda till vim-användare som inte känner till vim-sätt och går förlorade på en främmande dator / miljö.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *