Jak skopiować do schowka systemowego z wyjścia tmux po wybraniu myszy?

82

Teraz, aby skopiować do schowka systemowego, muszę wybrać tekst myszy w oknie tmux za pomocą Shiftklawisza. A potem muszę uruchomić to polecenie:

tmux save-buffer - | reattach-to-user-namespace pbcopy

Czy jest jakaś szansa na zapisanie do schowka systemowego? Klawisze lub lepiej robią to automatycznie po zwolnieniu Shift.

Moja konfiguracja tmux: https://gist.github.com/3641580

tomekfranek
źródło
Oto podobne pytania i odpowiedzi dotyczące unix.stackexchange .
crw
2
Któryś z nich działa na MacOS, szczególnie Sierra? A raczej żaden z nich tego nie robi, czy ktoś wie, co by zrobił? To pytanie jest oznaczone tagiem osx, ale odpowiedzi mówią o lewym i środkowym kliknięciu ...
dwanderson

Odpowiedzi:

192

Jeśli używasz iTerm2, możesz kopiować tekst w sesji Tmux, przytrzymując Optionklawisz podczas przeciągania myszą, aby dokonać wyboru.

Wtedy powinno być możliwe wklejenie tekstu w dowolnym miejscu za pomocą Cmd+, Vjak zwykle. Znalazłem go tutaj: http://web.archive.org/web/20131226003700/http://ootput.wordpress.com/2013/08/02/copy-and-paste-in-tmux-with-mouse/

Rolands Bondars
źródło
26
Nie pomaga z okienkami tmux
Jak S
41
Jeśli masz panele, możesz dokonać prostokątnego zaznaczenia za pomocą <alt> + <cmd> + zaznaczenie myszą.
jomuller
6
Zaznaczanie prostokątne nie zapewnia tych samych funkcji dla okienek, ponieważ zaznaczanie może rozpoczynać się i kończyć w dowolnej kolumnie. To rozwiązanie nie jest związane z tmux, ale z samym terminalem. Szyby to podstawowa cecha tmux.
Betamos
6
Prefiks @JakS + Z powiększa bieżący panel. Wtedy nie będziesz miał tego problemu. Chyba że jesteś również na splicie vima :)
dgmora
10
W Terminalu możesz zaznaczyć tekst, przytrzymując klawisz „fn”. Możesz skopiować zaznaczony tekst za pomocą „Cmd + C”.
fbessho
58

Jeśli używasz iTerm2 3.x, możesz kopiować / wklejać, włączając Applications in terminal may access clipboard:

wprowadź opis obrazu tutaj

Po prostu zaznacz tekst myszką, aby skopiować go do schowka OS X! Nie ma potrzeby naciskania, Optionjak sugeruje odpowiedź akceptanta.

Możesz także wkleić ze schowka OS X do tmux za pomocą zwykłego Cmd+ V.

Jerome Dalbert
źródło
1
Wszystkie reattach-to-user-namespacepodejścia oparte na podstawach nie działają dla mnie, ponieważ często używam ssh na komputerach z systemem Linux. To rozwiązanie jednak działa świetnie! Dziękuję Ci!
jdg
Świetna odpowiedź. Nadal używam <kbd> Option </kbd>, kiedy jestem w vimie i nie chcę, aby mysz aktywowała wybór vima.
Chad Skeeters
To działało pięknie. Nie ma potrzeby zmiany konfiguracji. Dzięki.
muammar
to działa świetnie tylko z tmuxem, ale teraz jak wysłać szarpnięcia Vima działające w tym tmuxie do schowka iterm i systemowego?
schlow
@schlow Prawdopodobnie powinno to być oddzielne pytanie dotyczące Vima + tmux StackOverflow, ale zdarzyło się, że używam również Vima i dodałem set clipboard=unnamedw tym celu mój vimrc
Jerome Dalbert
28

Tutaj jest odpowiedź na podobne pytanie: /unix/15715/getting-tmux-to-copy-a-buffer-to-the-clipboard

Znalezione tam rozwiązanie:

# move x clipboard into tmux paste buffer
bind C-p run "tmux set-buffer \"$(xclip -o)\"; tmux paste-buffer"
# move tmux copy buffer into x clipboard
bind C-y run "tmux show-buffer | xclip -i"

