Mehrere Terminalfenster verwalten mit tmux (vs. screen)

Mit tmux kann man wie mit screen mehrere Terminalfenster innerhalb einer Konsole verwalten.
Tmux hat jedoch ein paar Vorteile gegenüber dem Klassiker screen.

Vorteile von tmux gegenüber screen

  • Fenster können auch vertikal gesplittet werden
  • Visuelle Benachrichtigung bei Aktivitäten aus anderem Fenster
  • Mehr Konfigurationsoptionen
  • Einfachere Konfiguration als (vgl. hardstatusstring von screen)
  • Innerhalt tmux kann man zwischen mehreren Sessions wechseln (Client-Server Prinzip)
  • Gut Skriptbar (von der Shell aus)
  • Mehrere Buffer für Kopieren/Einfügen
  • Fensternamen passen sich dynamisch den aufgerufenen Programmen an
  • Fenster können verschoben und vertauscht awerden
  • Konfiguration während dem laufenden Betrieb ändern und neu laden
  • Programme wie less, welche normalerweise die Konsole wieder leeren, werden auch geleert
  • Noch aktiv unter Entwicklung

Konfiguration

Tmux wird mit der Konfigurationsdatei ~/.tmux.conf konfiguriert.

Standardmässig nutzt tmux die Tastenkombination Ctrl-B als Meta-Key.
Da ich Ctrl-B oft in vi und in less zum zurückblättern verwende,
ist diese Tastenkombination nicht sehr ideal für mich. Deshalb wechselte ich den Meta-Key
wieder zu Ctrl-A, wie ich es von screen her kenne:

# C-a statt C-b als Meta-Key
unbind C-b
set -g prefix C-a
bind-key C-a last-window
bind-key a send-prefix

Nett von tmux finde ich, dass die Fenstertitel dynamisch den gestarteten Programmen
angepasst werden können:

# Set window notifications
setw -g monitor-activity on
set -g visual-activity on

Die Statusbar (Leiste ganz unten an der Konsole) kann wie folgt konfiguriert werden:

# Panes
set -g pane-border-fg white
set -g pane-active-border-fg white

# Statusbar
set -g status-bg white
set -g status-fg black
set -g status-interval 30
setw -g window-status-current-attr reverse
set -g status-right-length 55
set -g status-right "| #(whoami)@#H | #(awk '{print $1,$2,$3}' /proc/loadavg) | %Y-%m-%d %H:%M "

tmux

Für das Splitten von Fenstern habe ich mir auch zusätzliche Tastenkombinationen eingerichtet.
Mit Ctrl-a | kann ich nun Fenster vertikal und mit Ctrl-a - horizontal splitten.

# Panel splitter
bind-key | split-window -h
bind-key - split-window -v

Mit den vi-ähnlichen Keybindings kann man ganz einfach zwischen den gesplitteten Fenster wechseln:

# Mit hjkl durch Panels wechseln
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

Meine Konfigurationsdatei für tmux

Schlussendlich sieht meine Konfigurationsdatei so aus:

########################################################################
#
# ~/.tmux.conf
# Konfigurationsdatei für tmux
#
########################################################################

########################################################################
# Allgemein

# History
set -g history-limit 1000000

# 265 Farben
set -g default-terminal "screen-256color"

# Set window notifications
setw -g monitor-activity on
set -g visual-activity on

# Copymode: vi
set-window-option -g mode-keys vi
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection


########################################################################
# Aussehen

# Panes
set -g pane-border-fg white
set -g pane-active-border-fg white

# Statusbar
set -g status-bg white
set -g status-fg black
set -g status-interval 30
setw -g window-status-current-attr reverse
set -g status-right-length 55
set -g status-right "| #(whoami)@#H | #(awk '{print $1,$2,$3}' /proc/loadavg) | %Y-%m-%d %H:%M "


########################################################################
# Keybindings

# C-a statt C-b als Meta-Key
unbind C-b
set -g prefix C-a
bind-key C-a last-window
bind-key a send-prefix

# Panel splitter
bind-key | split-window -h
bind-key - split-window -v

# Mit hjkl durch Panels wechseln
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# Konfigurationsdatei dynamisch laden
unbind r
bind r source-file ~/.tmux.conf

# EOF

Benutzung

Kennt man screen, ist man recht schnell mit der Bedienung von tmux vertraut:

  • C-a c Neues Fenster erzeugen
  • C-a n Zu Fenster n gehen (n = 1 bis 9)
  • C-a C-a Zurück zum vorher ausgewählten Fenster
  • C-a ? Hilfe anzeigen
  • C-a a Sendet Ctrl-A
  • C-a d Sitzung detachen (wieder attachen mit $ tmux attach

Ein paar Tastenkombinationen sind anders:

  • C-a x Fenster killen
  • C-a , Dem aktuellen Fenster einen Titel geben

Neue Funktionen sind z. B. folgende (basierend auf meiner Konfigurationsdatei von oben):

  • C-a | Fenster vertikal splitten
  • C-a - Fenster horizontal splitten
  • C-a h In gesplittetes Fenster links wechseln (genau so mit jkl)
  • C-a q Gesplittete Fenster durchnummerieren und auswählen
  • C-a Space Layout der gesplitteten Fenster wechseln (erinnert an Tiling-Windowmanager)
  • C-a s Laufende Sessions anzeigen und wechseln
  • C-a r Konfiguration neu laden

Texte können so kopiert werden (Vorzeitiges Abbrechen mit q):

  • C-a [ In vi-Kopiermodus wechseln
  • hjkl Navigieren
  • v Auswahl beginnen
  • y Auswahl kopieren
  • C-a ] Auswahl einfügen

Viele weitere Funktionen sind in der Manpage beschrieben.

Links und weitere Informationen

Leave a Comment