Scrollen Sie die Shell-Ausgabe mit der Maus in tmux

122372
user31494

Das Scrollen mit der Maus funktioniert in tmux nicht so, wie es funktioniert, wenn ich shell ohne tmux (in Gnome Terminal) starte. Es scheint, als würde Tmux Maus-Scroll-Ereignisse senden, als ob ich die Up / Down-Tasten gedrückt habe. Aber ich möchte, dass es durch den Shell- Ausgabeverlauf blättert. Gibt es eine Möglichkeit, tmux so zu arbeiten?

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

Ich habe in zwei Versionen von tmux versucht, das Mausscrollen auszuführen:

230
Ich denke, die Antwort von bukzor löst dein Problem für Tmux 1.5 und neuer. kynan vor 12 Jahren 1

9 Antworten auf die Frage

214
Pavlo

So blättern Sie innerhalb des Verlaufs der Ausgabe. Sie können ^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 verwenden können PgUpund PgDownaber. Mein Terminal sendet diese Schlüssel nicht an den tmux. Stattdessen scrollt es sich selbst und nicht die tmux-Historie.

Um den Kopiermodus zu verlassen, drücken Sie ESC

Um Ihre Maus in diesem Modus zu verwenden (als Kopiermodus bezeichnet), 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 Ihre Maus zum Scrollen verwenden. 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 wird bei Verwendung dieser Option automatisch in den Kopiermodus gewechselt und der Tmux-Scrollback-Puffer zurückgespult. Es ist nicht notwendig, zuerst mehr Ctrl-B+ zu schlagen [. Wenn Sie zur Aufforderung zurückblättern, wird auch der Kopiermodus automatisch beendet.

Beachten Sie, dass Sie möglicherweise die Konfigurationsdatei neu laden müssen, wenn Sie bereits einen tmux-Server haben. http://blog.sanctum.geek.nz/reloading-tmux-config/tmux source-file ~ / .tmux.conf Allan Nienhuis vor 10 Jahren 1
Funktioniert nicht für mich unter OS X. Ain vor 9 Jahren 7
@Ain - Es gibt jetzt 11 Hauptversionen von OS X. Über welche Version sprechen wir genau? Ramhound vor 9 Jahren 2
Der letzte 10.10.4. Ain vor 9 Jahren 1
Für tmux> = 2.1 siehe @ DannyRes Antwort (derzeit ziemlich weit unten). joelostblom vor 8 Jahren 10
`set -g mouse on` hat auf macOS tmux 2.1 für mich funktioniert Miguel Mota vor 7 Jahren 3
114
DannyRe

Es gibt einige Änderungen für Tmux 2.1

  • Der Mausmodus wurde neu geschrieben. Es gibt jetzt keine Optionen mehr für:

    • Bereich zur Größenänderung der Maus
    • Mausauswahlbereich
    • Mausauswahlfenster
    • Modus-Maus

    Stattdessen gibt es nur eine Option: 'Maus', 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 = "#" "send-keys -M" "if -Ft= '#' 'send-keys -M' 'copy-mode -e'" 
Danke, jetzt Auswahl von Fenstern usw. funktioniert, aber Scrollen funktioniert nicht. Damit das Scrollen wieder funktioniert, verwenden Sie diesen Befehl: https://github.com/NHDaly/tmux-scroll-copy-mode Mahdi vor 9 Jahren 5
super - das funktioniert sogar auf cygwin-tmux unter WINDOWS 7 WD11 vor 8 Jahren 1
@ Mahdi Das scheint bei osx nicht zu funktionieren. Irgendwelche Hinweise? SolidSnake vor 8 Jahren 0
@SolidSnake: Ich kann mich nicht erinnern, dass ich Probleme mit diesem Plugin hatte. Es hat reibungslos funktioniert, ich habe den Mausmodus aktiviert und dann installiert. Sie sollten Ihre tmux-config mit `tmux source-file ~ / .tmux.conf 'neu laden Mahdi vor 8 Jahren 0
`bind` scheint auf tmux 2.3 nicht mehr notwendig zu sein Theron Luhn vor 7 Jahren 1
+1 für `set -g mouse on`. Der vorherige Kommentar ist korrekt. Die Bindung wird nicht mehr benötigt. Dakusan vor 6 Jahren 0
61
bukzor

In der aktuellen Version von tmux (1.5) können Sie einfach die Modus-Maus-Option 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 
Das ist das Verhalten, das Sie wirklich wollen! Der Maus-Scroll-Modus ermöglicht den Kopiermodus und nicht nur den alternativen Shell-Puffer. Das war schließlich der Anreiz, für mich von _screen_ zu _tmux_ zu wechseln. Gibt es eine Option, um das gleiche Verhalten auch mit Shift + PgUp zu erhalten? kynan vor 12 Jahren 0
@kynan: Ich persönlich drücke einfach `CA PgUp`, um das zu tun. Sie können die Seitentaste direkt mit "tmux bind-key -n PPage copy-mode -u" binden. Ähnliches sollte für shift + pageup funktionieren, wenn Sie es von Ihrem lokalen Terminal trennen. bukzor vor 11 Jahren 1
Dies führt zu einem seltsamen Verhalten, bei dem ich beim Zurückblättern zur Befehlszeile ein zusätzliches Zeichen in die CLI einfügt, was normalerweise dazu führt, dass mein erster Befehl fehlerhaft ist. Es ist ziemlich nervig. Chris R vor 11 Jahren 1
Beachten Sie jedoch, dass dies für das Auslösen des Bildlaufs mit der Maus gut geeignet ist. Es verursacht ein ungerades Verhalten, wenn Text ausgewählt wird, der mit einem mittleren Klick eingefügt wird. Am Ende bevorzugte ich Cb pg-up / down (Standardeinstellung), da der Kompromiss nicht akzeptabel war. h7r vor 9 Jahren 0
@ CRRISR Ich bekomme das auch ziemlich viel und es ist nicht ganz konstant. Ist es ein [M [M # [M [M # [M [M # [M [M # [M-Typ einer Zeichenfolge? Elijah Lynn vor 8 Jahren 0
51
John L. Jegutanis

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 

Genommen von http://brainscraps.wikia.com/wiki/Extreme_Multitasking_with_tmux_and_PuTTY

+1 für die Einstellung für "Fluchtzeit" Dakusan vor 6 Jahren 0
14
Jed Daniels

Jemand (aus 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 innerhalb einer tmux-Sitzung scrollen, ohne in den tmux-Kopiermodus zu wechseln. Ich scrolle einfach 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, vielen Dank! Ihr Ratschlag funktioniert auch in gnome-terminal. Ich werde versuchen, dieses Setup einige Zeit zu verwenden. Aber es hat einen Nachteil: Das Scrollen mit der Maus funktioniert jetzt nicht wie erwartet in "weniger". Wenn ich "less" in "tmux" lade, werden die in "less" geöffneten Dateien nicht mit der Maus gescrollt. Es scrollt das gesamte Terminal. Seltsamerweise verhält sich "vim" in "tmux" bei Ihrem Setup wie erwartet. user31494 vor 13 Jahren 1
Beachten Sie, dass dies seit tmux 1.5 durch die Option `setw -g mode-mouse on` ersetzt wird, die den Scrollmodus des Modus mit dem Mausrad verwendet. kynan vor 12 Jahren 2
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 den alternativen Bildschirmpuffer anfordern (vi, less, tmux usw.), eigene Bildlauffunktionen bereitstellen. Das Überschreiben dieser Sperre in tmux ermöglicht das Scrollen _des alternativen Bildschirmpuffers_ des Terminals, der in allen wenigen Fällen nicht das gewünschte Ergebnis liefert. In [diese Antwort] (http://superuser.com/a/321233/44469) finden Sie ein Zitat von "man xterm", in dem der alternative Bildschirm erläutert wird. kynan vor 12 Jahren 3
Leider funktioniert das in iTerm nicht Suan vor 12 Jahren 0
Ich habe mit iTerm 2 positive Ergebnisse erzielt Keith Smiley vor 11 Jahren 0
Das hat auch für mich mit Terminal.app funktioniert. fiorix vor 10 Jahren 0
Wenn Sie über mehrere Panels verfügen, ist der Bildschirm durcheinander. davidshen84 vor 9 Jahren 0
Funktioniert nicht mit tmux unter OS X (Yosemite), scrollt das gesamte Fenster. Ain vor 9 Jahren 0
@Ain: Ich denke, Yosemite hat die Standardeinstellung geändert, aber Sie können es unter Terminaleinstellungen -> Profile -> Tastatur -> "Alternativer Bildlauf-Bildschirm" umschalten. Oder Sie können stattdessen die Umschalttaste gedrückt halten, während Sie scrollen. Jed Daniels vor 9 Jahren 0
5
Steven Lu

tmux 2.1 führt neue Mausbindungen ein.

Ich habe diese Bindungen gerade heute geschrieben. Das Mausrad bindet sich nahtlos an Pfeile, wenn es sich nicht in Vim befindet, da Vim die rohen Mausradcodes interpretieren kann (z. B. zum Auswählen des Vim-Fensters, das für Sie durchlaufen werden soll, abhängig davon, welches der Mauszeiger darüber ist).

Dies bedeutet, dass wir die Maus schließlich nur verwenden können, um mehrere Manpages anzuzeigen, und was auch immer sonst Pfeiltasten akzeptiert. Sie können die ifLogik nach Bedarf erweitern und verketten, um mehr Logik für Ihre Anwendungen zu implementieren.

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

Mit dieser neuen Funktion zum Binden von Rädern ist es möglich, das Mausrad mit einem Skript zu versehen, um ein beliebiges kontextsensitives Verhalten auszuführen.

Ich spiele jetzt irgendwie mit der Idee, Mausrad am Scheibenrand etwas interessantes machen zu lassen. Was ich tun werde, ist wahrscheinlich nicht das Kartenrad am Rand, sondern das Tmux-Fenster, wenn Sie die Statuszeile übergehen. Steven Lu vor 8 Jahren 0
Was ist die Verbindung zu deinem Github? Ich möchte über Ihre Bemühungen auf dem Laufenden bleiben! Eine andere Funktion, nach der ich suche, ist das Doppelklicken, um das Wort in die X-Zwischenablage zu kopieren, wie es außerhalb von Tmux der Fall ist. joeytwiddle vor 8 Jahren 0
@joeytwiddle Ich empfehle dringend https://github.com/NHDaly/tmux-better-mouse-mode, siehe meine andere Antwort Steven Lu vor 6 Jahren 0
3
ulidtko

Gnome-terminal führt einige Tricks aus, die Maus-Scroll-Ereignisse in die Aufwärts- und Abwärts-Pfeiltasten umwandeln, wenn das "normale" Scrollen eingeschränkt ist. 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 erwähnten Tricks das Scrollen mit der Maus durchführen.

Ich schätze tmux, das Terminal wird "gefangen" less- und derselbe Mechanismus gnome-terminaltritt ein: Das Scrollen mit der Maus wird in Pfeiltasten nach oben / unten übersetzt.

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.

Danke für die Erklärung, uldtko! Es hilft jedoch nicht beim Scroll-Problem der Maus. Ja, bei deaktivierter Option stoppt "gnome-terminal" das Senden von dreifachen "^ [[A" und "^ [[B" bei Mauslauf. Es ist in `tmux` schöner (kein hässliches` ^ [[A ^ [[A ^ [[A] in einigen Programmen, kein hässliches Befehlsprotokoll-Scrollen)], aber jetzt stoppt 'less' beim Scrollen mit der Maus. user31494 vor 13 Jahren 0
Ukrainisch? (Erraten durch die `i`-Zeichen) dotancohen vor 11 Jahren 1
0
Steven Lu

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.

0
stealz

Sie können die Bindungsideen aus den anderen Antworten kombinieren, um ein ziemlich zufriedenstellendes Bildlaufverhalten zu erzielen: Der vim wechselt in den Kopiermodus automatisch in das Terminal und beendet ihn, wenn Sie den unteren Rand erreichen.

Mein Code:

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

Sie können andere Befehle hinzufügen, für die ein Scrollen im Pfeiltasten grep -e 'man' erforderlich ist

Ich habe die Send-Tasten mehrmals hinzugefügt, so dass ein Mauszeiger auf dem Mausrad 4 Zeilen auf einmal blättert