Sprawdź też: http://awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse/

jeśli ustawiłeś następujące opcje:

okienko wyboru myszy

okno wyboru myszy

zauważysz, że w ogóle nie możesz zaznaczyć tekstu.

rozwiązaniem jest użycie klawisza Shift.

hold down the shift key and then left click and drag across the target text. you must also hold down the shift key and then middle click in order to paste the text.
Blaise
źródło
4
w przypadku iterm użyj klawisza opcji zamiast klawisza Shift. [jak wspomniano tutaj: awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse ]
gatoatigrado
2
W przypadku systemu MacOS xclip -o=> pbpaste, xclip -i=> pbcopy.
Gingi,
23

W przypadku systemu OS X, jeśli używasz aplikacji „Terminal”. Możesz wyłączyć przewijanie myszy i użyć zwykłych funkcji kopiuj / wklej (cmd + c / cmd + v):

set-option -g mouse-select-pane off
set-option -g mouse-resize-pane off
set-option -g mouse-select-window off
set-window-option -g mode-mouse off

lub możesz użyć przewijania myszy i zaznaczyć tekst za pomocą "klawisza fn":

set-window-option -g mode-mouse on
Siergiej K.
źródło
16
fnklucz wskazówka jest wygaszacz życia! wiele osób sugeruje używanie, ALTale to nie działa na najnowszym Mac OS X
AK_
1
Jeszcze lepiej - połącz fn i opcję wyboru w trybie kolumnowym!
Fletch
Jakiś sposób na zmianę klawisza fn? Korzystanie z klawiatury zewnętrznej bez klawisza fn!
CentAu
@CentAu Spróbuj zamiast tego użyć klawisza „Window”
Piotrek Zatorski
19

W systemie OSX przy użyciu tmux w wersji 2.2 lub nowszej dodaj do pliku tmux.conf następujące polecenie:

bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "pbcopy"
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "pbcopy"

W przypadku tmux w wersji 2.4, ponieważ uprzejmie zdecydowali się zmienić składnię polecenia, powinieneś użyć:

bind-key -T copy-mode MouseDragEnd1Pane send -X copy-pipe-and-cancel "pbcopy"

Pamiętaj, że może być konieczne użycie reattach-to-user-namespace pbcopyzamiast zwykłego pbcopy.

Kyle Kloepper
źródło
Również w Ubuntu 16.04 nie stanowi to już problemu w tmux 2.1. Mogę po prostu użyć domyślnych metod kopiowania i wklejania terminala.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
Nie mam pojęcia, dlaczego jest tak nisko na liście, to jest właściwa odpowiedź!
shawkinaw
11

Umieszczenie tego w moim pliku ~ / .tmux.conf działa dla mnie:

bind y run-shell "reattach-to-user-namespace -l zsh -c 'tmux show-buffer | pbcopy'"

Wszystkie inne potencjalne rozwiązania, które znalazłem, to kopiowanie jakiejś pustej zawartości do schowka OSX.

Jedynym problemem jest to, że wydaje się, że umieszcza znak powrotu karetki na końcu wklejanej treści.

crcastle
źródło
3
To działa, ale nadal wymaga naciśnięcia PREFIX + y po dokonaniu wyboru. Czy istnieje sposób na skopiowanie tekstu z sesji tmux w systemie OS X, po prostu wybierając go tak, jak w terminalu Linux?
Rafael Bugajewski
6

naciśnij lewy przycisk myszy i przytrzymaj, zaznacz tekst w okienku i nadal przytrzymaj przycisk. następnie naciśnij "y", co zapisuje zaznaczenie w schowku i wychodzi z trybu zaznaczania / kopiowania.

działa tutaj z iTerm 3.1.beta.5, tmux 2.5 i następującą konfiguracją:

### copy & paste -------------------------------------------------------
# Use vim keybindings in copy mode
setw -g mode-keys vi
# Setup 'v' to begin selection as in Vim
bind-key -T copy-mode-vi v send -X begin-selection
bind-key -T copy-mode-vi y send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
# Update default binding of `Enter` to also use copy-pipe
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
bahnfrei
źródło
+1 Wreszcie aktualne rozwiązanie, które działa. Dzięki. - Wydaje się, że wystarczy zastąpić Enter, bez wcześniejszego unbind.
ThomasH
Tmux w wersji 3 i nowszych używa, copy-mode-vipodczas gdy starsza wersja używa copy-mode.
MutantMahesh
5

