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

FeatureScreentmuxZellij
LeercurveGemiddeldHoogLaag
ConfiguratieMinimaalUitgebreidGoed
Standaard UXSlechtSlechtGoed
Plugin ondersteuningGeenExcellentGroeiend
BeschikbaarheidOveralMeeste plaatsenInstallatie nodig
Sessie persistentieJaJa (plugins)Ja
ScriptingBasisExcellentGoed
PerformanceLichtGemiddeldGemiddeld
OntwikkelingMinimaalActiefActief

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.