Existuje způsob, jak zkopírovat blok textu do systémové schránky, abych jej mohl vložit do jiného programu?

Komentáře

  • Toto již bylo položeno a zodpovězeno na SO. Naleznete tam další a různé informace.
  • Tento plugin používám na macvim christoomey / vim-system-copy a opravdu ho miluji. Funguje opravdu dobře s pohyby cpip, cpi{.
  • To, co opravdu potřebujete, je EasyClip . Udělá to jen to a ještě mnohem více …
  • Nemohu přidat odpověď, ale komentář. Pokud chcete pouze zkopírovat text, můžete také použít sed :). sed -n 5p file; pouze 5. řádek. sed -n -e 5p -e 8p file; pouze 5. a 6. řádek. sed -n 5,8p file; řádky mezi 5. a 8. Vytiskne řádky v konzole. Můžete snadno kopírovat výběrem textu.

Odpovědět

Pro X11 systémy založené na systému (tj. Linux a většina ostatních UNIX podobné systémy) existují dvě schránky, které jsou na sobě nezávislé:

  • PRIMÁRNÍ – Toto je copy-on-select a lze jej vložit prostředním tlačítkem myši.
  • CLIPBOARD – Toto je zkopírováno (obvykle) ^C a vloženo s ^V (Je to jako MS Windows).

OS X a Systémy Windows mají pouze jednu schránku.

Pro X11 systémy existuje také řada nástrojů, které tyto schránky synchronizují za vás; takže pokud se zdají být stejné, můžete mít jeden z nich spuštěný.

Vim má dva speciální regis ters odpovídající těmto schránkám:

  • * používá PRIMARY; mnemotechnická pomůcka: S tar je S volit (pro copy-on- s volit)
  • + používá CLIPBOARD; mnemotechnická pomůcka: CTRL PLUS C (pro běžnou klávesovou zkratku)

V systému Windows & OS X není rozdíl mezi + a *, protože tyto systémy mají pouze jeden schránka a oba registry odkazují na stejnou věc (nezáleží na tom, který z nich používáte).

Tyto registry můžete použít jako libovolný registr. Například pomocí PRIMÁRNÍ schránky * s příkazy y a p:

  • "*yy
  • "*p

Můžete to použít jako pohodlnější klávesové zkratky:

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

Pokud chcete “ automaticky “ rozhraní se systémem „místo toho, abyste na ni neustále odkazovali ručně, můžete nastavit proměnnou clipboard:

  • Nastavit na unnamed pro použití * (PRIMÁRNÍ, při výběru)
  • Nastavit na unnamedplus používat + (CLIPBOARD, ^C)

Pouhé použití yy nyní přejde do schránky systému namísto nepojmenovaného registru Vim a p vloží systém „schránka.

K těmto registrům můžete také přiřadit jako každý registr s let:

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

clipboard nastavení má několik dalších možností (například vyloučit filtry); ale to jsou základy. Celý příběh viz :help "clipboard" 😉

gVim

Pokud používáte gVim, můžete získat chování kopírování při výběru, když pomocí :set guioptions+=a.
Toto je ve výchozím nastavení povoleno v systémech X11 (kopie do PRIMÁRNÍHO), ale ne v MS Windows & OSX (protože výběr libovolného textu by přepsal vaši schránku).

Ne +clipboard?

Vim vyžaduje +clipboard příznak funkce, aby cokoli z toho fungovalo; můžete zkontrolovat, zda to váš Vim má, pomocí :echo has("clipboard") zevnitř Vim (pokud je výstup 0, ne present, if it „s 1, is), or checking the output of vim --version for +clipboard.

Většina distribucí systému Linux je dodávána s “ minimálním “ ve výchozím nastavení sestavení Vim, které +clipboard, ale obvykle si jej můžete nainstalovat:

  • Debian & Ubuntu: Nainstalujte vim-gtk3.
  • Fedora: nainstalujte vim-X11 a spusťte vimx místo vim ( další informace ).
  • Arch Linux: install gvim (toto umožní +clipboard také pro normální vim).