naciśnij klawisz Shift, a następnie kliknij myszką !! Sprawdź ten link. http://awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse/

user3023768
źródło
To pytanie jest bardzo stare, a Twoje rozwiązanie jest nieprawidłowe do użytku z iTerm. Aktualnie przyjęta odpowiedź jest właściwa.
OGHaza
Działa to w przypadku terminala Gnome, ale to pytanie dotyczy OSX
JKirchartz
3

Udało mi się rozwiązać ten problem za pomocą CMD+ Cpo zaznaczeniu tekstu za pomocą FN+ mouse drag with left button downz tmuxokna w Terminalaplikacji macOS High Sierra.

lemmaa
źródło
1

Zrobiłem dziś wersję za pomocą netcata, która jest dość prosta.

https://github.com/base698/tmux-copy-paste-mac-osx

Oto tmux.conf:

bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-pipe 'nc localhost 5682'
bind p run-shell 'nc localhost 5683; nc localhost 5683 | tmux load-buffer -' \; paste-buffer

Działa również z myszą w wersji 1.8

Justin Thomas
źródło
1

Oto rozwiązanie, którego używam w tmuxwersji 2.8, macOS Mojave 10.14.1 i Terminal.app.

Po zwolnieniu przycisku myszy powoduje to usunięcie zaznaczenia podczas kopiowania do schowka systemowego (a także do tmuxbufora):

bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"
robenkleene
źródło
0

Solidne rozwiązanie, które działa z dowolną kombinacją sesji mosh + tmux + vim + zagnieżdżonych

Po spędzeniu wielu dni na rozwiązywaniu tego problemu, zdecydowanie najbardziej niezawodnym rozwiązaniem, jakie odkryłem, jest opublikowane rozwiązanie Suraj N. Kurapati . Rozwiązanie działa lokalnie z (i bez) tmux v3.2 i / lub vim, a także zdalnie z (i bez) tmux i / lub vim , używając zarówno klawiszy trybu kopiowania, jak i prostego wyboru myszy.

W połączeniu z żądaniem ściągnięcia Mike'a Gulicka (obecnie otwartego) , wszystkie te kombinacje działają również z mosh .

Dopóki rozwiązanie Mike'a nie zostanie połączone w mosh, możesz pobierać jego zmiany i budować lokalnie za pomocą:

Ubuntu:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key C99B11DEB97541F0 \
&& sudo apt-add-repository https://cli.github.com/packages \
&& sudo apt update \
&& sudo apt install -y gh autoconf automake perl protobuf-compiler libprotobuf-dev libncurses-dev zlib1g-dev libutempter-dev libssl-dev pkg-config \
&& mkdir -p ~/tmp/mosh \
&& git clone https://github.com/mobile-shell/mosh ~/tmp/mosh \
&& cd ~/tmp/mosh \
&& gh pr checkout 1104 \
&& ./autogen.sh \
&& ./configure \
&& make \
&& sudo make install

System operacyjny Mac:

Myślę, że najpierw musisz zainstalować Apple Xcode / Developer Command Line Tools (które, IIRC, można teraz zrobić, po prostu uruchamiając gcci zamykając), a następnie uruchom:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" \
&& brew install gh autoconf automake
&& mkdir -p ~/tmp/mosh \
&& git clone https://github.com/mobile-shell/mosh ~/tmp/mosh \
&& cd ~/tmp/mosh \
&& gh pr checkout 1104 \
&& ./autogen.sh \
&& ./configure \
&& make \
&& sudo make install

Dzięki tym aktualizacjom święty Graal w schowku został wreszcie osiągnięty!

Jest to jednak bardzo nowa informacja, stąd mój post jest dość zmienny. W związku z tym:

Prosimy o poprawienie mojego postu, jeśli:

  1. Brakuje zależności itp. Lub
  2. Wykonywanie gh pr checkout 1104zmian Mike'a nie jest już potrzebne, ponieważ zostało scalone w mosh lub
  3. Budowanie ze źródeł nie jest już potrzebne, ponieważ scalone zmiany zostały przesłane do menedżerów pakietów brew / apt / etc.
Jonathan Wheeler
źródło