Seçimi tmux’daki bir panoya kopyala


22

MacOS'ta iTerm2'de tmux'ta bir fare ile metin seçersem, seçilen metni panoma kopyaladım. Fazladan herhangi bir düğmeyi tıklatmama gerek yok - sadece istediğiniz metni seçin ve tamamlayın.

Tmux'u macos'ta terminal.app'ta test ettim ancak orada çalışmadı - yseçimi panoya kopyalamak için tıkladım.

Bir fare bağlaması olduğunu (buna MouseOnSelectionbenzer bir şey MouseDown1Pane) olduğunu düşündüm ama web'de faydalı bir şey bulamadım ve man tmux.

Ubuntu 16.10'da benzer bir davranışa sahip olmanın bir yolu olup olmadığını merak ediyorum - tercihen Gnome terminalinde.

Benim tmux dotfiles burada mevcut (bağlantı) .

Yanıtlar:


44

Vi kopyalama modu ciltleri ve xclip ile Tmux 2.4+ :

set-option -g mouse on
set-option -s set-clipboard off
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -se c -i"

Daha eski tmux sürümleri için, kopyalama modu ciltlemelerini (varsayılan) veya X olmayan platformları (yani, xclip yok) emacs, aşağıdaki açıklamaya bakın.


Açıklama: İlk önce fare seçeneğini etkinleştirmemiz gerekiyor, böylece tmux fareyi yakalayacak ve fare olaylarını bağlayalım:

set-option -g mouse on

Gnome-terminal, xterm kaçış dizileri kullanarak pano ayarını desteklemiyor, bu nedenle set-clipboardseçeneğin kapalı olduğundan emin olmalıyız :

set-option -s set-clipboard off

Bu seçenek varsayılan olarak iTerm2'de desteklenebilir ve etkin olabilir ( set-clipboardtmux kılavuzuna bakın).

Kopyalama modu MouseDragEnd1Pane"tuşu" nı, yani, ilk fare butonu bir bölmeye tıklayıp sürükledikten sonra serbest bırakıldığında, geçerli kopyalama modu seçimini (varsayılan ciltleme için yapılır MouseDrag1Pane) alan ve boruları alan tmux komutuna bağlayabiliriz. bir kabuk komutuna. Bu tmux komut oldu copy-pipetmux 2.4 öncesinde, ve o zamandan beri vardır değişti etmek send-keys -X copy-pipe[-and-cancel]. Shell komutuna gelince, sadece sistem panosunun içeriğini, ona yönlendirilene göre ayarlayacak bir şeye ihtiyacımız var; xclip bunu aşağıdaki komutlarda yapmak için kullanılır. "xclip -selection clipboard -i"X olmayan platformlarda aşağıda belirtilen bazı eşdeğer değiştirmeler "wl-copy"(Wayland), "pbcopy"(macOS), "clip.exe"(Windows, WSL) ve "cat /dev/clipboard"(Cygwin, MinGW).

Tmux 2.4+:

# For vi copy mode bindings
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"
# For emacs copy mode bindings
bind-key -T copy-mode MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -selection clipboard -i"

Tmux 2,2 ila 2,4:

# For vi copy mode bindings
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "xclip -selection clipboard -i"
# For emacs copy mode bindings
bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "xclip -selection clipboard -i"

Tmux 2.2'den önce:

Fare sürükleme desteğinden sonra kopyala, asıl olarak Tmux 1.3'te yeni mode-mouseseçeneği ayarlayarak eklenmiştir on. Tmux 2.1, fare desteğini tanıdık fare tuşu bağlamaları ile değiştirdi, ancak DragEnd2.2'de tanıtılan bağları yoktu . Bu yüzden, 2.2'den önce sistem panosunu fare sürükleğine koymanın tek yönteminin dahili xterm kaçış dizileri ( set-clipboardseçenek) kullanımı olduğuna inanıyorum . Bu set-clipboard, GNOME Terminali gibi, desteklemeyen terminaller için sürükle ve kopyala davranışını elde etmek için en az tmux 2.2'ye güncelleme yapılması gerektiği anlamına gelir .


3
Bu yüksek kaliteli cevap nihayetinde benim için her şeyi tıklattı .. teşekkürler!
cjauvin

2
Onların terminali işlevsellik ve OP tarafından belirtildiği gibi varsayılan yöntemi değiştirdik çünkü bir mac bu yapmaya çalışıyor herkes için artık işler (Ben kendi kopyasını tampona sahiptir Byobu kullanıyorum): değiştirirken xclip...bir basit deyimini pbcopyyapar Numara.
Darrel Holt

Bu konudaki çözümlerin hiçbiri benim için çalışmıyor.
Yankee

1
Merhaba Josh, ~ / .tmux.conf kaynak dosyamda, ortaya çıktı:Unknown key: MouseDragEnd1Pane
Xifeng Li

@XifengLi Hangi tmux sürümünü ve işletim sistemini kullanıyorsunuz? DragEndAnahtarlar için en azından tmux 2.2'ye ihtiyacınız olduğuna inanıyorum .
Josh Brobst

8

Kabul edilen cevabın bir uzantısı olarak, insanlar genellikle fare düğmesini bırakırken rahatsız edici durumları kopya modundan çıkarlar (bununla ne olur copy-pipe-and-cancel). Bakınız: https://github.com/tmux/tmux/issues/140 . Bu nedenle, daha yeni tmux'ta (2.6 kullanıyorum) , seçimi kopyalamak için copy-pipebirlikte kullanabiliriz clear selectionancak kopya modundan çıkmayın:

bind-key -T copy-mode-vi MouseDragEnd1Pane send -X copy-pipe "xclip -selection clipboard -i" \; send -X clear-selection

2

Msys2'den Windows panosuna kopyalamak için her iki yanıtı da genişleterek (ve seçimi kaldırın):

# For vi copy mode bindings
bind -Tcopy-mode-vi MouseDragEnd1Pane send -X copy-pipe "cat > /dev/clipboard" \; send -X clear-selection
# For emacs copy mode bindings
bind -Tcopy-mode MouseDragEnd1Pane send -X copy-pipe "cat > /dev/clipboard" \; send -X clear-selection

İyi bir nokta. Kopya modunu kendim (emacs stili) kullanıyorum ve testten sonra kendi yapılandırmamı yapıştırdım. Yanıtı, her ikisini de kabul edilen yanıta eklenecek şekilde güncelledim.
Shawn Hoover

0

Yine bir başka uzatma Shiftanahtarı kullanmakla ilgilidir .

ShiftFare ile metin seçerken basılı tutun . Şimdi standart bir sağ tıklatma menüsü (basılı tutmaya devam et veya Shifttekrar bas ) Ctrl+Shift+Cve Ctrl+Shift+Vartık kopyalayıp yapıştırmak için kullanabilirsiniz . Kopyalanan metin aynı zamanda sistem panosunda da mevcut olacak .

İle test Ubuntu 18.04.1edildi tmux 2.6.

Kaynak: https://forum.upcase.com/t/tmux-ctrl-shift-c-and-ctrl-shift-v-bindings/1208 .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.