Můžete také pomocí xclip, xcopy nebo xsel zkopírovat text do schránky; viz následující otázky k řešení:

SSH

Schránku můžete použít také na vzdálených počítačích, pokud povolíte předávání X11 přes SSH. To je užitečné zejména u výše uvedeného tipu, protože pak můžete použít xclip pro přístup do schránky na ploše. Vim na počítači, ke kterému se připojujete, bude stále potřebovat +clipboard funkce.

To vyžaduje nastavení ForwardX11Trusted a mělo by lze provádět pouze s důvěryhodnými servery , protože to serveru dává téměř úplnou kontrolu nad vaší relací X11:

$ ssh -XY myhost 

Chcete-li, aby tato nastavení byla trvalá (abyste nemuseli pokaždé přidávat -XY), můžete něco podobného udělat ve svém ~/.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 vylepšil podporu schránky. Integrované rozhraní bylo odstraněno a nahrazeno systémem, který volá externí nástroj, například xclip, xsel nebo pbcopy / pbpaste.

Mělo by se to automatizovat atically pick up these utilities and use them. V OS X pbcopy a pbpaste by měly být ve výchozím nastavení k dispozici, v systému Linux budete pravděpodobně chtít nainstalovat xclip, protože to je nejvíce dostupné (ve skutečnosti existují dvě verze xsel s nekompatibilními příznaky . je opravdu hloupý).

Viz také :help clipboard v Neovimu.

Komentáře

  • ssh -Y znamená -X, takže -X lze vynechat.
  • Velmi zajímavý vedlejší účinek toho, jak se to naučit (několik let před) pro mě bylo poznání, že " může vybrat mnoho pojmenovaných registrů. "+ není kouzlo, ‚ s stačí zaregistrovat +. Takže například pokud chcete zkopírovat tři věci současně a vložit každou z nich jednu po druhé, můžete "1y, "2y a "3y a l ater "1p, "2p a "3p. To je opravdu mocné a neexistuje téměř v žádném jiném editoru. Dalším zajímavým využitím je prohlížení uložených maker. Pokud například nahráváte pomocí qq, ale uvědomíte si, že to musíte opravit, můžete: v dočasném řádku "qp opravit it a "qd.
  • Jen poznámka: OS X má dvě samostatné schránky. K jednomu se přistupuje pomocí Cmd-C a Cmd-V a druhému pomocí klávesových zkratek emacs Ctrl-K a Ctrl-Y.
  • @shahbaz – pravděpodobně je pro tento účel lepší použít dopisní registry, protože očíslované se změní, kdykoli je text smazán.
  • Kopírovat & vložení, jak je popsáno v otázce, je určeno pro počítač. Je pravda, že instalace balíčku gvim vedle vim vám poskytne funkce schránky. ale v prohlížečích souborů se vám pak nabízejí dva textové editory pro otevírání souborů! A vypadá to ošklivě. Proto je lepší instalovat pouze balíčky vim a vim-gui-common. Později poskytuje funkce schránky bez nutnosti instalace gvim. Toto je na Linuxu Debian 10.

Odpověď

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

set clipboard=unnamedplus 

Tím se změní výchozí registr Vim na + registr, který je propojen se systémovou schránkou.Z :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") 

komentářů

  • Proč to u mě nefunguje, když trháte & vkládání mezi instancemi vim (každá v samostatném terminátorovém terminálu)?
  • Pokud používáte Linux a Vim byl sestaven s funkcí + X11 a máte nastavenou clipboard = unnamedplus, měli byste být schopni vytrhnout řádek v jedné instanci vim a vložit ji do jiné instance vim. Měli byste také být schopni jej vložit do jakékoli jiné aplikace pomocí kláves CTRL + V nebo SHIFT + INSERT. Pomocí :version ve Vim můžete zjistit, zda se + X11 objeví v seznamu zahrnutých funkcí. Můžete také zkontrolovat, zda je funkce ‚ unnamedplus ‚ k dispozici u :if has('unnamedplus')⏎ echo 'yes'⏎ endif Pokud jste ne na Linuxu, pak byste měli použít nepojmenovaný místo nepojmenovaný plus.

