Jak skopiować wybrane linie do schowka w vimie


Odpowiedzi:


105

SHIFTVprzełącza cię w tryb zaznaczania linii. Następnie "*yszarpie aktualnie wybrane linie do *rejestru, którym jest schowek. Istnieje kilka różnych rejestrów do różnych celów. Zobacz sekcję, selection and drop registersaby uzyskać szczegółowe informacje na temat różnic między rejestrami *i +w systemach Windows i Linux.


10
W Linuksie + to schowek globalny, * to schowek wyboru, podczas gdy w systemie Windows oba są mapowane do schowka globalnego.
Mohnish

74

Jeśli korzystasz z systemu Linux i używasz VIm w wersji 7.3.74 lub nowszej (wersja instalowana w systemie Ubuntu 11.10 i nowszych spełnia to wymagania), możesz to zrobić

set clipboard=unnamedplus

który umieści szarpany tekst w globalnym schowku i pozwoli na wklejenie go z globalnego schowka bez konieczności używania specjalnych rejestrów. W przeciwieństwie do rozwiązania ldigas, będzie to również działać na wersjach VIm bez interfejsu GUI.


8
Działa to tylko wtedy, gdy zainstaluję vim-gnomepakiet zamiast vim.
dan-klasson

4
@ dan-klasson: ta opcja wymaga vima, który został skompilowany z obsługą schowka. Możesz sprawdzić, czy tak jest, wpisując vim --version | grep "+xterm_clipboard".
BenC

Wygląda na to, że działa przy kopiowaniu do innych programów innych niż vim, ale kiedy wchodzę w tryb wstawiania w vimie i używam "shift + insert" do wklejenia ze schowka, tylko pierwsze dwie linie są wklejane ... Zainstalowałem vim-gnome ; brakuje mi czegoś innego?
t2k32316

1
Jeśli korzystasz z macOS, prawdopodobnie będziesz musiał użyć clipboard=unnamedzamiast tego ( vim.wikia.com/wiki/Accessing_the_system_clipboard )
stream z

13
set guioptions+=a

will, ... uhmm, w skrócie, za każdym razem, gdy coś wybierzesz / szarpniesz, umieść to również w schowku (nie Vima, ale globalna klawiatura systemu okien). W ten sposób nie musisz myśleć o szarpaniu rzeczy do specjalnego rejestru.


2
//, Do jakich systemów operacyjnych i / lub wersji Vima odnosi się ta rada?
Nathan Basanese

10

W przypadku GVIM naciśnij, vaby przejść do trybu wizualnego; zaznacz tekst i naciśnij, Ctrl+Insertaby skopiować zaznaczenie do globalnego schowka.

Z menu widać, że klawisz skrótu to "+ynp. Przytrzymaj klawisz Shift, następnie naciśnij ", +a następnie zwolnij Shift i naciśnij y(kłopotliwe w porównaniu do Shift + Insert).


Dlaczego ta odpowiedź nie jest popularna? :(
Ankit Shubham

6

Jeśli używasz Vima w MAC OSX, niestety jest dostarczany ze starszą wersją i nie jest zgodny z opcjami schowka. Na szczęście homebrew może łatwo rozwiązać ten problem.

zainstaluj vim:

brew install vim --with-lua --with-override-system-vim

zainstaluj wersję gui vima:

brew install macvim --with-lua --with-override-system-vim

zrestartuj terminal, aby odniosły skutek.

dołącz następujący wiersz do ~ / .vimrc

set clipboard=unnamed

teraz możesz skopiować linię w vimie za pomocą yy i wkleić ją w całym systemie.


//, właśnie przetestowałem to na OSX 10.12.3 i działało poprawnie po zainstalowaniu zarówno najnowszego Vima, jak i wersji GUI Vima z latets, tak jak tutaj zalecałeś. Dzięki, @anonimowy.
Nathan Basanese

4

Zainstaluj „xclip”, jeśli nie masz ...

sudo apt-get install xclip

Xclip umieszcza dane w schowku „zaznaczenie / zaznaczenie”, który klikasz środkowym przyciskiem myszy, aby wkleić, w przeciwieństwie do „ctrl + v”

W vimie użyj poleceń ex:

7w !xclip

lub

1,7w !xclip

lub

%w !xclip

Następnie kliknij środkowym przyciskiem myszy, aby wkleić do dowolnej innej aplikacji ...


4

Jeśli vim jest skompilowany z obsługą schowka, możesz użyć "*yznaczenia: przeciągnij wizualnie zaznaczony tekst do rejestru *(„*” oznacza schowek)

Jeśli nie ma obsługi schowka, myślę, że innym sposobem jest użycie Ctrl+Insertpo wizualnym zaznaczeniu tekstu w vimie.


3

Dodałem następujący wiersz do mojego .vimrc

vnoremap <F5> "+y<CR>

Umożliwia to skopiowanie zaznaczonego tekstu do schowka przez naciśnięcie F5. Aby to zadziałało, musisz być w trybie wizualnym.


1
Dodaj do ~/.vimrcDziękuję, to jest znacznie lepsze.
jaggedsoft

2

Dodaj następujący kod do swojego .vimrc:

if has('clipboard')
    if has('unnamedplus')  " When possible use + register for copy-paste
        set clipboard=unnamed,unnamedplus
    else         " On mac and Windows, use * register for copy-paste
        set clipboard=unnamed
    endif
endif
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.