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.
hardstatusstringvonscreen) - Innerhalt
tmuxkann 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 "
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 cNeues Fenster erzeugenC-a nZu Fenster n gehen (n = 1 bis 9)C-a C-aZurück zum vorher ausgewählten FensterC-a ?Hilfe anzeigenC-a aSendetCtrl-AC-a dSitzung detachen (wieder attachen mit$ tmux attach
Ein paar Tastenkombinationen sind anders:
C-a xFenster killenC-a ,Dem aktuellen Fenster einen Titel geben
Neue Funktionen sind z. B. folgende (basierend auf meiner Konfigurationsdatei von oben):
C-a |Fenster vertikal splittenC-a -Fenster horizontal splittenC-a hIn gesplittetes Fenster links wechseln (genau so mitjkl)C-a qGesplittete Fenster durchnummerieren und auswählenC-a SpaceLayout der gesplitteten Fenster wechseln (erinnert an Tiling-Windowmanager)C-a sLaufende Sessions anzeigen und wechselnC-a rKonfiguration neu laden
Texte können so kopiert werden (Vorzeitiges Abbrechen mit q):
C-a [In vi-Kopiermodus wechselnhjklNavigierenvAuswahl beginnenyAuswahl kopierenC-a ]Auswahl einfügen
Viele weitere Funktionen sind in der Manpage beschrieben.
Links und weitere Informationen
- Projektseite von
tmux: http://tmux.sourceforge.net/ - Manpage von
tmux: http://www.openbsd.org/cgi-bin/man.cgi?query=tmux&sektion=1
