Tmux - Eine Einführung

Bildnachweis: http://wallpapercave.com/old-computer-wallpaper

Es ist kein großes Geheimnis dass ich meine komplette Arbeit größtenteils im Terminal erledige. Schließlich redete ich darüber auf dem Bremer Webmontag und schreibe gelegentlich einen Blogbeitrag genau über dieses Thema. Und solltest du dich einmal mit mir in Persona unterhalten haben, besteht eine große Chance dass ich es dir innerhalb der ersten 15 Minuten erzählt habe.

Inzwischen hat sich bei mir ein gewisser Stack aus drei Werkzeugen herauskristallisiert. Dieser besteht aus Vim, Tmux und FZF. Und heute will ich etwas aus Tmux eingehen.

Natürlich hab ich wieder ein Video aufgenommen. Solltest du also nicht gerne lange Texte mit vielen Shortcuts mögen, vielleicht tut es ja das Video. Und natürlich würde ich mich über neue Abonnenten freuen.

Was ist Tmux

Wenn man einmal anfängt sich mehr und mehr auf das Terminal zu verlassen, wird man schnell merken dass die Anzahl der Terminalfenster bzw. Tabs immer größer wird. So gibt es z.B. ein Fenster für Git Commits, Taskrunner, einen lokalen Server, vielleicht einen Irssi / Weechat oder einen Editor wie Vim.

Hier den Überblick zu behalten kann manchmal etwas schwierig sein. Dazu kommt, dass dieses für jedes Projekt gilt. Wechselt man schnell das Projekt, bspw. um einen schnellen Task in einem anderen Projekt zu erledigen, kann sich die Anzahl der Fenster schnell verdoppeln. Mit der Zeit wird dieses ziemlich unübersichtlich. Zwar bieten Apps wie iTerm eine ähnliche Lösung an, sind aber bei weitem nicht so flexibel und intuitiv.

Und hier kommt Tmux ins Spiel. Trommelwirbel.

Tmux, ...

...das steht für Terminalmultiplexer, ist eine einfache Möglichkeit genau dieses Problem zu lösen. Man kann sich Tmux wie ein Betriebssystem (Sessions) mit virtuellen Desktops (Windows) und Apps (Panes) vorstellen. Dazu kann man beliebig viele Sessions gleichzeitlich laufen lassen. Sitzungen (Sessions) lassen sich nach belieben laden (attach) oder entkoppeln (detach).

Tmux ermöglicht das simultane Arbeiten an mehreren Projekten mit einen Vielzahl von verschiedenen Ansichten und Jobs die gleichzeitig laufen und lässt einen trotzdem in Ruhe. In Sekundenschnelle kann man Projekte wechseln und neue Tasks ausführen, ohne dass diese sich irgendwie im Weg stehen.

Installation
Sollte Tmux noch nicht installiert sein, empfehle ich die Installation mit Homebrew: brew install tmux bzw. auf Ubuntu/Debian mit sudo apt-get install tmux

Das wars.

Tmux vs. Screen

Einige werden hier nun sagen: "Hey, es gibt doch GNU Screen - warum soll ich Tmux nutzen?". Ich selber habe Screen vor einigen Jahren nur über einen kurzen Zeitraum genutzt. Aus meiner Sicht fühlte sich Screen etwas altbacken und auch unperformant an. Letztendlich ist es wahrscheinlich eher eine Frage des Geschmacks.

Die Unterschiede zu Screen sind u.a.:

  • Tmux läuft auf einem großen Server, Screen auf verschiedenen einzelnen Instanzen
  • Ein konsistentes Command Interface.
  • Viele Tmux Kommandos sind auch direkt von der Shell, also ausserhalb von Tmux
  • Automatische Window Benamungen
  • Vi und emacs Key Layouts
  • und mehr...

Lest das Tmux FAQ - Dort werden die Unterschiede genauer beleuchtet.

Der Erste Schritt

Nun kann man eine Tmux Session starten. Navigiert per Commandline in einen Ordner in welchen eine neue Session gestartet werden soll und startet Tmux mit tmux.
So wird automatisch ein neuer Tmux-Server gestartet, sofern noch keiner läuft.

Das Prefix

Nun sieht man erstmal nicht viel. Eine Leiste ist am unteren Bildschirmrand aufgetaucht. Erinnert ihr euch an den oben erwähnten "Desktop" Vergleich? Genau - wir befinden uns jetzt in einer Session. Und jetzt?

Tmux wird größtenteils mit Shortcuts bedient. Um nun Doppelbelegungen durch das OS oder anderen Commandline Tools zu vermeiden gibt es ein Prefix, dass standardmässig auf CTRL-B liegt. Um nun einen Tmux Befehl auszuführen muss ein Prefix und dann erst der entsprechende Befehl ausgeführt werden.

Schritt für Schritt

  • Ctrl drücken und halten
  • b drücken
  • beide loslassen
  • Tmux Shortcut eingeben.