Odpověď

Ostatní odpovědi se týkají kopírování text z vyrovnávací paměti do systémové schránky. Další běžnou operací je zkopírovat text z jiného registru do schránky. Například pokud jste již nějaký text vytrhli do " (výchozí registr), můžete tento registr načíst do schránky.

Můžete udělejte to pomocí :let:

  • let @+=@" — zkopíruje výchozí registr do schránky
  • let @*=@" — zkopíruje výchozí registr do primárního výběru X11 („myš schránka „)
  • let @+=@a — kopírovat z registru a do schránka
  • atd.

Všimněte si, že toto funguje obecně pro registry: let @a=@b zkopíruje registr b k registraci a.

Odpověď

Zapnuto sestavení, která to podporují, je registr s názvem * schránkou systému. Chcete-li zkopírovat text z Vimu do schránky systému, můžete vyberte text pomocí vizuálního režimu a poté jej stisknutím "* y zkopírujte do systémové schránky.

Naopak použijte "* p k vložení textu ze systémové schránky do Vimu.

Odpověď

Pokud nemůžete přijít na to, jak se dostat +clipboard do práce, což jsem z nějakého důvodu nemohl, pak můžete toto.

Za předpokladu, že chcete zkopírovat pouze část souboru, přejdu shift + v do vizuálního režimu a zvýrazněte pouze řádky, které chci zkopírovat. Pak to udělám.

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

Vysvětlení

  • "<,"> – znamená vás použitý vizuální režim k výběru rozsahu (tento typ nezadáváte)
  • w !{cmd} – zapíše rozsah na standardní hodnotu cmd, více na :help w_c
  • wl-copy a xclip jsou programy, do kterých můžete posílat text, a „přidají jej do vaší systémové schránky

Také, jakmile je to ve vaší historii, nemusíte psát celou věc znovu. Stačí vybrat pomocí vizuálního režimu, zadejte w, poté stiskněte nahoru a příkaz by se měl automaticky doplňovat. Rovněž také nemusíte používat vizuální režim. Můžete nastavit libovolný rozsah, který chcete.

Komentáře

  • Hlasování pro toto (nad jinou podobnou odpovědí), protože tato poskytuje vysvětlení. Mimochodem, poznámka pro mě nebo jiné čtenáře: při použití xclip NEMUSÍTE přidat tento -selection clipboard parametr, který je příliš dlouhý na psaní. Výchozí :'<,'>w !xclip zkopíruje obsah do “ primárního “ tj. Copy-on- vyberte schránku, kterou lze vložit prostředním tlačítkem myši.

Odpovědět

Doporučuji použít Gvim, a přidejte toto do svého .vimrc:

source $VIMRUNTIME/mswin.vim behave mswin 

To umožňuje podporu Ctrl C , Ctrl X , Ctrl V jako poznámkový blok ve Windows.

Upozorňujeme, že to také přidá některé další běžné klávesové zkratky systému Windows, například Ctrl S pro :w, Ctrl A pro výběr všeho atd.

Odpověď

Měl jsem potíže s schránka systému a vim uvnitř tmux.

Bylo to vyřešeno pomocí xsel nebo xclip, jako v tomto příkladu:

1.) visu Ally select a block text in normal mode: V<motionkey>

2.a) s xsel spuštěním ex: :"<,">w !xsel -b

2.b) s xclip spustit ex: :"<,">w !xclip -selection clipboard

3.) vložit do jiného programu

… a nyní nmap toto jako preferované.

Tyto možnosti (-b nebo -selection clipboard) v podstatě znamenají, že program (xsel nebo xclip) je odeslán na pozadí a čeká na další program vložte obsah, aby mohl „zasahovat“.

(na manjaro s i3, xfce4-terminal, tmux)

Odpověď

