Jak kopiować między terminalami?

11

Używam systemu Linux. Dwie klapy są otwarte w dwóch terminalach. Teraz chciałbym skopiować tekst z A do B. Jednym ze sposobów jest zaznaczenie tekstu w A, użycie myszy do skopiowania, a następnie przełączenie do B, w trybie wstawiania polecenie <c-r>+wklei tekst.

Czy można to zrobić bez użycia myszy? jak "+yyw A, kiedy przełączasz na B o<c-r>+,? Na próżno zbadałem kilka kombinacji. Szukałem „kopiuj przez terminale”, ale nic nie znalazłem.

@statox użytkownik sugeruje jedno rozwiązanie korzystając z trybu wizualnego, czyli v$"+yw A, kiedy przełącznik do B o<c-r>+.

Czy jest jakiś prosty sposób, aby skopiować tekst w A bez wchodzenia w tryb v? Wprawdzie wejście w tryb V nie wymaga zbyt wielu uderzeń klawiszy, tylko zastanawiam się, czy jest lepszy sposób. Na przykład. jeśli kursor znajduje się na środku linii, yykopiuje całą linię (aby się zarejestrować "), jednocześnie 0v$yrobi to samo z dodatkowym naciśnięciem klawisza.

Albo moje pytanie można sprowadzić do tego, czy istnieje sposób przy mniejszej liczbie naciśnięć klawiszy niż w 0v$"+yprzypadku kopiowania , którego można użyć <alt-tab>o<c-r>+do wklejenia.

użytkownik3813057
źródło
Jaki jest twój dokładny problem? Wydaje się, że masz rozwiązanie: wybierz tekst w trybie wizualnym (dlaczego miałbyś używać myszy?), Umieść go w rejestrze schowka za pomocą, "+yaw innym wystąpieniu vima umieść go w rejestrze schowka "+p. Lub duplikat tego ?
statox
Nie musisz wchodzić w tryb wizualny, aby coś szarpać. Możesz śledzić yza pomocą ruchu ( :help motion.txt) lub obiektu ( :help object-select). Jeśli często szarpiesz i wklejasz instancje Vima, możesz uznać to ustawienie clipboardza przydatne unnamedlub unnamedplusprzydatne. Zobaczyć :help 'clipboard'. Następnie kopiowanie między instancjami powinno po prostu działać.
garyjohn
1
Celem mojego komentarza nie był tryb wizualny, tak naprawdę mam problem ze zrozumieniem twojego problemu: na początku myślałem, że to jest fakt kopiowania tekstu z jednego terminala do drugiego, teraz wydaje się, że chodzi o użycie jak najmniejszej liczby klawiszy możliwe szarpnięcie do rejestru schowka. Jeśli jest to drugi przypadek, komentarz Garyjohna jest istotny.
statox
1
0v$jest taki sam jak V. I to jest łatwe do wykonania mapowania dla "+y: :nnoremap <Leader>y "+y. To redukuje to do V\y.
Martin Tournoij,
@Carpetsmoker Twoje rozwiązanie jest dobre. Chciałbym wziąć to za optymalne rozwiązanie, jeśli wkleisz go w obszarze odpowiedzi. Wydaje się, że bez mapy klawiszy najlepsze, co możemy zrobić dla kopii w moim pytaniu, to V"+y4 naciśnięcia klawiszy.
user3813057,

Odpowiedzi:

9

Możesz sprawdzić, czy Vim jest zbudowany z obsługą schowka:

:echo has('clipboard')

Jeśli wynik jest 1następujący, do osiągnięcia celu powinno wystarczyć:

"*y    in source Vim
"*p    in destination Vim

Możesz to wszystko uczynić o wiele bardziej płynnym, synchronizując rejestr schowka i rejestr domyślny z tym ustawieniem w vimrc:

set clipboard^=unnamed

Jeśli wyjściem :echo has('clipboard')jest 0, rozważ zainstalowanie odpowiedniego Vima, takiego jak vim-gtklub vim-gnome(nazwa pakietu może się różnić od dystrybucji do dystrybucji).

romainl
źródło
1

Myślę, że rozwiązanie, które już wspomniałeś w swoim pytaniu, jest prawidłowe. Jeśli chcesz zmniejszyć liczbę naciśnięć klawiszy, możesz po prostu utworzyć mapę, np

vmap <leader>y "+y
vmap <leader>d "+d
nmap <leader>p "+p
nmap <leader>P "+P
vmap <leader>p "+p
vmap <leader>P "+P

Zobacz drugi wpis tutaj .

Karl Yngve Lervåg
źródło
1

Aby rozszerzyć odpowiedź @ romainl, (z obsługą schowka), możesz użyć rejestrów, które są współdzielone ze schowkiem systemowym.

"+y    To yank/copy from a vim-terminal
"+p    To paste in destination vim-terminal

"*y    To yank/copy from a vim-terminal
"*p    To paste in destination vim-terminal

Poprzez wykonanie tych poleceń, jesteś y anking / kopiowanie / przechowywania wybranych treści w rejestrach, a p asting im przeznaczenia Vim-końcowy. Te dwa specjalne rejestry +i *są udostępniane szerokiej schowka systemowego (i stąd wiele innych programów, takich jak przeglądarki, gedit etc). Rejestr +jest powiązany z buforem kopiuj / wklej i *jest powiązany z buforem wyboru (takim, który wstawia kopię zaznaczenia za pomocą środkowego kliknięcia pola tekstowego w, powiedzmy, Ubuntu) i można go wkleić za pomocą ctrl + v( ctrl + shift + vna terminalu gnome).

0xc0de
źródło
1

1) W Fedorze korzystam z następującej konfiguracji:

dnf install vim-X11

vim-X11 jest wyposażony w obsługę schowka - może w innych dystrybucjach jest podobny.

2) Ustaw alias w moim .bashrc

alias vim="vimx"

3) W .vimrc:

set clipboard=unnamedplus

Teraz zwykłe szarpnięcie w Vimie trafia do schowka systemowego i każde Ctrl-C poza vimem można wkleić w vimie.

Neaţu Ovidiu Gabriel
źródło
0

Jeśli używasz komputera Mac (OSX), możesz zainstalować bpcopy (używając brew install pbcopy - patrz http://brew.sh/, aby uzyskać więcej informacji). Następnie uruchom następujące polecenie (wiersz polecenia w formie prostej) bez dotykania myszy:

PRZYKŁAD:

1) W TERMINALU 001 :

cat /tmp/stuff.txt | pbcopy

2) Możesz przełączyć się do terminala # 002 (bez użycia myszy), używając wbudowanych skrótów klawiszowych w aplikacji terminala OSX: command+i

3) W TERMINALU 002 : Otwórz nowy plik w vimie

vi newfile

4) Ustaw vima w trybie wstawiania za pomocąi

5) Wstaw tekst ze schowka za pomocą command+ V(aby wkleić ze schowka na komputerze Mac)

6) Ciesz się resztą dnia!

Joe Choosakul
źródło