tmux in der Praxis: Scrollback-Puffer

Der Unterschied zwischen Terminal- und tmux-Scrollback-Puffern sowie die Optimierung des Kopiermodus, des Bildlaufs und der Mausauswahl des tmux-Verhaltens.

Dies ist der dritte Teil meiner Artikelreihe zu tmux in der Praxis.

Normalerweise implementieren Terminalemulatoren einen Scrollback-Puffer, sodass Sie frühere Ausgaben untersuchen können, wenn diese nicht mehr sichtbar sind. tmux läuft wie andere Vollbild-Terminalanwendungen wie vim im sogenannten alternativen Bildschirmpuffer eines übergeordneten Terminals. Alternativer Puffer hat exakte Abmessungen für Breite und Höhe als physische Fenstergröße.

Die Verwendung eines alternativen Puffers hat verschiedene Auswirkungen:

  • Jede Ausgabe, die den sichtbaren Teil des alternativen Puffers überschreitet, geht verloren. Sobald Linien außer Sicht geraten, gehen sie verloren. Um Verlaufsverluste zu vermeiden, implementiert tmux seinen eigenen „inneren“ Scrollback-Puffer. Dies hat zur Folge, dass Sie nicht wie in Ihrem Terminal mit dem inneren Scrollback von tmux arbeiten können.
  • In tmux erzeugte Ausgaben (dasselbe gilt für vim, nano, man, less usw.) werden nicht in den Scrollback-Verlauf des äußeren Terminals übertragen. Wenn Sie Ihre Vollbild-App schließen, kehren Sie beim Starten der App zum gleichen Status zurück und sehen keine Ausgabe mehr innerhalb der App.

In der Praxis ⌘↑steuern und scrollen Sie den Scrollback-Puffer des äußeren iTerm anstelle des inneren Scrollback-Puffers des tmux , wenn Sie sich daran gewöhnt haben, mit Ihrem iTerm zurückzuscrollen, und wenn Sie dasselbe in einer laufenden tmux-Sitzung tun.

