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
vonscreen
) - 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 "
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 erzeugenC-a n
Zu Fenster n gehen (n = 1 bis 9)C-a C-a
Zurück zum vorher ausgewählten FensterC-a ?
Hilfe anzeigenC-a a
SendetCtrl-A
C-a d
Sitzung detachen (wieder attachen mit$ tmux attach
Ein paar Tastenkombinationen sind anders:
C-a x
Fenster 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 h
In gesplittetes Fenster links wechseln (genau so mitjkl
)C-a q
Gesplittete Fenster durchnummerieren und auswählenC-a Space
Layout der gesplitteten Fenster wechseln (erinnert an Tiling-Windowmanager)C-a s
Laufende Sessions anzeigen und wechselnC-a r
Konfiguration neu laden
Texte können so kopiert werden (Vorzeitiges Abbrechen mit q
):
C-a [
In vi-Kopiermodus wechselnhjkl
Navigierenv
Auswahl beginneny
Auswahl 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