CLI-Adventskalender, Tag 12: tmux

CLI-Adventskalender: tmux

Avatar von Eric

Die Halbzeit im CLI-Adventskalender nutzen wir, um uns mit tmux zu beschäftigen.

Yo dawg, ich hab gehört Du magst Terminals, also hab ich Terminals in Dein Terminal gepackt.

… ich musste gerade etwas husten. Es war ein staubiges Meme.

tmux

tmux. Der Terminal-Multiplexer. Mehrere Terminalfenster auf mehreren Seiten in mehreren Sessions.

Warum will man sich das antun? Fast alle Terminalemulatoren haben heute Registerkarten, Splitview geht auch mit modernen Fenstermanagern, also … warum?

Ewige Sessions

Log Dich auf Deinem Server ein und Deine Session ist noch da. Dein Editor ist noch genau da, wo er beim letzten Mal gewesen ist. Alle Programme laufen noch und liefern Input. Das geht natürlich nur dann, wenn die Session remote ist. Ansonsten … naja, lest einfach weiter.

Session aus Templates

Hier hilft tmuxinator new tollesprojekt. In ~/.config/tmuxinator/tollesprojekt.yaml lässt sich dann ein Template für eine Session anlegen:

name: toolesprojekt
root: /home/eric/projekt

windows:
  - vim:
      layout: main-vertical
      panes:
        - vim
        - # Leerer Spiegelstrich -> Leeres Terminal
  - server: rails s
  - logs: tail -f log/development.log

Mit anderen Worten: Dein bevorzugtes Arbeitslayout ist gleich starklar. tmuxinator führt alle Programme für Dich aus. Dein Devops-Setup braucht lange zum Hochfahren? Lade es gleich im Hintergrund, während Du noch genüsslich Deinen ersten Schluck Kaffee trinkst.

Templates lassen sich kopieren, anpassen, teilen und mit tmuxinator list auflisten.

Mehr als ein Bildschirm, mehr als ein Computer

Vielleicht möchte man nicht sein Laptop mit sich rumschleppen. Vielleicht ist da ein Computer im Büro, einer Zuhause, einer neben dem Bett. Es funktioniert alles nahtlos in derselben Session über SSH. Es kann auch bares Geld sparen, wenn man in der Cloud arbeitet. Ein einfacher Dockercontainer um das Devsetup hochzufahren und die fertig provisionierte Maschine ist immer startklar.

Pairen ohne Zoom

Oder Google Meet. Oder Microsoft Teams. Hierzu per SSH auf dieselbe Maschine verbinden. Wenn Alice und Bob pairen wollen, schreibt Alice

tmux new -s tollepairingsession

Bob schreibt

tmux attach -t tollepairingsession

Wenn beide unabhängig voneinander arbeiten wollen, schreibt Bob stattdessen

tmux new -s bobssession -t tollepairingsession

Alice und Bob arbeiten jetzt auf demselben Satz Fenstern.

Alarm aus dem Hintergrund

Manchmal brauchen Programme lange, um ihren Output zu liefern. STRG + B öffnet die tmux-Kommandozeile. Mit 

set-window-option monitor-activity on

bekommt man Hinweissymbol, wenn sich in einem nicht-aktiven Fenster etwas rührt.

Copy und Paste in vernünftig

… aber anders, als in anderen Programmen.

  • STRG+B [ startet den Copy-Mode.
  • Je nach Mode (vi oder emacs) navigiert man mit Pfeiltasten oder hjkl zu der entsprechenden Stelle und drückt v oder STRG + Leertaste.
  • Jetzt fängt man an zu markieren.
  • Enter beendet den Copy-Mode und kopiert was ausgewählt wurde in die Zwischenablage.

Mit STRG+B ] fügt man den Inhalt der Zwischenablage ein. Mit Strg+= bekommt man eine Zwischenablagen-Verwaltung, mit der man auch alte Inhalte der Zwischenablage einfügen kann. tmux sollte das auch gleich in die System-Zwischenablage schieben, oder zumindest mit ein wenig Konfiguration im Terminalemulator.

Alles aufgeräumt und beschriftet

Je nach Arbeitsmodus möchte man vielleicht ein Fokusfenster in groß haben und eine Reihe von kleineren Fenstern, auf die man ein Auge behalten möchte (einzelne Terminals heißen bei tmux „panes“, also Fensterscheiben). Tabs (heißen bei tmux Fenster) können beschriftet werden. Ich weiß immer, was gerade wo ist. Dann kann all das in sauber getrennte Sessions aufgeteilt werden. Zum Beispiel einen Satz Fenster für jedes Projekt, an dem man gerade arbeitet. Schneller Kontextwechsel gelingt so mit Hotkeys.

