Jak skopiować dane między różnymi instancjami vima?

41

Jeśli używam pierwszego vima do skopiowania linii (z yy), jak wkleić go do vima innego terminalu (z p)? Czy można to zrobić za pomocą polecenia lub ustawień? Czy mogę skopiować i wkleić do globalnego schowka systemowego?

Wiem, że możliwe są następujące sposoby, ale chcę prostszy:

  1. Nie chcę wychodzić z pierwszego vima i ponownie otwierać drugi vim.

  2. Nie chcę używać osobnego okna (z :sp).

sam
źródło

Odpowiedzi:

49

Najpierw musisz zainstalować vim z włączoną funkcją schowka. Aby pomieścić użytkowników ze środowiskami nie graficznymi (np. Użytkownicy Ubuntu Server) vimi vim-tinynie podłączać się do tej możliwości. Będziesz chciał zainstalować GVim Zainstaluj GVim , który zostanie uruchomiony graficznie lub w twoim terminalu. GVim zastąpi vimpolecenie.

Możesz przeciągnąć tekst do „bufora wycinania” z pierwszego vima, a następnie wkleić tekst do drugiego vima. Aby skopiować do globalnego bufora cięcia, użyj +rejestru. "Klucz pozwala na określenie, które zarejestrować do użycia, gdy robi yank lub wklej operacji.

W pierwszym vimie szarpnij linię do +rejestru:

"+yy

następnie, aby wkleić z +rejestru w drugim vimie:

"+p

Aby uzyskać więcej informacji na temat dostępnych rejestrów, sprawdź :help registers. Możesz także użyć "+pdo wklejenia tekstu skopiowanego z dowolnego innego źródła w systemie.

Jeremy Kerr
źródło
Niezależnie od tego, co jest warte, jeśli zainstalujesz GVim (pakiet może się nazywać coś takiego jak vim-gnome), pozycje menu bardzo często zawierają skróty klawiszowe, które będą wywoływać.
zpletan
1
Nie chcę instalować Gvima. Jak to zrobić w vimie?
trusktr
1
@trusktr faktycznie działa również w vimie. W tym Q & A on mówi, że potrzeba co najmniej vim 7.3.74 (co oznacza Ubuntu 11.10 lub później).
lędźwiowy
to w jakiś sposób nie działa, jeśli masz vima uruchomionego w tmuxie, a inny vim zaczął normalnie na zewnątrz - czy masz szansę obejść ten problem?
serup
"*yy, "*pdziała również. jeśli trafisz :reg, zobaczysz ten rejestr gwiazd
elquimista
20

Najlepsze rozwiązanie, które zadziałało dla mnie (nie wymagało ode mnie zmiany przyzwyczajeń związanych z klawiszami): https://stackoverflow.com/questions/9166328/how-to-copy-selected-lines-to-clipboard-in- wigor

po prostu włóż:

set clipboard=unnamedplus

w twoim .vimrc.

bhh1988
źródło
Naprawdę musiałem dodać set clipboard=unnamedplusw połączeniu z zainstalowanym GVimem. Byłem jednak w stanie użyć xfce4-terminal dla Vima zamiast faktycznego programu GVim.
jbrock
9

Podoba mi się rozwiązanie Billa i stworzyłem mapowanie:

vmap <leader>y :w! /tmp/vitmp<CR>                                                                   
nmap <leader>p :r! cat /tmp/vitmp<CR>

pierwszy w trybie wizualnym skopiuj wszystko do / tmp / vitmp, a drugi skopiuj zawartość z / tmp / vitmp w pliku

Samir Sadek
źródło
proste proste rozwiązanie - staromodny sposób - dzięki temu to dla mnie
zrobiłem
Co muszę wpisać w Vimie po dodaniu tego do .vimrc?
Witalij Zdanewicz
Musisz skonfigurować vima, abyś mógł użyć klucza wiodącego, a następnie y, aby skopiować, klucza wiodącego, a następnie p, aby wkleić.
Samir Sadek,
1
To jest ten jeden działa. używanie "*ywydaje się być zepsute na serwerach
ospider
o mój. Szukałem godzin na ten temat, używając vim w tmux w dockerze. Mój normalny vimrc, który już miał nienazwany / nienazwany plus, NIE działał w vimie w tmuxie w dockerze. Nic też nie znalazłem w Internecie. Jednak TO wydaje się działać na WSZYSTKICH maszynach! W oknie dokowanym, na komputerze Mac i natywnie w Arch. Dziękuję Ci!!
Tommy
5

Poruszam się między różnymi maszynami z rodziny Unix i stwierdziłem, że zawsze działa dla mnie następująca sekwencja:

W sesji źródłowej vi:

  1. Użyj, ESC m aaby zaznaczyć pierwszą linię
  2. Służy ESC m bdo zaznaczania ostatniej linii
  3. Służy :'a,'b w! xferdo zapisywania zakresu do pliku scratch

W sesji docelowej:

  1. Przesuń kursor do linii wstawiania
  2. Służy ESC :r xferdo czytania w tekście

Wiem, że to nie jest ładne, ale zawsze działa dla mnie!

Rachunek
źródło
2

To jest naprawdę dość proste: zainstaluj wersję vimobsługującą schowek. jeśli vimnie, uzyskaj jedną z następujących czynności:

sudo apt-get install vim-athena
sudo apt-get install vim-gnome
sudo apt-get install vim-gtk

Po zainstalowaniu wystarczy uruchomić vim. Możesz również sprawdzić, czy schowek jest włączony, uruchamiając:

 vim --version|grep clipboard

powinieneś zobaczyć +xterm_clipboard.

FuzzyAmi
źródło
Ta odpowiedź trafia do sedna problemu: czy twoja wersja Vima ma włączoną funkcję schowka? Jeśli nie, żadna z tych odpowiedzi nie będzie miała znaczenia. Wykonaj „vim --version” i poszukaj „+ schowek”. Myślę, że + xterm_clipboard ma zastosowanie tylko, jeśli chcesz obsługi schowka X11, ale jeśli używasz Ubuntu, też będziesz tego chciał.
Ray
2

Prawdopodobnie wszyscy nienawidzicie tej odpowiedzi. Pracowałem w vi w latach 80-tych na różnych komputerach z Uniksem i ostatnio miałem okazję bawić się w Linuksie.

Moim rozwiązaniem do wycinania i wklejania jest użycie Putty działającej w systemie Windows w celu uzyskania dostępu do mojego Linux-a.

Putty pozwala skopiować dowolny tekst w oknie, po prostu go podświetlając. możesz następnie przejść do innego okna / sesji Putty i kliknąć prawym przyciskiem myszy, aby wkleić.

nie może być łatwiej. a teraz jest vim. szkoda, że ​​nie było go za moich czasów, pomogłoby mi to walczyć z mafią emacsa.

srtour2011
źródło
1

Nie do końca używa yy, ale jeśli wybierzesz tekst, który chcesz skopiować za pomocą myszy (czasami może być konieczne użycie Shift- [przeciągnij]), przełącz się do drugiego okna terminala i wykonaj [środkowe kliknięcie] lub Shift- [środkowe kliknij] tam tekst zostanie wstawiony w bieżącym punkcie wstawiania.

Działa to dla większości programów wiersza polecenia i GUI, nie tylko dla vima.

Siergiej
źródło