Die Lösung ist tmux spezifische Kontrollen nutzen , um ihre eigenen Rückholung Puffer zuzugreifen: Ctrl-bdann [Kopiermodus Verwendung eingeben Down/UpPfeile oder PageDownund PageUpTasten, qoder Enterzum Verlassen Kopiermodus.

Einige Leute, die dies ärgerlich finden - konfigurieren Sie den tmux-Scrollback-Puffer so, dass er im übergeordneten Terminal-Scrollback-Puffer angezeigt wird -, damit sie nur vertraute Scroll-Steuerelemente verwenden können. Siehe diesen Beitrag. Diese Lösung beschränkt sich jedoch auf eine tmux-Sitzung mit nur 1 Fenster und 1 Bereich. Wenn Sie eine tmux-Sitzung trennen / schließen, wird das übergeordnete Terminal mit der Ausgabe des tmux-Fensters verschmutzt.

Persönlich verwende ich tmux scrollback ohne Hacks oben, aber optimiere die Konfiguration, um freundlicher und vertrauter zu sein.

Zunächst möchte ich nicht prefix,[in den Kopiermodus wechseln. Ich habe mich daran ⌘↑gewöhnt, in iTerm mit dem Scrollen zu beginnen, und habe folgende Root-Tastenkombination hinzugefügt:

# trigger copy mode bybind -n M-Up copy-mode

Sobald Sie sich im Kopiermodus befinden, können Sie weiter drücken, M-Upum eine Zeile nach oben zu scrollen. Die übliche PageDownund PageUpBedienelemente stehen zur Verfügung von ganzem Bildschirm blättern, und zusätzliche M-PageDownund M-PageUpzu blättern um eine Hälfte Bildschirm (sehr praktisch).

# Scroll up/down by 1 line, half screen, whole screenbind -T copy-mode-vi M-Up send-keys -X scroll-upbind -T copy-mode-vi M-Down send-keys -X scroll-downbind -T copy-mode-vi M-PageUp send-keys -X halfpage-upbind -T copy-mode-vi M-PageDown send-keys -X halfpage-downbind -T copy-mode-vi PageDown send-keys -X page-downbind -T copy-mode-vi PageUp send-keys -X page-up

Selbst wenn ich mich in einer tmux-Sitzung befinde, kann ich den inneren tmux-Scrollback-Puffer weiterhin verwenden ⌘↑und ⌘↓steuern, anstatt den von iTerm. Es ist möglich, ein benutzerdefiniertes iTerm-Profil zu verwenden, bei dem einige Tastenkombinationen überschrieben werden, um tmux-Aktionen auszulösen. So ⌘↑drückte in iTerm sendet nur M-UpTastendruck tmux Sitzung.

Weitere Informationen finden Sie in meinem vorherigen Teil der Reihe „tmux in der Praxis“: tmux in der Praxis: Integration von iTerm2 und tmux.

Eine andere Standardeinstellung von tmux, die ich lieber ändern möchte, ist das Scrollen mit dem Mausrad. Es rollt um 5 Reihen, was sich wie ein großer Sprung anfühlt. Reduzieren wir es, um um 2 Zeilen zu scrollen:

# When scrolling with mouse wheel, reduce number of scrolled rows per tick to "2" (default is 5)
bind -T copy-mode-vi WheelUpPane select-pane \; send-keys -X -N 2 scroll-upbind -T copy-mode-vi WheelDownPane select-pane \; send-keys -X -N 2 scroll-down

Nun, lassen Sie uns über das Kopieren von Text sprechen, sobald Sie sich im Kopiermodus befinden. Ich gewöhne mich daran, Text mit der Maus zu kopieren. Aktivieren wir die Mausunterstützung:

set -g mouse on

Wenn Sie in tmux mit der Maus Text auswählen, wird dieser standardmäßig in den Puffer kopiert und Sie verlassen sofort den Kopiermodus. Ihre aktuelle Bildlaufposition wird am Ende der Ausgabe zurückgesetzt und Sie werden in einen Eingabeaufforderungsmodus versetzt. Lassen Sie uns dies in Aktion sehen:

Wie Sie bemerken, wird der Kopiermodus jedes Mal aktiviert, wenn ich Text mit der Maus auswähle. Es ist wirklich nervig. Wenn ich mit einer Aufgabe nicht weiterkomme, wähle ich normalerweise hier oder da einen Text aus, um zu meditieren (hilft es mir, mich darauf zu konzentrieren?). Oder Sie möchten einfach nur einen Text auswählen, der für Ihren Kollegen neben Ihnen hervorgehoben werden soll.

Also lasst uns das optimieren. Wir wollen nicht aus dem Kopiermodus geworfen werden. Wir möchten nicht, dass die Auswahl beim Ziehen mit der Maus gelöscht wird. Text aus der Auswahl kann anschließend mit der linken Maustaste kopiert werden.

# Do not copy selection and cancel copy mode on drag end event# Prefer iTerm style selection: select, then mouse click to copy to bufferunbind -T copy-mode-vi MouseDragEnd1Panebind -T copy-mode-vi MouseDown1Pane select-pane \;\ send-keys -X copy-pipe "pbcopy" \;\ send-keys -X clear-selection

Schauen wir uns das Ergebnis an:

Verwenden Sie C-pund , um auf die Kopierpufferelemente zuzugreifen und das neueste Element einzufügen p:

bind p paste-bufferbind C-p choose-buffer

Das war `s für heute. Bleib dran. Im nächsten Teil der Reihe „tmux in Practice“ werden wir uns mit der Integration der Zwischenablage und der Freigabe von in tmux kopiertem Text für die Systemzwischenablage befassen (sowohl lokal als auch bei Remote-Arbeit unter OSX und Linux).

Übrigens können Sie all diese Konfigurationsänderungen in Aktion sehen. Schauen Sie sich einfach mein tmux-config-Repo an.

Trick

Wenn Sie den tmux-Kopiermodus vollständig umgehen und Text über iTerm auswählen möchten, halten Sie einfach gedrückt pt> key while dragging you mouse.

Resources and links

shell — What exactly is scrollback and scrollback buffer? — Unix & Linux Stack Exchange — //unix.stackexchange.com/questions/145050/what-exactly-is-scrollback-and-scrollback-buffer

tmux scrollback with iTerm2 • dan.carley.co — //dan.carley.co/blog/2013/01/11/tmux-scrollback-with-iterm2/

tmux copy mouse selected text to clipboard automatically on mouse release — Stack Overflow — //stackoverflow.com/questions/36815879/tmux-copy-mouse-selected-text-to-clipboard-automatically-on-mouse-release

keyboard shortcuts — tmux — scroll up/down with shift + page up/down into a pane — Super User — //superuser.com/questions/702189/tmux-scroll-up-down-with-shift-page-up-down-into-a-pane

[question/request] copy-mode without automatically selecting a pane? · Issue #1021 · tmux/tmux — //github.com/tmux/tmux/issues/1021

ssh — Leaving tmux scrollback in terminal (iTerm2) — Stack Overflow — //stackoverflow.com/questions/12865559/leaving-tmux-scrollback-in-terminal-iterm2

command line — Use terminal scrollbar with tmux — Super User — //superuser.com/questions/310251/use-terminal-scrollbar-with-tmux

Original text