Jak skopiować tekst z vima do zewnętrznego programu?


84

Próbuję skopiować i wkleić tekst z vima. Robię v , aby wejść w tryb wizualny, a następnie y raz Wybrałem mój blok.

Wygląda na to, że skopiuje tekst do schowka vima, ponieważ p go wklei. Ale w innym programie (np. Chrome) kliknięcie prawym przyciskiem myszy-> wklej nie wkleja poprawnego tekstu. Jak skopiować tekst do odpowiedniego schowka?

Odpowiedzi:


62

Poniższe będzie działać tylko wtedy vim --version, gdy wskaże, że masz +xterm_clipboardfunkcję. Jeśli nie, będziesz musiał zainstalować dodatkowe pakiety lub ponownie skompilować vim z tą dodaną funkcją.


Istnieją dwie opcje:

"+y

kopiuje do „zwykłego” bufora schowka (aby wkleić za pomocą Ctrl + V, kliknij prawym przyciskiem myszy i wybierz „Wklej” itp.), a

"*y

kopiuje do zaznaczenia X11 - możesz wkleić z tego bufora za pomocą środkowego kliknięcia.

Zauważ, że "*i "+działaj w obie strony. Więc jeśli wybrałeś jakiś tekst w innej aplikacji, możesz go wkleić do vima, "*pa jeśli skopiowałeś jakiś tekst (używając, powiedzmy, Ctrl-C), możesz go wkleić do vima przy użyciu "+p.


@ Tshepang to nie działa od kit. co powinienem zrobić ?
Rahul Patil

@RahulPatil Nie wiem; może zadać osobne pytanie, być może superużytkownikowi (ponieważ jest to narzędzie systemu Windows, byłoby tam mile widziane).
tshepang

@RahulPatil - jeśli używasz szpachli, edytujesz plik na zdalnym serwerze, a nie na komputerze lokalnym. Zasadniczo serwer zdalny nie będzie wiedział o schowku na komputerze lokalnym. Jeśli korzystasz z pulpitu Linuksa, możesz ssh z X przekazywaniem (pod warunkiem, że zainstalowałeś biblioteki X na serwerze), ale ponieważ putty działa w systemie Windows, nie masz X, więc nie możesz go przesłać dalej.
Hamish Downer

1
Witam wszystkich, Jak wpisać „+ y? Czy powinienem wpisać go w trybie wizualnym czy w trybie poleceń? Głupia sprawa, ale nie jestem w stanie tego
rozgryźć

@AlindBillore: W trybie komend. Dosłownie, naciśnij klawisze shift'następnie shift=następnie y(nie wszystkie na raz, jeden po drugim, z wyjątkiem zmian oczywiście).
Reid

31

Jeśli używasz vim> = 7.3.74, możesz faktycznie umieścić to w swoim vimrc:

set clipboard=unnamedplus

Który automatycznie użyje +bufora (schowka systemowego) domyślnie. Następnie, aby szarpać (kopiować), wystarczy użyć zwykłego ypolecenia itp.

Uważam jednak, że takie zachowanie jest dość irytujące, ponieważ polecenia takie jak dumieszczanie tekstu, na którym operują, są w domyślnym buforze, co oznacza, że ​​na przykład nie mogłem zrobić szybko ddi wkleić linii z Internetu.


2
+ to rejestrator schowka
Kit Ho

1
Jeśli chodzi o twój ostatni punkt, ddoznacza „wytnij jedną linię”, aby było to oczekiwane zachowanie. W rzadkim przypadku, gdy chcesz usunąć wiersz z zapomnienia, załatwi sprawę "_dd.
user7089

również jak zauważa @HamishDowner w swojej odpowiedzi: Poniższe będzie działać tylko wtedy vim --version, gdy wskaże, że masz +xterm_clipboardfunkcję. Jeśli nie, będziesz musiał zainstalować dodatkowe pakiety lub ponownie skompilować vim z tą dodaną funkcją.
rudolph9

24

Przytrzymaj klawisz Shift i zaznacz tekst za pomocą kursora myszy.
Tekst zostanie skopiowany do schowka.

Działa to również w przypadku wklejania ze schowka do vima.

Żeby było jasne, działa to na vimterminalu, takim jak xterm.


Czy masz na myśli przytrzymanie klawisza Shift podczas wybierania tekstu? Tak to robię xterm.
nozimica

@nozimica: Tak.
Loop Space

