it-swarm-eu.dev

Jak zkopírovat text z vim do externího programu?

Snažím se kopírovat-vložit nějaký text z vim. Dělám v, abych vstoupil do vizuálního režimu, poté y jakmile jsem vybral svůj blok.

Zdá se, že text zkopíruje do schránky vimu, protože ho vloží p. Ale v jiném programu (např. Chrome) klepněte pravým tlačítkem myši-> vložit nevkládá správný text. Jak mohu zkopírovat text do správné schránky?

91
ripper234

Následující bude fungovat, pouze pokud vim --version znamená, že máte +xterm_clipboard Vlastnosti. Pokud ne, budete si muset nainstalovat další balíčky nebo zkompilovat vim s přidanou funkcí.


Ve skutečnosti existují dvě možnosti:

"+y

zkopíruje do "obvyklé" schránky schránky (takže můžete vložit pomocí Ctrl + V, kliknout pravým tlačítkem a vybrat "Vložit" atd.), zatímco

"*y

zkopíruje do výběru X11 - z tohoto bufferu můžete vložit prostředním kliknutím.

Všimněte si, že "* a "+ pracovat oběma způsoby. Takže pokud jste vybrali nějaký text v jiné aplikaci, můžete jej vložit do vim pomocí "*p a pokud jste zkopírovali nějaký text (např. pomocí Ctrl-C), můžete jej vložit do vim pomocí "+p.

70
Hamish Downer

Pokud používáte vim> = 7.3.74, můžete to skutečně vložit do svého vimrc:

set clipboard=unnamedplus

Který bude automaticky používat + buffer (systémová schránka) ve výchozím nastavení. Pak na yank (copy) stačí použít běžný příkaz y atd.

Zjistil jsem však, že toto chování je docela nepříjemné, protože příkazy jako d vloží text, na kterém pracují, do výchozí vyrovnávací paměti, což znamenalo, že nemohu udělat rychlý dd a vložit řádek například z internetu.

35
Reid

Podržte klávesu Shift a kurzorem myši vyberte text.
Text bude zkopírován do schránky.

Toto funguje také pro vložení ze schránky do vim.

Jasně to funguje pro vim běžící v terminálu, jako je xterm.

31
Andrew Stacey

Najdu standardní "+gP a "+y příkazy velmi obtížně použitelné. Takže jsem přemapoval Ctrl-Y za vyskočení do schránky a Ctrl-P pro vložení ze schránky. Přidejte to do .vimrc

nnoremap <C-y> "+y
vnoremap <C-y> "+y
nnoremap <C-p> "+gP
vnoremap <C-p> "+gP
11
Bernhard Heijstek

Nevadí, našel jsem odpověď - je to napsáno v menu vim.

"+y

Velmi intuitivní.

6
ripper234

Stačí přidat odpověď, která není specifická pro VIM: Můžete použít Ctrl+Shift+C pro zkopírování do systémové schránky v Ubuntu (pokud funkce poskytuje emulátor terminálu, poskytuje gnome-terminal pro jednoho). Ctrl+Shift+V vloží do jiného okna terminálu, běžné Ctrl+V vloží do aplikace GUI.

Pokud navíc vyberete text v terminálu a poté kliknete prostředním tlačítkem, bude vložen ze schránky X11.

4
crazy2be

Chcete-li jej zkopírovat, podržte klávesu SHIFT a vyberte text vybraný myší.

Pak vložte do jiného programu pomocí CTRL + v.

Pracuje v terminálu na mém Ubuntu 16.04. Nevíte o gvim a dalších systémech.

enter image description here

4
Andrzej Rehmann

Když jsem zkontroloval, můj vim nepodporoval schránky:

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

Nainstaloval jsem vim-gnome a pak znovu zkontroloval

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

Nyní jsem schopen kopírovat a vložit pomocí kláves „+ y“ a „+ p“.

3

Ve výchozím nastavení, pokud nainstalujete světlou verzi vim, nebudete mít +xterm_clipboard funkce zapnuta (vim --version | grep xterm), což je nutné pro použití * a + se registruje mimo vim.

Chcete-li ji povolit, musíte buď kompilovat vim sami, nebo nainstalovat verzi vim, která je dodávána s ním předvolená. Použil jsem vim-gnome: Sudo apt-get install vim-gnome. Pokud provedete vim --version | grep xterm, uvidíte, že je nyní +xterm_clipboard.

Nyní zkuste kopírovat do + a * a mělo by to fungovat.

2
laughing_man

Stačí přidat, pokud něco funguje, zkuste přepnout terminál, který zalomí vim (pokud používáte vim z terminálu). Zjistil jsem, že například schránka je nepřístupná hádáním, zatímco je přístupná z terminálu gnome.

0
gc5