it-swarm-eu.dev

Jak vim vložit z (a kopírovat do) schránky systému?

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?

673
Santosh Kumar

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.

793
Conner

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.

126
neel

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
38
lis2

Linux

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.

Viz také

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

37
Todd A. Jacobs

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
33
Danniel Little

Věřím, že tato otázka si zaslouží objektivnější odpověď.

Vstup do režimu Vkládání

  • ESC
  • : nastavit pastu
  • lis i
  • SHIFT + Insert (s textem zkopírovaným do schránky)


Leaving Paste Mode

  • ESC
  • : set nopaste
  • lis i

Vložili jste text a můžete znovu psát.

19
ivanleoncz

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.

http://linux.die.net/man/1/xsel

16
The Demz

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.

12
jinksPadlock

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>

9
rotestein

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.

6
lovecraftian

To funguje pro mě: Ctrl+Shift+V

3
Boseam

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

2
barlop

Nejjednodušší řešení, které funguje také mezi různými stroji Linuxu prostřednictvím ssh je:

  1. 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)

  2. Přidejte následující řádky do souboru .vimrc:

set clipboard=unnamedplus
set paste
  1. Pokud se přihlásíte na jiný počítač přes ssh, použijte volbu -Y: 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.

1
chao

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žim
  • v_CTRL-X : odečíst [počet] od čísla
  • v_CTRL-V : blockwise Vizuální režim
  • i_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í
1
ericbn

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.

1
Nobu

Co opravdu potřebujete je EasyClip . Udělá to jen tak a mnohem víc ...

1
Scott Wade

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

1
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.

1
anonymous

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.

"Space+p nebo "Space*p vložit.

0
Arthur F

Pokud používáte myš jako první

 :set paste 

Pak bude vložen right click mouse a obsah ve vyrovnávací paměti

0
Mohammed Rafeeq

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.

  • Vyberte text, který chcete kopírovat vizuálním režimem v
  • Stiskněte : (automaticky se rozbalí a zobrazí :'<,'>)
  • Zadejte y * nebo y + (v závislosti na vašem systému), chcete-li vybrat vybraný text do systémové schránky
0
NateW

Existují 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

0
user1898814

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.

0
eel ghEEz

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.

0
dr0i

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.

0
vincent mathew