Existuje způsob, jak zkopírovat blok textu do systémové schránky, abych jej mohl vložit do jiného programu?
Komentáře
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ťtevimx
místovim
( 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
vedlevim
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íčkyvim
avim-gui-common
. Později poskytuje funkce schránky bez nutnosti instalacegvim
. 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 registrua
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í hodnotucmd
, více na:help w_c
-
wl-copy
axclip
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í.
cpip
,cpi{
.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.