Keine Maus nötig

Irgendwie fühlt es sich besser an, wenn ich meinen Computer bedienen kann, ohne dass meine Hände die Tastatur und meine Finger (länger als einen Moment) die Homerow verlassen müssen. Ich bin definitiv schneller.

Plugins, Plugins, Plugins

Eine Menge davon sind Themes und Statusleisten, aber auch Schätze wie tmux-ressurect (speichert automatisch den aktuellen Stand der tmux Session – zum Wiederherstellen, falls sie geschlossen oder unterbrochen wird). Oder bessere Integration mit mpv, spotify, Wetter oder Nordvpn. Ich persönlich mag es, tmux-battery in meiner Statusleiste zu haben und den Stand meines Handyakkus bei Vollbild-Terminal zu sehen. Es ist sogar möglich, Browser-Sessions mit tmux zu verwalten und sie kontextabhängig wiederherzustellen (tmux-browser).

Eine hübsche Übersicht, bietet die awesome-tmux-Liste auf Github.

Zen

Vielleicht bin das nur ich, aber die meisten Fenstermanager sind mir zu bunt. Ich werde jetzt nicht meinen allwöchentlichen Rant über Werbung im Startmenü meines Computers, den ich bezahlt habe und deswegen auch bitte …

Nein, ich werde meinen Rant nicht lostreten. Punkt ist: Wenn ich meinen Terminalemulator in den Vollbildmodus packe, sehe ich genau das. was ich sehen muss. Nicht mehr, nicht weniger.

Einfach zu lernen und zu benutzen

tmux new. Das war’s, jetzt seid ihr drin. Mit STRG+B ? seht ihr eine Liste aller Shortcuts, so wie sie gerade definiert sind. Man kann sich also nicht verlaufen.

Des weiteren gibt es gute Bücher (z. B. tmux 2 – Productive Mouse-Free Development von Brian P. Hogan), eine Menge Tutorials und YouTube-Videos. Anders als bei vim und emacs ist das Wasser bei tmux nicht so tief wie es aussieht. Es lohnt sich, einen Blick zu riskieren.

Shell-Weisheit des Tages
Organisiere Dein Gehirn

Wenn wir ein Programm wie Microsoft Word benutzen, ist die Art und Weise wie es zu benutzen ist vorgegeben. Hier tippen wir den Text. Markiere Teile davon, klicke auf die Knöpfe und formatiere ihn. Selbst wenn wir tief in Office einsteigen, Makros schreiben, Shortcuts (um)definieren, unseren Workflow halb automatisieren, wird die grundlegende Benutzung dieselbe bleiben.

In der Shell ist das anders.

Nehmen wir das Matrjoschka-Puppen-Problem: Jeder Desktopmanager hat heutzutage mehrere Arbeitsflächen. Die meisten Terminal-Emulatoren haben Tabs. Dann kommt ein tmux rein. Dann hat vim – Editor meines Vertrauens – wiederum Support für gesplittete Fenster, Buffer und Tabs. Wenn jetzt ein tmux über ssh auf einem anderen System mitmischt, wird die Entscheidung wie man von einem Kontext in den nächsten wechselt nicht mehr aus dem Muskelgedächtnis erfolgen.

Jetzt müssen wir unser eigenes Ordnungssystem schaffen und Ordnungssysteme helfen nur, wenn man sie anwendet. Es ist oft egal auf welcher Ebene man seine Kontexte trennt, solange man es nach einem logischen System tut. Mein Slack und meine Videokonferenzen laufen immer auf Desktop 3. Das erste Fenster in meiner tmux-Session (immer im Vollbildmodus auf Desktop 1) ist meinen Notizen vorbehalten, das zweite meinem aktuellen Softwareprojekt. Je mehr ich mich daran halte, desto besser funktionieren meine Hotkeys.

Viele der Shell-Weisheiten wiederholen ein wiederkehrendes Thema: Lerne Dich selber kennen. Sei ehrlich zu Dir selbst. Lass Deinen Computer Deine Schwächen ausbalancieren und Deine Stärken multiplizieren. Genauso wie Conway’s Law besagt, dass Software immer die Kommunikationsstruktur im Unternehmen widerspiegelt, ist unsere eigene Software dann gut, wenn wir ein bißchen in unserem eigenen Kopf aufräumen. Es gibt einen Haufen guter Mindfulness-Kurse; ich kann beispielsweise den kostenlosen Onlinekurs Palouse Mindfulness sehr empfehlen.

Avatar von Eric

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert


Für das Handling unseres Newsletters nutzen wir den Dienst HubSpot. Mehr Informationen, insbesondere auch zu Deinem Widerrufsrecht, kannst Du jederzeit unserer Datenschutzerklärung entnehmen.