Einführung

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.