CTRL-B ist für viele wahrscheinlich sehr sperrig, schließlich müssen hierfür bei vielen beide Hände genutzt werden. Ich selber nutze CTRL-A als Prefix, einige andere nutzen einfach nur Alt. Diese Entscheidung muss jeder für sich selbst entscheiden.
Das Prefix lässt sich in der tmux.conf Datei anpassen. Das folgende Snippet ändert das Prefix auf CTRL-A.

set-option -g prefix C-a

Mehr dazu am Ende des Artikels.

Sessions

Session Starten
Eine neue Session wird mit tmux gestartet. Links unten steht der Sessionname. Dieser dürfte nur eine Zahl sein. Einer Session kann man nun einen Namen geben, bspw. einen Projektnamen wie "MyReactApp". Dafür einfach Prefix + $ drücken und einen Namen eingeben. Enter drücken. Fertig.

Session umbenennen mit `Prefix - $`

Schneller geht es wenn man eine Session direkt mit einem Namen erstellt: tmux new -s MyReactApp

Detach / Attach
Sind wir in einer Session und möchten diese kurz verlassen, drückt man Prefix + d. Damit wird die Session detached (abgelöst) und man ist wieder in seiner Shell.
Mit tmux a kann man nun wieder zurück in die letzte offene Session springen. Hat man mehrere Sessions kann man sich diese mit tmux ls anzeigen lassen und dann eine spezifische Session mit tmux a -t SessionName öffnen.

Das dürfte im Terminal dann folgendermaßen aussehen:

$ tmux ls
0: 1 windows (created Thu Mar  2 15:50:33 2017) [89x22]
2: 1 windows (created Thu Mar  2 15:50:50 2017) [89x22]
irssi: 1 windows (created Thu Mar  2 15:51:17 2017) [89x22]
react: 1 windows (created Thu Mar  2 15:51:03 2017) [89x22]
$ tmux a -t irssi

Will man nur seine Session wechseln kann man sich den Umweg über die Bash auch sparen. Prefix ( und Prefix ) wechselt zur vorherigen / nächsten Session. Noch besser wird es mit Prefix s. Dadurch werden alle aktiven Sessions angezeigt und können direkt ausgewählt werden.

Schnelles Session wechseln mit `Prefix - s`

Windows

Die Windows sind die virtuellen Desktops unseres Tmux Servers. Grob umschrieben ist es die Ansicht die wir aktuell sehen. Eine Session kann viele verschiedene Windows besitzen, doch sieht man immer nur eins. Alle Windows einer Session lassen sich am unteren Bildschirmrand ablesen.

Ein zusätzliches Window lässt sich mit Prefix c erstellen. Man sieht direkt einen zweiten Tab am unteren Bildschirmrand.
Mit Prefix , lässt sich dieser Tab umbenennen. Beispielsweise in "Taskrunner" oder "WeeChat".

Vor dem Namen steht eine Zahl. Diese beschreibt die Id des aktuellen Windows. Man kann schnell zu einem bestimmten Fenster mit Prefix <WindowID> springen.

Wird ein Window nicht mehr benötigt kann es mit Prefix & geschlossen werden.

Splits / Panes

Panes sind der essentielle Bestandteil von Tmux. Hier spielt sich alles ab. Ein Pane ist eine eigene Instanz einer Shell, also dass was man sonst sieht wenn man ein Terminalprogramm seiner Wahl öffnet.

Ein Pane lässt sich sowohl vertical (Prefix %) als auch horizontal (Prefix ") teilen. Geteilte Panes lassen sich auch wiederrum auch aufteilen. Und diese Panes auch wieder. Usw...

Man kann zwischen diesen Panes mit Prefix <Pfeiltaste> hin und hernavigieren. Alternativ kann auch mit Prefix o zwischen allen Panes durchgeschaltet werden.

Tmux bringt ein paar vorgefertigte Layoutwechsel mit. Prefix o lässt schnell zwischen diesen wechseln. Aber bitte beachten dass euer bisheriges Layout erst einmal weg ist.

Customizing

Tmux lässt sich mithilfe einer .tmux.conf Datei konfigurieren. Diese sollte üblicherweise im Rootverzeichnis liegen. Hier lassen sich verschiedene Einstellungen vornehmen sowie Shortcuts definieren. Und zuletzt findet ihr hier meine .tmux.conf Datei.

TL;DR

Wen einmal verstanden ist, was eine Session, ein Window oder ein Split ist, ist Tmux eigentlich sehr simpel. Aus einer alten Präsentation habe ich noch ein Gif erstellt was die Elemente noch einmal verdeutlicht.

Offensichtlich habe selber gezeichnet

Ausserdem habe ich alle Shortcuts nochmal in einen Gist festgehalten

Achja!

Artikel wie diese sind sehr viel Arbeit und freue mich über jedes Feedback. Sollte euch der Artikel gefallen haben, schreibt per Mail oder auf Twitter und abonniert meinen YouTube Channel! Vorallem Feedback zu dem Video ist sehr willkommen.

  • tmux
  • commandline
  • cli
  • introduction
  • einführung