Próbuję znaleźć dobry sposób na skopiowanie tego, co mam w buforze tmux do mojego schowka. Próbowałem kilku różnych rzeczy
bind-key p select-pane -t 2 \; split-window 'xsel -i -b' \; paste-buffer
co zbliża mnie dość blisko, wszystko co muszę zrobić, to nacisnąć control-d po tym, jak zrobię prefiks-p.
Próbowałem to naprawić, robiąc to
bind-key p select-pane -t 2 \; split-window 'xsel -i -b << HERE\; tmux paste-buffer\; echo HERE'
Ale to po prostu nie działa. W rzeczywistości, jeśli sparuję to do sprawiedliwego
bind-key p select-pane -t 2 \; split-window 'xsel -i -b << HERE'
nic nie robi, więc zakładam, że podzielone okno nie lubi << w poleceniu powłoki.
Jakieś pomysły?
Edycja: Możesz pominąć, select-pane -t 2
jeśli chcesz, to nie jest tak naprawdę ważne. Po prostu używam określonego układu, a panel 2 jest tym, który wolę podzielić, gdy robię coś innego, aby domyślnie przechodziło do moich powiązań obejmujących podziały.
keyboard-shortcuts
tmux
clipboard
xclip
Cyfrowe moce
źródło
źródło
Odpowiedzi:
Tutaj dokumenty wymagają nowej linii. Na przykład w skrypcie powłoki można pisać
Nie sądzę, aby tmux pozwalał ci umieszczać tam nowe linie, a nawet gdyby tak było, nie byłoby to dobre podejście. Co się stanie, jeśli same dane zawierają
HERE
same w wierszu (np. Ponieważ kopiujesz swoje dane.tmux.conf
)?Proponuję zapisać zawartość bufora do pliku tymczasowego. Niesprawdzone:
Jeśli używasz tego polecenia w dwóch oddzielnych instancjach tmux, istnieje warunek wyścigu. Nie wiem jak to rozwiązać.
źródło
mktemp
który jest powszechnie dostępny$PPID
w powłoce uruchomionej przez tmux). Ale jak uzyskać nazwę pliku zmiennej (jakkolwiek jest skonstruowana) w argumenciesave-buffer
? Chybasave-buffer - | …
jak w odpowiedzi Grauwolfa , która całkowicie eliminuje plik tymczasowy?To powinno działać:
źródło
TMUX
zmiennym środowiskowym.C-p
byłoby:bind C-p run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
- brak problemów z cytowaniem lub ograniczeniami wiersza poleceń.copy-mode
?xclip -o
opcja nie zadziałała dla mnie, więc zmieniłem nabind C-c run "tmux save-buffer - | xclip -selection c"\; display-message "Buffer copied to clipboard"
Prostsze rozwiązanie dla Mac OS-X
To opiera się na odpowiedzi Alexa i wykorzystuje rzeczy, które w tamtym czasie nie istniały.
Jeśli używasz homebrew (a jeśli nie, dlaczego nie jesteś?), Możesz po prostu to zrobić:
Następnie w
~/.tmux.conf
:Aby skopiować bufor z tmux (powinieneś już coś skopiować za pomocą tmux) na tekturę Mac, użyj
<tmux-key> Control-c
. Będzie teraz dostępny dlaCommand-v
lubpbpaste
Aby wkleić coś z tektury Mac, użyj
<tmux-key> Control-v
.źródło
tmux show-buffer
co spowodowało problemy z zawijaniem linii,tmux save-buffer -
rozwiązało to.-
na końcutmux save-buffer -
?save-buffer
wyjście. Możesz zastąpić go-
nazwą pliku i tam go zapisze. Zapobiega to pisaniu (i czyszczeniu) pliku.copy-pipe
Komendy został dodany w wersji 1.8. Kopiuje zaznaczenie do bufora tmux i potokuje go do polecenia. Teraz nie ma potrzeby wiązania przedrostka. Oto przykład:Teraz, gdy masz zaznaczony tekst
copy-mode
, yskopiuje go do bufora tmux, a także do schowka systemu operacyjnego. Jednak nie pomaga, jeśli chcesz pobrać tekst ze schowka do bufora tmux.źródło
reattach-to-user-namespace
nie jest to konieczne.bind-key -T copy-mode-vi y send-keys -X copy-pipe "xclip"
i dla OS X:bind-key -T copy-mode-vi y send-keys -X copy-pipe "reattach-to-user-namespace pbcopy"
Możesz wypróbować wtyczkę tmux-yank . Umożliwia kopiowanie bezpośrednio do schowka systemowego (OS X i Linux) i niektórych innych korzyści, takich jak szarpanie bieżącej linii powłoki.
źródło
Po wypróbowaniu innego rozwiązania, oto moja końcowa konfiguracja:
użycie bufora składowania zamiast bufora pokazu daje rzeczywiste dane bez danych, jak pokazano z podziałem linii, gdy jesteś w podziale.
Używam tego również, aby rozpocząć zaznaczanie / kopiowanie w trybie kopiowania tmux:
Wydaje mi się, że można scalić wybór kopii za pomocą klawisza „Y” ORAZ przenieść go do schowka x.
źródło
Oto próba kompleksowej odpowiedzi.
Najpierw mała historia
Kiedy pytanie zostało zadane po raz pierwszy (czerwiec 2011 r.), Kopiowanie tekstu z Tmux do schowka musiało być dwuetapowym procesem, najpierw skopiuj zaznaczony tekst do bufora Tmux, a następnie skopiuj tekst z bufora Tmux do schowka systemowego.
W 1.8 (marzec 2013)
copy-pipe
dodano polecenie, które pozwala skopiować zaznaczony tekst bezpośrednio do schowka systemowego (lub innego miejsca docelowego).Następnie w 2.4 (kwiecień 2017 r.) Tabele kluczy zostały znacznie zmienione, przez co wiele odpowiedzi na tej stronie jest nieaktualnych.
Odpowiedź na oryginalne pytanie
Linux :
Mac :
Jeśli używasz homebrew , powinieneś zainstalować
reattach-to-user-namespace
, uruchamiając następujące polecenie w terminalu:Następnie w pliku ~ / .tmux.conf:
Metoda krótsza (skopiuj i wklej zaznaczenie prosto ze schowka do schowka dla tmux> 2.4)
Uwaga: istnieją dwie wersje dla systemu Linux, ponieważ system Linux ma główny i pomocniczy schowek (znany również jako wybór).
Linux :
Mac :
Dostosowywanie tych poleceń
Jeśli nie chcesz, aby polecenie mówiło ci, co zrobiło w wierszu stanu, usuń po prostu
display-message
(jak również\;
przed nim).Jeśli używasz trybu kopiowania w stylu Emacsa zamiast vi, zamień dowolne wystąpienie na
copy-mode-vi
justcopy-mode
Jeśli używasz Linuksa i chcesz używać
xsel
zamiastxclip
zastąpićxclip -r
zxsel -i -p
orazxclip -o
zxsel -o -p
-r
Wxclip -r
jest opcjonalne, usuwa ostatnią linią. Przydaje się do kopiowania poleceń, a kiedy je wkleisz, nie zostaną natychmiast wykonane.Jeśli tunelujesz przez SSH, powinieneś skonsultować https://unix.stackexchange.com/a/354581/14252
Bibliografia:
> /dev/null
skopiowania bufora tmux do schowka spowoduje, że tmux nie będzie reagował na skrótyźródło
bind-key C-p run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer"
nadal ważne? dlatmux>2.4
Nie lubię dodatkowych naciśnięć klawiszy, więc chciałem czegoś bardziej ambitnego. Wejdź do trybu kopiowania za pomocą [, zaznacz odpowiedni tekst, a następnie naciśnij], aby skopiować tekst do schowka.
Ponadto tmux lubi umieszczać znaki nowej linii w wyrażeniach, które się zawijają (a co dziwniejsze, te nowe linie są w niewłaściwym miejscu! Nie są tam, gdzie wyrażenie jest zawijane na ekranie). Więc chciałem C-] skopiować wyrażenie usuwające znaki nowej linii.
Na Tmuxie 1.6 próbowałem tego:
ale to nie zadziałało, ponieważ tmux nie wydaje się być zadowolony z wiązania złożonych rzeczy do tabeli vi-copy. Więc zamiast tego zrobiłem to:
Prowadzi to do dziwnych rzeczy (] lub C-] będzie działać śmiesznie przy następnym użyciu, ale tylko raz), jeśli wyjdziesz z trybu kopiowania w inny sposób niż] lub C-]. Można to naprawić za pomocą kilku dodatkowych wyobrażeń, ale wyobrażam sobie to przez większość czasu.
źródło
Na Arch Arch Wiki istnieje rozwiązanie wykorzystujące
xclip
:https://wiki.archlinux.org/index.php/Tmux
źródło
save-buffer
bezpiecznie tworzy plik we współdzielonym katalogu? W przeciwnym razie włożenie go/tmp
jest dziurą bezpieczeństwa. Korzystanie zcat
pliku jest bezużyteczne i brakuje pliku tymczasowego. To jest kwestiaxsel
vsxclip
, które są tutaj równoważne, i masz moje (samodzielnie napisane) rozwiązanie.Rozwiązanie dla Mac OS X. Wykonaj następujące 2 kroki:
Użyj obejścia Chrisa Johnsena: https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard
Dodaj ten kod do konfiguracji tmux (~ / .tmux.conf)
źródło
Nieco zmodyfikowany wariant zaakceptowanej odpowiedzi, którą ugotowałem.
Wolę również używać schowka systemowego (Ctrl-C, Ctrl-V) oprócz
primary
domyślnego schowka xclip (tego, który otrzymujesz z wyborem myszy i środkowymi kliknięciami myszy). Aby wybrać schowek systemowy, musisz przekazać-selection clipboard
argument doxclip
.Również podczas kopiowania bufora do schowka podoba mi się możliwość wybrania bufora, który chcę skopiować. Dokonuje się tego za pomocą
choose-buffer
, a następnie przepuszczanie bufor argumentusave-buffer
użyciem-b %%
.AKTUALIZACJA: Jakoś z tmux 1.8 i dwiema moimi instalacjami openSUSE 12.2, widzę zawieszenie, gdy
tmux run-shell
jest wywoływany zxclip
odczytem ze standardowego wejścia na potoku. Zamiast tego postanowiłemxsel
spróbować i to wydaje się działać. Są to równoważne przypisania klawiszyxsel
. Użyłem również&&
łańcucha poleceń w postaci pasty, aby uzyskać większą niezawodność.źródło
Oto moja dość długa odpowiedź, która powinna rozwiązać dwa główne problemy z użyciem xclipa do skopiowania bufora ze zdalnej (ssh) sesji tmux:
1. Nieodpowiedzialny xclip
Dla mnie @ Grauwolf za odpowiedź z
xclip
nie działa (renderuje tmux okienku całkowicie flegmatyczny). Dowiedziałem się, dlaczego na stronie Tmux Arch Arch :Wiązanie powinno być:
To zadziała, jeśli twoja sesja tmux jest lokalna.
2. xclip nie może połączyć się z X
Jeśli używasz tmux nad ssh -X , są duże szanse, że to nie zadziała bezpośrednio.
Jest tak, ponieważ zmienna powłoki
$DISPLAY
musi być ustawiona poprawnie.Kompletne rozwiązanie
Więc dla mnie kompletnym działającym rozwiązaniem jest umieszczenie następujących wierszy w moim
~/.tmux.conf
:Do wklejenia z podstawowego:
Nie do końca rozumiem, dlaczego
$DISPLAY
nie jest poprawnie ustawiony podczas pozyskiwania.tmux.conf
, dlatego muszę go wyodrębnić za pomocątmux show-env
ised
.Jeśli masz tmux> = 1.8, możesz dostosować to polecenie za pomocą
copy-pipe
:źródło
/home/linux/.tmux.conf:11: invalid or unknown command: bind-key C-y run "tmux save-buffer - | xclip -i -selection clipboard -d `tmux show-env | sed -n 's[0/0] PLAY=//p'` >/dev/null
sed
polecenie, które wyświetlasz, nie jest tym samym, co napisałem ... Czy to jest to, co napisałeś w swoim.tmux.conf
?sed
? Polecenie powinno być:sed -n s/^DISPLAY=//p
. Alternatywnie, można użyćcut
:tmux show-env DISPLAY | cut -d'=' -f2
. Warto również sprawdzić swoją wersję tmux.W przypadku powiązań w stylu emacsa istnieje kilka różnych opcji. (Styl Vi powinien być podobny?) Typowym wiązaniem do wykonywania „selekcji kopii” w emacsie jest Mw, więc bardzo wygodne byłoby mieć takie samo wiązanie w tmux.
1 - Byłby idealny, ale nie działa (z powodu ograniczenia tmux?)
2 - Kompromis, który działa dobrze dla mnie : Zaakceptuj, używając innego skrótu klawiszowego dla emacs-copy w tmux. Użyj na przykład CMw. (To powiązanie zostanie zdefiniowane „globalnie” - nie tylko w trybie kopiowania - ale przydatne tylko w trybie kopiowania)
źródło
Wiele z tych odpowiedzi nie działało w moim Ubuntu 14.04 na Zsh as-is. Nie jestem pewien, czy moja powłoka ma z tym coś wspólnego, ale oto moja robocza wersja używania tej strategii do kopiowania i tej do wklejania.
Niektóre uwagi:
-sel clip -i
. Linia ta łączy bufor yank z tmux i wysyła go do xclip.-sel clip -o
Działa to teraz pięknie w mojej konfiguracji vim / zsh / tmux.
źródło
-sel clip -i
rozwiązuje problem. Chociaż nie rozumiem, dlaczego trzeba ponownie określić schowek, aby go wkleić (standard]
działa dla mnie)A ulepszona wersja odpowiedzi @Leif może być:
W ten sposób nie ma żadnych konsekwencji, jeśli wyjdziesz z trybu kopiowania w inny sposób poza], powyższy kod jest zawinięty w tundle / tmux-yank wtyczkę tmux do kopiowania tekstu tmux do schowka systemowego, celuje w tmux> = 1.6 w OS X i Linux.
źródło
W systemie OS-X z tmux w wersji 2.2 lub nowszej będą działać następujące funkcje:
źródło
Używam
copyq
menedżera schowka wielowierszowego. (Działa z systemami Windows, OSX, Linux).Dodaj następujące wiersze w
~/.tmux.conf
:cygwin
wymagacopyq.exe
lokalizacji w~/.bashrc
:źródło