Na rozdíl od jiných editorů ukládá vim kopírovaný text do své vlastní schránky. Je pro mě velmi těžké kopírovat text z webové stránky a vložit jej do aktuálního pracovního souboru. Stává se tak, že musím buď otevřít gedit, nebo ho zadat ručně.
Mohu vim vložit z a do schránky systému?
Registry "*
a "+
jsou pro schránku systému (:help registers
). V závislosti na vašem systému mohou dělat různé věci. Například v systémech, které nepoužívají X11 jako OSX nebo Windows, se registr "*
používá pro čtení a zápis do systémové schránky. Na systémech X11 lze použít oba registry. Pro více informací viz :help x11-selection
, ale v podstatě "*
je analogický s X11 PRIMÁRNÍM výběrem (který obvykle kopíruje věci, které vyberete myší a pastami pomocí prostřední tlačítko myši) a "+
je obdobné jako u X11 CLIPBOARD výběr (což je vlastní schránka).
Pokud vše, co šlo přes hlavu, zkuste pomocí "*yy
nebo "+yy
zkopírovat řádek do schránky systému. Za předpokladu, že máte vhodné možnosti kompilace, by měl fungovat jeden nebo druhý. Možná budete chtít přeměnit to na něco výhodnější pro vás. Například můžete v souboru ~/.vimrc zadat vnoremap <C-c> "*y
, abyste mohli vizuálně vybrat a stisknout Ctrl+c vyskočit do schránky systému.
Mějte na paměti, že kopírování/vkládání ze systémové schránky nebude fungovat pokud :echo has('clipboard')
vrací 0. V tomto případě není vim zkompilován s funkcí +clipboard
a budete muset nainstalovat jinou verzi nebo znovu zkompilovat . Některé linuxové distribuce standardně dodávají minimální instalaci vimu, ale obecně, pokud nainstalujte balíček vim-gtk
nebo vim-gtk3
můžete získat další funkce.
Můžete se také podívat na volbu 'clipboard'
popsanou v :help cb
. V tomto případě můžete :set clipboard=unnamed
nebo :set clipboard=unnamedplus
provést všechny operace vyhození/smazání automaticky zkopírovat do systémové schránky. To by mohlo být nepříjemností v některých případech, kdy ukládáte něco jiného do schránky, protože to přepíše.
Chcete-li vložit, můžete použít "+p
nebo "*p
(opět v závislosti na vašem systému a/nebo požadovaném výběru) nebo je můžete namapovat na něco jiného. Typicky je zadávám, ale často se nacházím v režimu vkládání. Pokud jste v režimu vkládání, můžete je stále vkládat pomocí správného odsazení pomocí <C-r><C-p>*
nebo <C-r><C-p>+
. Viz :help i_CTRL-R_CTRL-P
.
Za zmínku stojí také možnost paste
vim (:help paste
). Toto vloží vim do speciálního "režimu vkládání", který zakáže několik dalších možností, což vám umožní snadno vložit do vimu pomocí svého terminálového emulátoru nebo známé zkratky pro vložení multiplexeru. Jednoduše zadejte :set paste
, abyste jej aktivovali, vložte obsah a potom zadejte :set nopaste
, abyste jej zakázali. Alternativně můžete pomocí volby pastetoggle
nastavit kód klíče, který přepíná režim (:help pastetoggle
). Doporučuji používat registry namísto těchto možností, ale pokud jsou stále příliš děsivé, může to být vhodné řešení, když si vylepšujete své vim chops.
Podrobnější informace naleznete v tématu :help clipboard
.
Do aplikace vim můžete kopírovat zkratku terminálu gnome pro vložení. Vytvořte soubor v režimu vkládání a použijte
Ctrl.Shiftněkteré __code__v.
Remember beforehand to
:set paste
to avoid messing with the indentation.
Tato konfigurace funguje pro kopírování a vkládání
" copy and paste
vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa
V mém systému Linux se mapy +
a *
mapují na výběr X11, který lze vložit prostředním tlačítkem myši. Když jsou použity :set clipboard=unnamed
a :set clipboard=unnamedplus
, pak registry registrují do schránky a mohou být vloženy pomocí CTRL-V.
Specifika se zdají být poněkud konfigurační a závislá na systému, takže vaše kilometry se určitě liší. Mělo by vás však určitě poukazovat správným směrem.
To jsou řádky, které potřebujete pro tento účel:
set clipboard+=unnamed " use the clipboards of vim and win
set paste " Paste from a windows or from vim
set go+=a " Visual selection automatically copied to the clipboard
Věřím, že tato otázka si zaslouží objektivnější odpověď.
Vstup do režimu Vkládání
Leaving Paste Mode
Vložili jste text a můžete znovu psát.
schránka
Pro uložení tohoto výběru je k dispozici speciální registr, jedná se o "* registr. Nic zde není vloženo, pokud se informace o tom, který text je vybrán, nezmění (např. Levým tlačítkem myši někam) nebo když jiná aplikace chce text se vloží do "* registru". Chcete-li například oříznout řádek a učinit z něj aktuální výběr/umístit jej na kartu CLIPBOARD:
"*dd
Podobně, když chcete vložit výběr z jiné aplikace, např. Kliknutím na prostřední tlačítko myši, výběr se nejprve vloží do "* rejstříku a pak se umístí jako jakýkoliv jiný registr. Například, chcete-li vybrat výběr (obsah CLIPBOARD):
"*p
registryE354
> There are nine types of registers:
> 1. The unnamed register ""
> 2. 10 numbered registers "0 to "9
> 3. The small delete register "-
> 4. 26 named registers "a to "z or "A to "Z
> 5. four read-only registers ":, "., "% and "#
> 6. the expression register "=
> 7. The selection and drop registers "*, "+ and "~
> 8. The black hole register "_
> 9. Last search pattern register "/
Vložit ze schránky
1. Clipboard: Copy
2. Vim insertmode, middle mouse key
Zkontrolujte, zda podpora terminálu X11 v terminálu
Pokud chcete spustit Vim v terminálu, musíte hledat verzi Vimu, která byla kompilována s podporou schránky. Zkontrolujte konzolu X11-clipboard support:
% vim --version
Pokud vidíte "+ xterm_clipboard", můžete jít.
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
X server udržuje tři volby, nazvané:
PRIMÁRNÍ, SEKUNDÁRNÍ A KLIPOVNA
Výběr PRIMARY se obvykle používá k implementaci kopírování a vkládání prostředním tlačítkem myši. Výběry SECONDARY a CLIPBOARD jsou v aplikačních programech méně využívány.
Vyzkoušel jsem výše uvedené návrhy a žádný z nich nepracoval v mém prostředí. (Klon Windows PuTTY přes ssh)
Objevilo se několik dalších googlingů: https://unix.stackexchange.com/questions/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard
Jeden z komentářů navrhl použití SHIFT+INSERT
který dělal trik pro vložení z mého desktopu schránky do Vimova vyrovnávací paměti. Ctrl-C
již pracoval na kopírování do schránky ve Vimu.
Nemám + schránku, takže jsem přišel s tímto alternativním řešením pomocí xsel:
Přidat do ~/.vimrc:
vnoremap <C-C> :w !xsel -b<CR><CR>
Rychlá poznámka pro lidi, jejichž instalace nepodporuje registry * a +. Není nutné stahovat novou instalaci vim pro vložení ze schránky. Zde je alternativní metoda:
1) Nainstalujte parcellite (správce schránky s nízkou pamětí);
2) Do souboru .vimrc přidejte následující:
command Clip r !parcellite -c
3) Restartujte vim.
Když zadáte: Clip jako ex příkaz, obsah schránky bude vložen do kurzoru. Nový příkaz můžete také namapovat na funkční tlačítko, abyste to mohli provést jedním stiskem klávesy.
To funguje pro mě: Ctrl+Shift+V
Následovat Connerovu odpověď, která byla skvělá, ale C-R C-p +
a C-R C-p *
v režimu vkládání je trochu nepohodlná. Ditto "*p
a "+p
z příkazového režimu.
a VIM guru navrhl následující mapu k mapování C-v
na to, co C-r C-p +
dělá.
Můžete mít
:inoremap <C-v> <C-o>"+p
pouze pro režim vkládánípokud opravdu chcete přepsat blokový vizuální režim (nedoporučuje ho jako vizuální režim je dobrý), můžete mít
map <C-v> "+p
Nejjednodušší řešení, které funguje také mezi různými stroji Linuxu prostřednictvím ssh
je:
Zkontrolujte, zda vim podporuje schránku X-11: vim --version | grep clipboard
. Pokud hlásí zpět -clipboard
a -xterm_clipboard
, měli byste nainstalovat buď vim-gtk
nebo vim-gnome
(gvim na Arch Linuxu)
Přidejte následující řádky do souboru .vimrc
:
set clipboard=unnamedplus set paste
ssh -Y machine
Kopírování a vkládání by nyní mělo fungovat přesně podle očekávání na jednom a na různých počítačích pouze pomocí y
pro yank a p
pro vložení. NB modifikovat .vimrc
na všech počítačích, kde chcete tuto funkci použít.
Na základě odpovědi @ lis2 používám jednodušší konfiguraci, která na konci nenutí donutit režim vkládání:
" Copy and paste
if has('clipboard') && !has('gui_running')
vnoremap <C-c> "+y
vnoremap <C-x> "+d
vnoremap <C-v> "+p
inoremap <C-v> <C-r><C-o>+
endif
Všimněte si, že všechny tyto přepíše výchozí mapování Vim:
v_CTRL-C
: stop Vizuální režimv_CTRL-X
: odečíst [počet] od číslav_CTRL-V
: blockwise Vizuální režimi_CTRL-V
: vložit další ne-číslice doslovně, což je také mapováno na i_CTRL-Q
Jako alternativu lze použít klávesy inspirované slovníky "yank", "delete" a "put": <C-y>
, <C-d>
a <C-p>
. Ty by pouze přepsaly jedno výchozí mapování:
i_CTRL-P
: zpětné vyhledávací klíčové slovo pro dokončeníV horní části nastavení :set clipboard=unnamed
byste měli použít mvim -v
, které můžete získat pomocí brew install macvim
, pokud používáte vim na Terminal.app na Mac OS X 10.9. Výchozí vim nepodporuje možnost schránky.
Co opravdu potřebujete je EasyClip . Udělá to jen tak a mnohem víc ...
Za zmínku stojí i to, že na OSX pomocí Vimu si můžete vybrat text pomocí myši, Cmd-C zkopírovat do systémové schránky OSX a zkopírovaný text bude k dispozici ve schránce mimo Vim.
Jinými slovy, OSX s ním zachází tak, jako by se jednalo o běžné okno, a to je místo, kde se hodí mnoho-zlověstné tlačítko Apple Command.
B-30
Pokud používáte vim v MAC OSX, bohužel přichází se starším verionem a nevyhovuje možnostem schránky. Naštěstí může homebrew tento problém snadno vyřešit.
install vim:
brew install vim --with-lua --with-override-system-vim
install gui veri vim:
brew install macvim --with-lua --with-override-system-vim
restartujte terminál, aby se projevilo.
přidat následující řádek do ~/.vimrc
set clipboard=unnamed
nyní můžete kopírovat řádek vim s yy
a vložit jej celý systém.
U některých mezinárodních klávesnic budete možná muset stisknout tlačítko "+Space získat "
.
Takže v těchto případech budete muset stisknout "Space+y nebo "Space*y kopírovat.
A "Space+p nebo "Space*p vložit.
Pokud používáte myš jako první
:set paste
Pak bude vložen right click mouse
a obsah ve vyrovnávací paměti
Jiná řešení jsou dobrá, pokud chcete změnit svůj vimrc, atd. Chtěl jsem ale jednoduchý způsob, jak kopírovat z vim na můj systém klávesnice. To je to, s čím jsem přišel.
v
:
(automaticky se rozbalí a zobrazí :'<,'>
)y *
nebo y +
(v závislosti na vašem systému), chcete-li vybrat vybraný text do systémové schránkyExistují dva jednoduché způsoby, jak toho dosáhnout. Vytvořte soubor v režimu vkládání a 1) stiskněte prostřední tlačítko (rolovací kolečko) myši nebo 2) Ctrl + Shift + V
Když používám vim Debianu, který není integrován s Gnome (vim --version | grep clip # nevykazuje žádnou podporu schránky), můžu kopírovat do schránky po držení klávesy Shift a výběru textu pomocí myši, stejně jako u všech další program prokletí. Jak jsem zjistil z komentáře @ Connera, je to terminál (gnome-terminal v mém případě), který vypne hlášení událostí myši, když zjistí můj Shift press. Myslím, že programy založené na prokletí mohou přijímat události myši po odeslání určité sekvence Escape do terminálu.
Vzhledem k tomu, že vim 8 right click umožňuje ve výchozím nastavení vizuální režim. Tím se zabrání "normálnímu" kopírování a vkládání (nazývají se "vada designem" https://github.com/vim/vim/issues/1326 ). Opravte to následujícím způsobem:
echo "set mouse-=a" >> ~/.vimrc
.
Ukončete a restartujte vim.
Pokud jste v systému Windows a chcete vložit obsah systémové schránky pomocí p
, zadejte tento příkaz.
:set clipboard = unnamed
To vyřešilo můj problém.