Je SSH’t naar een server. Je start een langdraaiend proces. Je verbinding valt weg. Proces sterft.
Terminal multiplexers lossen dit op. Ze houden sessies in leven, splitsen je scherm in panes, en laten je aan meerdere dingen werken zonder twaalf terminal vensters te openen.
Ik heb alle drie de grote opties gebruikt. Dit is wat ik leerde.
Wat Is een Terminal Multiplexer?
Een terminal multiplexer draait tussen je shell en terminal emulator. Het:
- Persisteert sessies: Detach, later opnieuw verbinden, alles draait nog
- Splitst schermen: Meerdere panes in één venster
- Beheert windows: Schakel tussen workspaces
- Werkt remote: Zelfde interface of je nu lokaal bent of SSH’d
flowchart LR
Term["Terminal Emulator"] --> Mux["Multiplexer"]
Mux --> Shell1["Shell 1"]
Mux --> Shell2["Shell 2"]
Mux --> Shell3["Shell 3"]
GNU Screen: Het Origineel
Screen bestaat sinds 1987. Het staat overal geïnstalleerd, het werkt, het is lelijk.
Basis Gebruik
# Start nieuwe sessie
screen
# Start benoemde sessie
screen -S development
# Detach (vanuit screen)
Ctrl-a d
# Lijst sessies
screen -ls
# Reattach
screen -r development
# Split horizontaal
Ctrl-a S
# Split verticaal
Ctrl-a |
# Schakel tussen regions
Ctrl-a Tab
# Maak nieuw window
Ctrl-a c
# Schakel windows
Ctrl-a n # volgende
Ctrl-a p # vorige
Ctrl-a 0 # window 0
Sterke Punten
- Alomtegenwoordig: Geïnstalleerd op bijna elk Unix systeem
- Stabiel: Weinig veranderd omdat het niet hoeft
- Simpel: Doet wat het zegt, niets meer
Zwakke Punten
- Gedateerde interface: Geen visuele feedback, cryptische keybindings
- Beperkte splits: Splits zijn regions, geen echte panes
- Geen scrollback in splits: Irritant bij debuggen
Wanneer Screen Gebruiken
- Server zonder iets anders geïnstalleerd
- Snelle attach/detach voor lange processen
- Systemen waar je geen software kunt installeren
tmux: De Standaard
tmux verving Screen voor de meeste gebruikers. Meer features, betere interface, actieve ontwikkeling.
Basis Gebruik
# Start nieuwe sessie
tmux
# Start benoemde sessie
tmux new -s development
# Detach
Ctrl-b d
# Lijst sessies
tmux ls
# Attach
tmux attach -t development
# Split horizontaal
Ctrl-b "
# Split verticaal
Ctrl-b %
# Navigeer panes
Ctrl-b Pijltjestoetsen
# Resize panes
Ctrl-b Ctrl-Pijltjestoetsen
# Maak window
Ctrl-b c
# Schakel windows
Ctrl-b n # volgende
Ctrl-b p # vorige
Ctrl-b 0 # window 0
# Kill pane
Ctrl-b x
Configuratie
tmux schittert met configuratie. Hier een praktische ~/.tmux.conf:
# Betere prefix
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# Start windows en panes bij 1, niet 0
set -g base-index 1
setw -g pane-base-index 1
# Hernummer windows wanneer er een sluit
set -g renumber-windows on
# Makkelijke splits (intuïtiever)
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
# Vim-stijl pane navigatie
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Resize panes met vim toetsen
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
# Muis ondersteuning (optioneel, sommigen verkiezen keyboard-only)
set -g mouse on
# Verhoog scrollback
set -g history-limit 50000
# Wacht niet op escape sequences
set -sg escape-time 0
# Status bar
set -g status-style 'bg=#333333 fg=#ffffff'
set -g status-left '#[fg=#00ff00][#S] '
set -g status-right '%H:%M %d-%b'
# Herlaad config
bind r source-file ~/.tmux.conf \; display "Config herladen"
Plugin Manager (TPM)
Installeer TPM voor plugins:
# Installeer TPM
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
# In .tmux.conf
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect' # Sla sessies op/herstel
set -g @plugin 'tmux-plugins/tmux-continuum' # Auto-save sessies
# Initialiseer TPM (onderaan .tmux.conf)
run '~/.tmux/plugins/tpm/tpm'
Druk prefix + I om plugins te installeren.
Sessiebeheer
Sla sessies op en herstel ze:
# Met tmux-resurrect plugin
prefix + Ctrl-s # Opslaan
prefix + Ctrl-r # Herstellen
# Handmatige sessie scripts
# ~/.tmux/dev-session.sh
tmux new-session -d -s dev -n editor
tmux send-keys -t dev:editor 'nvim' C-m
tmux new-window -t dev -n server
tmux send-keys -t dev:server 'npm run dev' C-m
tmux new-window -t dev -n git
tmux attach -t dev
Sterke Punten
- Zeer configureerbaar: Alles is aanpasbaar
- Plugin ecosysteem: Uitbreidingen voor alles
- Scriptbaar: Automatiseer sessie creatie
- Actieve ontwikkeling: Regelmatige updates, nieuwe features
Zwakke Punten
- Leercurve: Standaard bindings zijn onhandig
- Vereist configuratie: Niet geweldig out of the box
- Resource gebruik: Zwaarder dan Screen
Zellij: De Moderne Optie
Zellij is de nieuwste optie. Geschreven in Rust, ontworpen voor bruikbaarheid.
Basis Gebruik
# Start nieuwe sessie
zellij
# Start benoemde sessie
zellij -s development
# Attach naar sessie
zellij attach development
# Lijst sessies
zellij list-sessions
Het belangrijkste verschil: Zellij toont je de keybindings. Geen memoriseren nodig.
Standaard Keybindings
Zellij gebruikt een modaal systeem:
Ctrl-p → Pane mode
n: nieuwe pane
d: sluit pane
h/j/k/l: navigeer
Ctrl-t → Tab mode
n: nieuwe tab
x: sluit tab
h/l: navigeer
r: hernoem
Ctrl-n → Resize mode
h/j/k/l: resize
Ctrl-s → Scroll mode
j/k: scroll
d/u: pagina omlaag/omhoog
Ctrl-o → Session mode
d: detach
w: sessie manager
Ctrl-q → Quit
De status bar toont beschikbare acties. Enorm voor ontdekbaarheid.
Configuratie
~/.config/zellij/config.kdl:
// Thema
theme "catppuccin-mocha"
// Standaard layout
default_layout "compact"
// Keybindings
keybinds {
normal {
// Vim-achtige pane navigatie
bind "Alt h" { MoveFocus "Left"; }
bind "Alt j" { MoveFocus "Down"; }
bind "Alt k" { MoveFocus "Up"; }
bind "Alt l" { MoveFocus "Right"; }
}
}
// Opties
pane_frames false // Geen borders tussen panes
simplified_ui true // Schonere status bar
default_shell "zsh"
scrollback_editor "/usr/bin/nvim"
Layouts
Definieer herbruikbare layouts in ~/.config/zellij/layouts/:
// dev.kdl
layout {
pane split_direction="vertical" {
pane {
command "nvim"
}
pane split_direction="horizontal" {
pane {
command "lazygit"
}
pane
}
}
}
Start met layout:
zellij --layout dev
Plugins
Zellij ondersteunt WebAssembly plugins:
// In config.kdl
plugins {
tab-bar { path "tab-bar"; }
status-bar { path "status-bar"; }
strider { path "strider"; } // Bestandsbrowser
compact-bar { path "compact-bar"; }
}
Sterke Punten
- Ontdekbaar: Keybindings getoond in UI
- Modern: Goede defaults, verstandig ontwerp
- Layouts: Definieer en hergebruik workspace layouts
- Floating panes: Overlay panes voor snelle taken
Zwakke Punten
- Nieuwer: Minder ecosysteem, minder plugins
- Niet overal: Moet je installeren
- Ander paradigma: Bestaand spiergeheugen draagt niet over
Vergelijking
| Feature | Screen | tmux | Zellij |
|---|---|---|---|
| Leercurve | Gemiddeld | Hoog | Laag |
| Configuratie | Minimaal | Uitgebreid | Goed |
| Standaard UX | Slecht | Slecht | Goed |
| Plugin ondersteuning | Geen | Excellent | Groeiend |
| Beschikbaarheid | Overal | Meeste plaatsen | Installatie nodig |
| Sessie persistentie | Ja | Ja (plugins) | Ja |
| Scripting | Basis | Excellent | Goed |
| Performance | Licht | Gemiddeld | Gemiddeld |
| Ontwikkeling | Minimaal | Actief | Actief |
Mijn Workflow
Ik gebruik dagelijks tmux. Hier is mijn setup:
Config Filosofie
# Minimaal, keyboard-first
# Ctrl-a als prefix (makkelijker dan Ctrl-b)
# Vim-stijl navigatie
# Geen muis (houdt handen op toetsenbord)
# Minimale status bar
Sessie Structuur
Development sessie:
├── Window 1: editor (nvim)
├── Window 2: terminal (algemene commando's)
├── Window 3: git (lazygit)
└── Window 4: servers (split panes voor logs)
Homelab sessie:
├── Window 1: k9s (Kubernetes)
├── Window 2: monitoring (Prometheus/Grafana toegang)
└── Window 3: logs (Loki queries)
Startup Script
#!/bin/bash
# ~/.local/bin/dev
SESSION="dev"
# Check of sessie bestaat
tmux has-session -t $SESSION 2>/dev/null
if [ $? != 0 ]; then
# Maak sessie
tmux new-session -d -s $SESSION -n editor
tmux send-keys -t $SESSION:editor 'nvim' C-m
tmux new-window -t $SESSION -n term
tmux new-window -t $SESSION -n git
tmux send-keys -t $SESSION:git 'lazygit' C-m
tmux new-window -t $SESSION -n servers
tmux split-window -h -t $SESSION:servers
fi
# Attach
tmux attach -t $SESSION
Waarom tmux Boven Zellij?
Voor mij:
- Spiergeheugen (jaren tmux)
- Plugin ecosysteem (resurrect, continuum)
- Scriptbaarheid (complexe sessie automatisering)
- Beschikbaar op al mijn servers
Als ik vandaag opnieuw zou beginnen, zou ik misschien Zellij kiezen. De ontdekbaarheid is oprecht beter.
Aanbevelingen
Kies Screen als:
- Je werkt op servers die je niet beheert
- Je iets nodig hebt dat zeker geïnstalleerd is
- Simpele attach/detach voor lange processen
Kies tmux als:
- Je maximale customization wilt
- Je plugin ondersteuning nodig hebt
- Je tijd investeert in configuratie
- Je op veel machines werkt
Kies Zellij als:
- Je nieuw bent met multiplexers
- Je direct goede UX wilt
- Je moderne tooling verkiest
- Je ontdekbaarheid waardeert
Aan de Slag
Week 1: Leer de Basis
Kies er één. Leer deze operaties:
- Maak/attach/detach sessie
- Split panes
- Navigeer tussen panes
- Maak windows
- Navigeer tussen windows
Week 2: Configureer
Maak het van jou:
- Verander prefix toets (tmux/Screen)
- Stel comfortabele keybindings in
- Configureer status bar
- Stel scrollback grootte in
Week 3: Integreer
Bouw in je workflow:
- Maak sessie scripts
- Stel sessie persistentie in
- Integreer met editor/shell
Waarom Dit Ertoe Doet
Terminal multiplexers zijn niet alleen voor processen in leven houden. Ze veranderen hoe je werkt:
- Context behoud: Elk project krijgt een sessie
- Ruimtelijk geheugen: Windows en panes worden plekken
- Flow state: Alles op één plek, geen window wisselen
Gecombineerd met een goede editor en shell heb je een complete development omgeving die identiek werkt op je laptop en elke server waar je naar SSH’t.
De terminal is low friction computing. Multiplexers maken het nog lager.
De beste tool is degene die verdwijnt. Een goede multiplexer wordt onzichtbaar — gewoon onderdeel van hoe je over werken denkt.
