Tmux'ta fare ile kabuk çıktısını kaydırın


256

Fare kaydırma, tmux olmadan kabuk çalıştırdığımda tmux’ta çalışmaz (Gnome Terminalinde). Görünüşe göre tmux fare kaydırma olaylarını Yukarı / Aşağı tuşlarına basmışım gibi gönderiyor. Ancak kabuk çıktı geçmişini kaydırmasını istiyorum . Tmux'u bu şekilde çalıştırmanın bir yolu var mı?

Not: Klavyeyle nasıl kaydırılacağını biliyorum ( burada başka bir soru sayesinde ).

Fare kaydırma iki tmux sürümlerinde denedim:

  • 0.8-5hardy1 ( Ubuntu 8.04'te ( Hardy Heron))
  • 1.3-1 ( Ubuntu 10.10'da ( Maverick Meerkat))

1
Bence Bukzor'un cevabı, sorununuzu tmux 1.5 ve daha yenisi için çözdü.
kynan

Yanıtlar:


252

Çıktı geçmişi içinde kaydırmak için Kullanacağınız ^b+ [ Sonra sayfalamak için M + V ve aşağı sayfalamak için ^ V kullanabilirsiniz. Gerçeği PgUpve PgDownolsa kullanabilir misin bilmiyorum . Terminalim bu anahtarları tmux'a göndermiyor. Bunun yerine, tmux geçmişini değil, kendisini kaydırır.

Kopyalama modundan çıkmak için ESC tuşuna basın.

Farenizi bu modda kullanmak için (kopya modu olarak adlandırılır) ^b+ düğmesine basın : ve aşağıdakileri girin:

setw -g mouse on

Not: tmux <2.1'de, seçenek seçildi mode-mouseve seçilmedimouse

Şimdi kopyalama moduna geçtiğinizde farenizi kullanarak kaydırın. Tmux'u her çalıştırdığınızda yüklenmesini istiyorsanız, bu komutu ~ / .tmux.conf dosyasına koyabilirsiniz.

Güncelleme: tmux 1.5'ten itibaren bu seçenek kaydırma tekerleğini otomatik olarak kopya moduna geçirir ve tmux geri kaydırma tamponunu geri kaydırır. İlk önce Ctrl-B+ [veya daha fazla vuruş yapmak gerekli değildir . İsteme geri gitmek, otomatik olarak kopya modunu da sonlandırır.


1
Zaten çalışan bir tmux sunucunuz varsa, config dosyasını yeniden yüklemeniz gerekebileceğini unutmayın. blog.sanctum.geek.nz/reloading-tmux-config tmux kaynak dosyası ~ / .tmux.conf
Allan Nienhuis

7
OS X'de benim için çalışmıyor
Ain

2
@Ain - Şimdi OS X'in 11 ana sürümü var. Tam olarak hangi sürümden bahsediyoruz?
Ramhound

10
Tmux> = 2.1 için, bkz. @ DannyRe'nin cevabı (şu anda oldukça aşağı).
joelostblom

3
set -g mouse onmacOS tmux 2.1'de benim için çalıştı
Miguel Mota

123

Tmux 2.1 için bazı değişiklikler var

  • Fare modu yeniden yazılmıştır. Artık şunun için başka seçenek yok:

    • fare boyutlandırma bölmeli
    • Fare seçim bölmeli
    • Fare seçim pencere
    • Mod-fare

    Bunun yerine sadece bir seçenek var: fare desteğini tamamen açan 'fare'.

Olurdu

set -g mouse on
# to enable mouse scroll, see https://github.com/tmux/tmux/issues/145#issuecomment-150736967
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"

6
Teşekkürler, şimdi bölmeleri seçme, vb. Çalışma, ancak kaydırma yapmıyor. Kaydırma işleminin tekrar çalışmasını sağlamak için şunu kullanın: github.com/NHDaly/tmux-scroll-copy-mode
Mehdi

1
awesome - bu cygwin üzerinde çalışır - WINDOWS 7'de tmux
GWD

@Mahdi Bu osx üzerinde çalışmıyor gibi görünüyor. Herhangi bir ipucu?
DiTTiD

2
bindtmux 2.3'te artık gerekli görünmüyor
Theron Luhn

2
İçin +1 set -g mouse on. Önceki yorum doğru. Bağlama artık gerekli değildir.
Dakusan,

63

Tmux'un (1.5) şu anki sürümü mod-fare seçeneğini basitçe ayarlamanızı ve fare tekerleği ile kaydırma yapmanızı sağlar.

         mode-mouse [on | off]
                 Mouse state in modes.  If on, the mouse may be used to
                 enter copy mode and copy a selection by dragging, to
                 enter copy mode and scroll with the mouse wheel, or to
                 select an option in choice mode.

Benim .tmux.conf:

set-window-option -g mode-mouse on

Gerçekten istediğin davranış bu! Yalnızca kabuk alternatif arabelleğini kaydırmak değil, kopya modunu etkinleştiren fare kaydırma. Yani nihayet geçmek için özendirici olduğunu ekranına için tmux benim için. Shift + PgUp ile de aynı davranışı elde etmek için bir seçenek var mı?
13'te kynan

1
@kynan: Şahsen sadece C-A PgUpbunu yapmak için basıyorum . Sayfa yukarı anahtarını doğrudan ile ciltleyebilirsiniz tmux bind-key -n PPage copy-mode -u. Yerel terminalinizden ayırırsanız benzer thign shift + pageup için çalışmalıdır.
bukzor

1
Bu, komut satırına geri döndüğümde, genellikle ilk komutumun yanlış biçimlendirilmesine neden olan CLI'ya eklenmiş bir karakter aldığım tuhaf bir davranışla sonuçlanır. Oldukça can sıkıcı.
Chris R,

Bununla birlikte, bunun fareyle kaydırma işlemini tetiklemek için iyi çalıştığını, metnin orta tıklatmayla yapıştırılmasını seçerken garip davranışlara neden olduğunu unutmayın. Tradeoff kabul edilebilir olmadığından, Cb pg-up / down (varsayılan) tercihini bitirdim.
h7r,

@ChrisR Bunu da biraz alıyorum ve tutarlı değil. Bir [M [M # [M [M # [M [M # [M [M # [M tipi dize] mi?
Elijah Lynn

53

Bunu .tmux.conf dosyasında deneyin

# Make mouse useful in copy mode
setw -g mode-mouse on

# Allow mouse to select which pane to use
set -g mouse-select-pane on

# Allow xterm titles in terminal window, terminal scrolling with scrollbar, and setting overrides of C-Up, C-Down, C-Left, C-Right
set -g terminal-overrides "xterm*:XT:smcup@:rmcup@:kUP5=\eOA:kDN5=\eOB:kLFT5=\eOD:kRIT5=\eOC"

# Scroll History
set -g history-limit 30000

# Set ability to capture on start and restore on exit window data when running an application
setw -g alternate-screen on

# Lower escape timing from 500ms to 50ms for quicker response to scroll-buffer access.
set -s escape-time 50

Http://brainscraps.wikia.com/wiki/Extreme_Multitasking_with_tmux_and_PuTTY adresinden alındı


escape-timeAyarlamak için +1
Dakusan

Merak eden herkes için .tmux.conf dosyası ana dizininize yerleştirilir.
user2647513

15

Birisi (kaybettiğim bir kaynaktan) aşağıdakileri eklemeyi önerdi ~.tmux.conf:

set -g terminal-overrides 'xterm*:smcup@:rmcup@'

Nasıl çalıştığı veya ne yaptığı hakkında hiçbir fikrim yok, ancak bu şimdi tmux'un kopya moduna girmek zorunda kalmadan fare tekerleğini bir tmux oturumunda kaydırmama izin veriyor; Sadece tekerleği ve BAM'ı kaydırıyorum! işe yarıyor. Terminal.app kullandığımı unutmayın, ancak OP'nin özellikle kullanım için cevabı verdiğini hatırlıyorum gnome-terminal.


1
Jed, teşekkür ederim! Tavsiyelerin de gnome-terminalde çalışıyor. Bir süre bu kurulumu kullanmaya çalışacağım. Ancak bir dezavantajı var: fare kaydırma şimdi beklendiği gibi çalışmıyor less. lessİçeri yüklersem tmux, fare kaydırması açılan dosyayı kaydırmaz less. Tüm terminali kaydırır. Garip bir şekilde, kurulumunuzda vimbeklendiği gibi davranın tmux.
user31494

2
Tmux 1.5'ten itibaren bunun, setw -g mode-mouse onfare tekerleğini kullanarak kopyalama modunda kaydırma yapan seçeneğin yerine geçtiğini unutmayın .
kynan

3
Açıklama, bu seçeneğin, terminalin alternatif ekranındaki kaydırma kilidini devre dışı bırakmasıdır; bu, çoğu durumda istenen, alternatif ekran arabelleği isteyen uygulamalar (vi, daha az, tmux vb.) Kendi kaydırma yeteneklerini sağlar. Bu kilidi tmux'da geçersiz kılmak , terminalin alternatif ekran arabelleğini kaydırmaya izin verir ; bu, birkaç durumda dışında istenen sonucu vermez. Alternatif ekranı açıklayan bir alıntı için bu cevaba bakınız man xterm.
11:11

Ne yazık ki, bu iTerm'de çalışmıyor
Suan

İTerm 2'de bununla olumlu sonuçlar aldım
Keith Smiley

5

tmux 2.1 yeni fare bağları sunar.

Bu ciltleri bugün yazdım. Vim'de olmadığında fare tekerleğini oklara sorunsuz bir şekilde bağlar, çünkü Vim, ham fare tekerleği kodlarını yorumlayabilmektedir (örneğin, farenizin hangisinin üzerinde olduğuna bağlı olarak hangi Vim penceresinin kaydırılacağını seçme gibi).

Bu, nihayetinde fareyi yalnızca birden fazla man sayfasını ve ok tuşlarını kabul eden başkalarını görüntülemek için kullanabileceğimiz anlamına gelir. ifUygulamalarınız için daha fazla mantık uygulamak için mantığı gerektiği gibi genişletebilir ve zincirleyebilirsiniz .

bind -n WheelUpPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Up"
bind -n WheelDownPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Down"

Bu yeni tekerlek bağlama özelliği ile, fare tekerleğini istediğiniz içeriğe duyarlı davranışı yapmak üzere komut dosyası kullanmak mümkündür.


Şimdi sadece bölmenin kenarındaki fare tekerleğini ilginç bir şey yapma fikriyle oynuyorum. Muhtemelen yapacağım şey tekerleği sınırda eşlemek değil, durum çizgisi üzerinde yapıldığında tmux pencerelerini döndürmek için eşlemektir.
Steven Lu,

Github'ınızın bağlantısı nedir? Çabalarını takip etmek istiyorum! Aradığım bir diğer özellik de, Tmux dışında olduğu gibi, sözcüğü X panoya kopyalamak için çift tıklamak.
joeytwiddle

@joeytwiddle Tavsiye ederim github.com/NHDaly/tmux-better-mouse-mode , diğer cevabımı görün
Steven Lu

3

Gnome-terminali, sınırlı "normal" kaydırma koşullarında, fare kaydırma olaylarını Yukarı ve Aşağı ok tuşlarına çeviren bazı düzgün hileler yapar. Kullandığınız bazı metnini görüntülemek Örneğin, less(bir erkeğe okuyorsanız bu özellikle olur), kullanmakta içeriği kaydırabilirsiniz j, kve ok tuşları. Ancak aynı zamanda , gnome-terminalsöz konusu numara sayesinde, fareyle kaydırma yaparak bunu yapabilirsiniz.

Bu yüzden sanırım tmuxterminalin bazı "yakalamaları" lessaynı - ve aynı mekanizma gnome-terminaldevreye giriyor: fare kaydırması Yukarı / Aşağı ok tuşlarına basar.

Bu özelliği profil ayarlarında kapatabilir ve her koşulda düzenli kaydırma alabilirsiniz. Sadece "kaydırma" sekmesinin son onay kutusunu işaretini: onay kutusu.


Açıklama için teşekkürler, uldtko! Ancak fare kaydırma probleminde yardımcı olmuyor. Evet, seçenek kapalıyken, gnome-terminalüçlü ^[[Ave ^[[Bfare kaydırması göndermeyi durdurur . Daha iyi tmux( ^[[A^[[A^[[Abazı programlarda çirkin değil, çirkin komut geçmişi kaydırması yok), ancak şimdi lessfare kaydırmasında kaydırma işlemini durduruyor.
user31494

1
Ukrayna? ( ikarakterler tarafından tahmin )
dotancohen

1

https://github.com/NHDaly/tmux-better-mouse-mode

Yeni smokinler için yapılandırılabilir ve zengin özelliklere sahip fare kontrol uygulaması. şiddetle tavsiye edilir.

Muhtemelen kullanmak istersin

set -g @emulate-scroll-for-no-mouse-alternate-buffer "on"

onunla da.


Bunu yükledim, ancak artık fareyle metni vurgulayıp kopyalayamıyorum. Bunu yapabiliyor musun?
jonathanking

Evet, muhtemelen onunla çakışan başka bir fare ile ilgili tmux config var.
Steven Lu

0

Oldukça tatmin edici bir kaydırma davranışı elde etmek için bağlayıcı fikirleri diğer cevaplardan birleştirebilirsiniz: Terminalde otomatik olarak kopyalama moduna geçmek için vim değişikliklerinde çalışır ve en alt seviyeye ulaştığınızda çıkar.

Benim kod:

bind -n WheelUpPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Up Up Up Up"  "if-shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"
bind -n WheelDownPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Down Down Down Down"  "if-shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"

grep -e 'man' bölümünde gezinmek için ok tuşlarını gerektiren diğer komutları ekleyebilirsiniz.

Gönderme tuşlarını birkaç kez ekledim, böylece fare tekerleğindeki bir onay işareti bir seferde 4 satır kayar


0

Zaten bir tmux oturumundaysanız, komutu çalıştırabilirsiniz.

set mouse on

Hatırlatma: komutları çalıştırmak için ön ekinizi kullanın :.

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.