Ta odpowiedź powinna mieć więcej głosów pozytywnych ...
whoan

@LoopSpace dla wyborów wielowierszowych spowoduje również skopiowanie numerów linii, gdy set nujest włączona. Prawdopodobnie więc chciałbyś przełączyć numery linii za pomocą skrótu lub uruchomić :set nonupolecenie przed każdym wyborem
Steven Pribilinskiy

W systemie MAC przytrzymaj klawisz opcji i zaznacz tekst kursorem myszy
abreschi

10

Uważam, że standard "+gPi "+ypolecenia są bardzo trudne w użyciu. Zmapowałem więc Ctrl-Ydo szarpania w schowku i Ctrl-Pwklejania ze schowka. Dodaj to do.vimrc

nnoremap <C-y> "+y
vnoremap <C-y> "+y
nnoremap <C-p> "+gP
vnoremap <C-p> "+gP

5

Nieważne, znalazłem odpowiedź - jest napisana w menu vima.

"+y

Bardzo intuicyjny.


Używasz gvim?
nozimica

@ nozimica- yeah
ripper234

1
Jest to również dostępne w vimie działającym w Xterm lub podobnym emulatorze terminali pod X (jeśli vim jest skompilowany z tą +xterm_clipboardfunkcją).
Gilles

3

Aby dodać odpowiedź nieokreśloną w vimie: możesz użyć Ctrl+Shift+Cdo skopiowania do schowka systemowego w Ubuntu (jeśli ta funkcjonalność jest zapewniana przez emulator terminala, gnome-terminal dla jednego zapewnia). Ctrl+Shift+Vwkleja do innego okna terminala, zwykłe Ctrl+Vwkleja do aplikacji GUI.

Dodatkowo, jeśli wybierzesz tekst w terminalu, a następnie kliknięcie środkowym przyciskiem, zostanie on wklejony ze schowka X11.


Z jakiegoś powodu to nie działa. Wystarczy wybrać w trybie wizualnym, skopiować za pomocą Ctrl-Shift-C, a następnie wkleić w innej aplikacji za pomocą Ctrl-Shift-V? Tekst nie jest dla mnie kopiowany.
ripper234

2
@ ripper234: to nie działa, jeśli używasz gvim. Jak powiedział crazy2be, ta funkcjonalność pochodzi z emulatora terminala.
Reid

@ ripper234: 1) Jest to funkcjonalność zapewniana przez emulator terminala (gnome-terminal dla jednego zapewnia), 2) Ctrl + Shift + V ma wkleić się do terminala , aplikacje GUI nadal używają Ctrl + V jak zwykle. Zmienię odpowiedź, aby była bardziej przejrzysta.
crazy2be

jeśli używasz mousedrag shift-control - zaznacz tekst, wklejanie kopii z okna jednego bufora staje się łatwe.
Stephan

2

Domyślnie, jeśli zainstalujesz lekką wersję vima, nie będziesz miał +xterm_clipboardfunkcji on ( vim --version | grep xterm), która jest potrzebna do używania rejestrów *i +poza vimem.

Aby go włączyć, musisz samodzielnie skompilować vima lub zainstalować wersję vima, która jest z nim wstępnie włączona. Kiedyś vim-gnome: sudo apt-get install vim-gnome. Jeśli wykonasz vim --version | grep xterm, zobaczysz, że jest teraz +xterm_clipboard.

Teraz spróbuj kopiowanie do +a *i powinno działać.


2

Kiedy sprawdziłem, mój vim nie obsługuje schowka:

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

Zainstalowałem vim-gnome, a następnie sprawdziłem ponownie

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

Teraz jestem w stanie skopiować i wkleić, używając odpowiednio „+ y” i „+ p.


1

Przytrzymaj klawisz SHIFT i zaznacz tekst, aby go skopiować.

Następnie wklej do innego programu za pomocą CTRL + v.

Działa w terminalu na moim Ubuntu 16.04. Nie jestem pewien co gvimdo innych systemów.

wprowadź opis zdjęcia tutaj


To nie działa.
Astrid

twórcza odpowiedź
vidur punj

0

Wystarczy dodać, jeśli coś działa, spróbuj przełączyć terminal, który otacza vima (jeśli używasz vima z terminala). Odkryłem, że na przykład schowek jest niedostępny przez guake, podczas gdy jest dostępny z terminalu gnome.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.