Toto je chování Chtěl jsem, když se jednalo o systémovou schránku:

  • Vytržení řádku s novým řádkem funguje
  • Vytržení řádku bez nového řádku funguje
  • Vytržení všeho, co je vizuálně vybraná díla
  • Řezané práce
  • Řezání čáry s novými řádky funguje
  • Řezání čáry bez nových řádků

Dle prací Mám na mysli: Jsem stále schopen použít p k vložení ve vimu a mohu také použít systémovou schránku. V zásadě chci, aby kopírování a vkládání fungovalo podle očekávání a já ne “ Nechci přeplnit svou systémovou schránku víc, než je nutné.

Moje technika spočívala v mapování běžných příkazů pro vytrhávání, vyjímání a mazání, které mají používat systémovou schránku, přidáním těchto řádků do mého ~/.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 

Klíčový přehled z https://anuragpeshne.github.io/essays/vim/7.html blogový příspěvek je:

Rekurzivní mapování je zlé, vždy používejte nerekurzivní mapování. (noremap)

Komentáře

  • Co " dělat? První odpověď již vysvětlila, k čemu * slouží (s odkazem na primární schránku), ale ‚ nevidím nikde žádné vysvětlení k čemu " slouží a proč to dělá příkaz funkční.
  • Není to ‚ zřejmé, protože ‚ re pravděpodobně zvyklý na citát používaný k obcházení slov, například "foo"; pro vim "* je však ve skutečnosti název “ registru “ (a vim koncept), který se připojuje k systémové schránce. Pokud otevřete vim a napíšete :registers, uvidíte názvy dalších registrů jako: "", "0, "1 atd. Tento článek mi připadá užitečný pro získání informací o registrech: brianstorti.com/vim-registers

Odpovědět

Pokud váš vim nepodporuje +clipboard, můžete použít fakeclip plugin pro Linux, Mac, Windows, tmux, screen, …

Odpověď

Každá další odpověď zahrnovala všechny důležité věci o registrech. Chtěl bych přidat ještě jednu věc, kterou používám.

Ve Vimu existuje způsob, jak přímo zkopírovat vizuálně vybrané text do schránky. Jednoduše vložte do svého vimrc souboru:

set guioptions+=a 

A s tím, kdykoli vizuálně vyberete nějaký text, bude zkopírován do vašeho Schránka. Další informace o tomto, :help guioptions

BTW, je pouze pro gVim.

Komentáře

  • guioptions+=a je také uveden v odpovědi Carpetsmoker ‚.
  • @muru Ano, omlouvám se . To jsem předtím ‚ neviděl. Právě jsem to viděl.

Odpovědět

Můžete také použít globální příkaz k vložení nějakého konkrétního vzoru na Schránka. Může to být užitečné v situacích, kdy máte informace rozptýlené v souboru a ruční zpracování je náchylné k chybám a únavě.

Nejprve vyčistěte registr, který bude přijímat informace

:let @a="" 

Poté na něj zkopírujte všechny řádky obsahující vzor

:g/pattern/yank A 

Nakonec převeďte (zkopírujte) informace do systémové schránky

:let @+=@a 

pokud se pokusíte zkopírovat každý řádek obsahující „vzor“ přímo do schránky, nebude fungovat, protože schránka nemá možnost připojit nový obsah, proto zde používáme běžný registr vim pro uložení všech řádků obsahujících vzor najednou a jeho následné vložení do schránky.

OBS: Před použitím je nutné řádkovat registr a použití verze registru UPPERCASE nám umožňuje přidat obsah, jinak nebude fungovat.

Odpověď

MacVim Cmd + x/c/v pro vyjmutí / kopírování / vložení

Pokud používáte MacVim, obvyklé Cmd+x/c/v jsou definovány v $ VIMRUNTIME / macmap.vim , který je získáván ve výchozím nastavení, a proto je k dispozici bez konfigurace:

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

Jejich použití však může vést k uživateli vim, který nezná způsobem a jsou ztraceny v cizím počítači / prostředí.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *