Scrolle die Shell-Ausgabe mit der Maus in tmux

256

Das Scrollen mit der Maus funktioniert in tmux nicht so, wie es funktioniert, wenn ich die Shell ohne tmux (in Gnome Terminal) ausführe. Es scheint, dass tmux Maus-Scroll-Ereignisse sendet, als ob ich die Auf- / Ab-Tasten gedrückt hätte. Aber ich möchte, dass der Shell- Ausgabeverlauf durchgeblättert wird. Gibt es eine Möglichkeit, tmux so arbeiten zu lassen?

Hinweis: Ich kann mit der Tastatur scrollen (dank einer anderen Frage hier).

Ich habe versucht, mit der Maus in zwei Versionen von tmux zu scrollen:

user31494
quelle
1
Ich denke, Bukzors Antwort löst Ihr Problem für tmux 1.5 und neuer.
kynan

Antworten:

252

Blättern im Verlauf der Ausgabe Sie würden ^b+ verwenden. [ Sie können dann M + V verwenden, um nach oben zu blättern , und ^ V, um nach unten zu blättern . Ich weiß nicht, ob Sie die reale PgUpund PgDownobwohl verwenden können. Mein Terminal sendet diese Schlüssel nicht an den tmux. Stattdessen scrollt es sich selbst und nicht die tmux-Geschichte.

Um den Kopiermodus zu verlassen, drücken Sie ESC

Um Ihre Maus in diesem Modus (Kopiermodus genannt) zu verwenden, drücken Sie ^b+ : und geben Sie Folgendes ein:

setw -g mouse on

Hinweis: In tmux <2.1 wurde die Option benannt mode-mouseund nichtmouse

Wenn Sie jetzt in den Kopiermodus wechseln, können Sie mit der Maus einen Bildlauf durchführen. Sie können diesen Befehl in Ihre ~ / .tmux.conf einfügen, wenn Sie möchten, dass er jedes Mal geladen wird, wenn Sie tmux ausführen.

Update: Ab tmux 1.5 schaltet diese Option mit dem Scrollrad automatisch in den Kopiermodus und scrollt den tmux-Scrollback-Puffer zurück. Es ist nicht mehr erforderlich, Ctrl-B+ zuerst zu drücken [. Wenn Sie zur Eingabeaufforderung zurückblättern, wird der Kopiermodus ebenfalls automatisch beendet.

Pavlo
quelle
1
Beachten Sie, dass Sie möglicherweise die Konfigurationsdatei neu laden müssen, wenn Sie bereits einen laufenden tmux-Server haben. blog.sanctum.geek.nz/reloading-tmux-config tmux source-file ~ / .tmux.conf
Allan Nienhuis
7
Funktioniert nicht für mich unter OS X.
Ain
2
@Ain - Es gibt jetzt 11 Hauptversionen von OS X. Von welcher Version sprechen wir genau?
Ramhound
10
Für tmux> = 2.1 siehe @ DannyRes Antwort (derzeit ziemlich weit unten).
joelostblom
3
set -g mouse onarbeitete für mich auf macOS tmux 2.1
Miguel Mota
123

Es gibt einige Änderungen für Tmux 2.1

  • Maus-Modus wurde umgeschrieben. Es gibt jetzt keine Optionen mehr für:

    • Maus-Resize-Bereich
    • Maus-Auswahl-Bereich
    • Maus-Auswahl-Fenster
    • Modus-Maus

    Stattdessen gibt es nur eine Option: 'mouse', die die Mausunterstützung vollständig einschaltet.

Das wäre

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'"
DannyRe
quelle
6
Danke, jetzt funktioniert das Auswählen von Fenstern usw., das Scrollen jedoch nicht. Verwenden Sie diese Option
Mahdi
1
super - das funktioniert sogar auf cygwin - tmux unter WINDOWS 7
GWD
@ Mahdi Dies scheint auf osx nicht zu funktionieren. Irgendwelche Hinweise?
DiTTiD
2
bindscheint auf tmux 2.3
Theron Luhn
2
+1 für set -g mouse on. Vorheriger Kommentar ist korrekt. Die Bindung wird nicht mehr benötigt.
Dakusan
63

In der aktuellen Version von tmux (1.5) können Sie einfach die Option mode-mouse aktivieren und mit dem Mausrad scrollen.

         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.

In meiner .tmux.conf:

set-window-option -g mode-mouse on
bukzor
quelle
Das ist das Verhalten, das du wirklich willst! Mouse Scroll aktiviert den Kopiermodus und scrollt nicht nur den alternativen Shell-Puffer. Das war für mich schließlich der Anreiz, vom Bildschirm auf tmux umzusteigen . Gibt es eine Option, um dasselbe Verhalten auch mit Shift + PgUp zu erzielen?
kynan
1
@kynan: Ich persönlich drücke einfach, um das C-A PgUpzu tun. Sie können den Bild-auf-Schlüssel direkt mit binden tmux bind-key -n PPage copy-mode -u. Das gleiche sollte für shift + pageup funktionieren, wenn Sie es von Ihrem lokalen Terminal trennen.
Bukzor
1
Dies führt zu einem merkwürdigen Verhalten, bei dem beim Zurückblättern in die Befehlszeile ein zusätzliches Zeichen in die CLI eingefügt wird, was normalerweise zu einer Fehlform meines ersten Befehls führt. Es ist ziemlich nervig.
Chris R
Beachten Sie, dass dies zwar für das Auslösen des Bildlaufs mit der Maus gut funktioniert, jedoch ein merkwürdiges Verhalten verursacht, wenn Text ausgewählt wird, der mit der mittleren Maustaste eingefügt werden soll. Am Ende bevorzuge ich Cb pg-up / down (die Standardeinstellung), da der Kompromiss nicht akzeptabel war.
07.
@ ChrisR Ich verstehe das auch ziemlich gut und es ist nicht ganz konsequent. Handelt es sich um eine [M] [M] [M] [M] [M] [M] [M] [M] -Saitentyp?
Elijah Lynn
53

Versuchen Sie dies in Ihrer .tmux.conf

# 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

Aus http://brainscraps.wikia.com/wiki/Extreme_Multitasking_with_tmux_and_PuTTY

John L. Jegutanis
quelle
+1 für die escape-timeEinstellung
Dakusan
Für alle anderen, die sich fragen, wird die Datei .tmux.conf in Ihrem Home-Verzeichnis abgelegt.
user2647513
15

Jemand (von einer Quelle, die ich verloren habe) schlug vor, Folgendes hinzuzufügen ~.tmux.conf:

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

Ich habe keine Ahnung, wie es funktioniert oder was es tut, aber jetzt kann ich mit dem Mausrad in einer tmux-Sitzung scrollen, ohne in den Kopiermodus von tmux wechseln zu müssen. Ich scrolle nur das Rad und BAM! Es klappt. Beachten Sie, dass ich terminal.app verwende, aber ich erinnere mich, dass das OP die Antwort speziell für die Verwendung mit gegeben hat gnome-terminal.

Jed Daniels
quelle
1
Jed, danke! Ihr Rat funktioniert auch im Gnome-Terminal. Ich werde versuchen, dieses Setup für einige Zeit zu verwenden. Aber es hat einen Nachteil: Das Scrollen mit der Maus funktioniert jetzt nicht mehr wie erwartet in less. Wenn ich laden lessinnen tmux, blättern Sie in der Datei geöffnet nicht Maus Scrollen less. Das gesamte Terminal wird gescrollt. Verhält sich vimseltsamerweise wie erwartet in tmuxdeinem Setup.
user31494
2
Beachten Sie, dass dies ab tmux 1.5 durch die setw -g mode-mouse onOption ersetzt wird, die das Zurückscrollen im Kopiermodus mit dem Mausrad ausführt.
kynan
3
Die Erklärung ist, dass diese Option die Bildlaufsperre auf dem alternativen Bildschirm des Terminals deaktiviert, was in den meisten Fällen wünschenswert ist, da Anwendungen, die einen alternativen Bildschirmpuffer (vi, less, tmux usw.) anfordern, ihre eigenen Bildlauffunktionen bereitstellen. Durch Überschreiben dieser Sperre in tmux kann der alternative Bildschirmpuffer des Terminals gescrollt werden, wodurch nur in wenigen Fällen das gewünschte Ergebnis erzielt wird. In dieser Antwort finden Sie ein Zitat zur man xtermErläuterung des alternativen Bildschirms.
kynan
Leider funktioniert dies nicht in iTerm
Suan
Ich habe mit iTerm 2
Keith Smiley
5

Mit tmux 2.1 werden neue Mausbindungen eingeführt.

Ich habe diese Binds gerade heute geschrieben. Es bindet das Mausrad nahtlos an die Pfeile, wenn Sie nicht in Vim sind, da Vim in der Lage ist, die unformatierten Mausradcodes zu interpretieren (z. B. um auszuwählen, welches Vim-Fenster für Sie gescrollt werden soll, je nachdem, über welches sich Ihre Maus befindet).

Dies bedeutet, dass wir endlich die Maus nur zum Anzeigen mehrerer Manpages und für alle anderen Arten von Pfeiltasten verwenden können. Sie können die ifLogik nach Bedarf erweitern und verketten , um mehr Logik für Ihre Anwendungen zu implementieren.

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"

Mit dieser neuen Radbindungsfunktion ist es möglich, das Mausrad mit Skripts zu versehen, um ein beliebiges kontextsensitives Verhalten auszuführen.

Steven Lu
quelle
Ich spiele jetzt nur mit der Idee, ein Mausrad am Scheibenrand dazu zu bringen, etwas Interessantes zu tun. Wahrscheinlich werde ich das Rad nicht auf den Rand mappen, sondern es mappen, um die tmux-Fenster zu durchlaufen, wenn dies über die Statuszeile erfolgt.
Steven Lu
Was ist der Link zu deinem Github? Ich möchte über Ihre Bemühungen auf dem Laufenden bleiben! Eine weitere Funktion, nach der ich suche, ist das Kopieren des Wortes per Doppelklick in die X-Zwischenablage, wie dies auch außerhalb von Tmux der Fall ist.
Joeytwiddle
@joeytwiddle Ich empfehle sehr github.com/NHDaly/tmux-better-mouse-mode , siehe meine andere Antwort
Steven Lu
3

Gnome-Terminal macht einige nette Tricks, um Maus-Scroll-Ereignisse unter eingeschränkten "normalen" Scrollbedingungen in Auf- und Ab-Pfeiltasten zu übersetzen. Zum Beispiel, wenn Sie einen Text mit ansehen less(dies geschieht insbesondere , wenn Sie einen Mann zu lesen), können Sie den Inhalt blättern mit j, kund Pfeiltasten. Aber auch mit gnome-terminalkönnen Sie dank des genannten Tricks mit der Maus scrollen.

Ich nehme tmuxan, dass das Terminal auf ähnliche Weise "erfasst" wird less- und der gleiche Mechanismus wie bei " gnome-terminalKicks in": Das Scrollen mit der Maus führt zu einem Drücken der Pfeiltasten nach oben / unten.

Sie können diese Funktion in den Profileinstellungen deaktivieren und unter allen Umständen den normalen Bildlauf durchführen. Nur deaktivieren Sie das letzte Kontrollkästchen in dem „Scrollen“ tab: das Kontrollkästchen.

ulidtko
quelle
Danke für die Erklärung, uldtko! Aber es hilft nicht beim Scrollen mit der Maus. Ja, wenn die Option deaktiviert ist, wird das gnome-terminaldreifache Senden ^[[Aund das Scrollen mit der ^[[BMaus abgebrochen . Es ist in netter tmux( ^[[A^[[A^[[Ain einigen Programmen nicht hässlich, kein hässliches Scrollen im Befehlsverlauf), lesshört aber jetzt auf, mit der Maus zu scrollen.
User31494
1
Ukrainisch? (Erraten durch die iZeichen)
Dotancohen
1

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

Konfigurierbare und funktionsreiche Implementierung der Maussteuerung für neuere tmuxes. sehr empfehlenswert.

Sie möchten wahrscheinlich verwenden

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

damit auch.

Steven Lu
quelle
Ich habe dies installiert, kann aber keinen Text mehr mit der Maus markieren und kopieren. Schaffst du das?
Jonathanking
Ja, Sie haben wahrscheinlich eine andere mausbezogene tmux-Konfiguration, die mit dieser in Konflikt steht.
Steven Lu
0

Sie können die verbindlichen Ideen aus den anderen Antworten kombinieren, um ein ziemlich zufriedenstellendes Bildlaufverhalten zu erhalten: Funktioniert in vim, wechselt der Kopiermodus automatisch in das Terminal und beendet es, wenn Sie den unteren Rand erreichen. Dies ermöglicht Ihnen weiterhin, Ihr Mausrad in man, less und journalctl zu verwenden.

Mein Code:

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'"

Sie können weitere Befehle hinzufügen, für die Pfeiltasten zum Scrollen im grep -e 'man'-Teil erforderlich sind

Ich habe die Send-Tasten mehrmals hinzugefügt, so dass ein Häkchen auf dem Mausrad 4 Zeilen auf einmal scrollen wird

stealz
quelle
0

Wenn Sie sich bereits in einer tmux-Sitzung befinden, können Sie den Befehl ausführen

set mouse on

Erinnerung: Um Befehle auszuführen, verwenden Sie dann Ihr Präfix :.

Robert
quelle