devAlice
← Mac

Mac-Terminal — iTerm2 vs. WezTerm vs. Ghostty + zsh + Starship

Drei Optionen zum Ersetzen des Standard-Terminal.app, plus der schnellste Weg zu einem stabilen zsh + Starship-Setup.

macOS' eingebautes Terminal.app funktioniert, fällt aber bei geteilten Fenstern, Suche, Rendering und Konfigurierbarkeit hinter den Alternativen zurück. Dieser Leitfaden vergleicht iTerm2 · WezTerm · Ghostty und zeigt den schnellsten Weg zu einer stabilen Umgebung (WezTerm + zsh + Starship + vier Module).

Ich glaube, was die Terminal-Wahl so dauerhaft ist, ist dass man täglich Dutzende Male damit interagiert — weil kleine Reibungen wie langsames Rendering oder fehlende Split-Pane-Navigation über Monate enorm aufaddieren, statt bedeutungslos zu bleiben. Anfangs war ich mit Terminal.app zufrieden; heute ist WezTerm mein Standard, da die Lua-Konfiguration bedeutet, dass meine gesamte Terminal-Einrichtung als Code in dotfiles lebt.

TL;DR

OptionStärkenSchwächenAm besten für
WezTerm (empfohlen)Lua-Konfig / GPU-Beschleunigung / plattformübergreifendLua-LernkurveSolo-Entwickler, die Konfigs als Code mögen
iTerm2Ausgereifteste / starke Suche/Splits/SessionsGUI-Einstellungs-LabyrinthPriorisiert Funktionsreichtum
GhosttySchnell / einfach / 1.0 stabilNeuer, einige Funktionen fehlenMinimalisten / Neuestes-zuerst

1. Optionen im Vergleich

iTerm2

Das älteste macOS-exklusive Terminal. Splits (⌘D), Sofort-Replay, Suche, Trigger (Textübereinstimmungs-Aktionen), automatische Session-Wiederherstellung — umfangreicher Funktionsumfang.

WezTerm

In Rust geschrieben, in Lua konfiguriert, GPU-beschleunigt, plattformübergreifend (Mac/Linux/Win). Tastenbelegung, Themes, Multiplexing — alles in einer Lua-Datei, vollständig reproduzierbar.

Ghostty

1.0 stabil seit 2024. Schnell, GPU-beschleunigt, minimale Konfig. Weniger Funktionen als iTerm2/WezTerm, aber genug für den täglichen Gebrauch.

Empfehlung: WezTerm

Für „Konfiguration als Code verwalten und auf einem neuen Gerät in einem Schritt wiederherstellen" ist WezTerm die klare Wahl. Es integriert sich natürlich mit der dotfiles-Verwaltung. Dieser Leitfaden basiert auf WezTerm.

2. WezTerm installieren

brew install --cask wezterm

Erster Start → Standard-Shell ist zsh (macOS-Standard). Wenn der Bildschirm korrekt rendert, ist alles in Ordnung.

3. WezTerm-Konfig — ~/.config/wezterm/wezterm.lua

mkdir -p ~/.config/wezterm && nvim ~/.config/wezterm/wezterm.lua:

local wezterm = require 'wezterm'
local config = wezterm.config_builder()
 
-- Schriften
config.font = wezterm.font_with_fallback({
  'JetBrainsMono Nerd Font',
  'Hiragino Sans',  -- Koreanisch / Japanisch Fallback
})
config.font_size = 13.0
 
-- Farbschema
config.color_scheme = 'Catppuccin Mocha'  -- oder 'Tokyo Night', 'Dracula'
 
-- Fenster
config.window_decorations = 'RESIZE'  -- Titelleiste ausblenden, skalierbar behalten
config.window_padding = { left = 8, right = 8, top = 8, bottom = 8 }
config.window_background_opacity = 0.95
config.macos_window_background_blur = 20
 
-- Tabs
config.use_fancy_tab_bar = false
config.tab_bar_at_bottom = true
config.hide_tab_bar_if_only_one_tab = true
 
-- Shell
config.default_prog = { '/opt/homebrew/bin/zsh', '-l' }  -- brew zsh (neuer als macOS-Standard)
 
-- Tastenbelegung
config.keys = {
  -- Splits
  { key = 'd', mods = 'CMD', action = wezterm.action.SplitHorizontal { domain = 'CurrentPaneDomain' } },
  { key = 'D', mods = 'CMD|SHIFT', action = wezterm.action.SplitVertical { domain = 'CurrentPaneDomain' } },
  -- Pane-Navigation
  { key = 'LeftArrow', mods = 'CMD|OPT', action = wezterm.action.ActivatePaneDirection 'Left' },
  { key = 'RightArrow', mods = 'CMD|OPT', action = wezterm.action.ActivatePaneDirection 'Right' },
  { key = 'UpArrow', mods = 'CMD|OPT', action = wezterm.action.ActivatePaneDirection 'Up' },
  { key = 'DownArrow', mods = 'CMD|OPT', action = wezterm.action.ActivatePaneDirection 'Down' },
  -- Pane schließen
  { key = 'w', mods = 'CMD', action = wezterm.action.CloseCurrentPane { confirm = true } },
}
 
return config

WezTerm lädt beim Speichern automatisch neu. ⌘D ausprobieren, um zu bestätigen, dass Splits funktionieren.

4. zsh upgraden

macOS wird mit einer älteren zsh-Version ausgeliefert. Homebrew stellt eine neuere bereit:

brew install zsh
which -a zsh
# /opt/homebrew/bin/zsh
# /bin/zsh
 
# Standard-Shell ändern
sudo sh -c "echo /opt/homebrew/bin/zsh >> /etc/shells"
chsh -s /opt/homebrew/bin/zsh

Neues Terminal → echo $ZSH_VERSION → 5.9+ bestätigt.

5. Starship-Prompt

Leichter und schneller als Oh My Zsh. Einzelne Rust-Binärdatei:

brew install starship

An ~/.zshrc anhängen:

eval "$(starship init zsh)"

~/.config/starship.toml:

# Schnelle Standard-Aktivierung
add_newline = true
format = """
$directory\
$git_branch\
$git_status\
$nodejs\
$python\
$rust\
$cmd_duration\
$line_break\
$character"""
 
[directory]
truncation_length = 3
truncate_to_repo = true
 
[git_status]
disabled = false
ahead = "↑${count} "
behind = "↓${count} "
 
[cmd_duration]
min_time = 2000  # nur bei Befehlen anzeigen, die unter 2 Sekunden dauern
 
[character]
success_symbol = "[➜](bold green)"
error_symbol = "[➜](bold red)"

Mit . ~/.zshrc neu laden oder ein neues Terminal-Fenster öffnen.

6. Vier zsh-Module

6.1 zsh-autosuggestions

Verlaufsbasierter grauer Vorschlag:

brew install zsh-autosuggestions

~/.zshrc:

source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh

Mit akzeptieren.

6.2 zsh-syntax-highlighting

Befehle einfärben (ungültig = rot):

brew install zsh-syntax-highlighting
source /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

⚠️ Syntax-Highlighting in .zshrc als letztes einbinden für korrektes Verhalten.

6.3 fzf — Fuzzy-Finder

brew install fzf
$(brew --prefix)/opt/fzf/install
# Alle Prompts mit ja beantworten

In einem neuen Terminal:

  • Ctrl+R — Verlaufssuche
  • Ctrl+T — Dateisuche
  • Alt+C — Verzeichniswechsel

6.4 zoxide — intelligenteres cd

brew install zoxide

~/.zshrc:

eval "$(zoxide init zsh)"
z proj        # zu einem häufig besuchten Projektpfad springen
zi            # interaktive Auswahl

7. Vollständiges .zshrc-Beispiel

# Verlauf
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt SHARE_HISTORY HIST_IGNORE_DUPS HIST_IGNORE_SPACE
 
# Vervollständigung
autoload -Uz compinit && compinit
 
# Brew
eval "$(/opt/homebrew/bin/brew shellenv)"
 
# Module
source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh
eval "$(zoxide init zsh)"
 
# Aliase
alias ll='ls -lah'
alias gs='git status -sb'
alias gd='git diff'
alias ..='cd ..'
 
# Tools
eval "$(starship init zsh)"
 
# (Muss als letztes kommen)
source /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

8. iTerm2 Schnell-Setup (Alternative)

Wenn du iTerm2 gegenüber WezTerm bevorzugst:

brew install --cask iterm2
  • Einstellungen → Profile → Standard → Text → Schrift = JetBrainsMono Nerd Font 13pt
  • Fenster → Transparenz 5%, Weichzeichner ein
  • Tasten → Hotkey-Fenster — globale Tastenkombination wie ⌥ Space für schwebend binden

iTerm2s Killer-Feature ist das Hotkey-Fenster — ein schwebendes Terminal, das von überall per Tastenkürzel aufrufbar ist. WezTerm kann ähnlich konfiguriert werden, iTerm2 liefert es aber sofort aus der Box.

Verifizierung

  1. Neues Terminal → Starship-Prompt erscheint (mit farbigem cwd / Git-Branch)
  2. Ctrl+R → fzf interaktive Verlaufssuche
  3. ls → zsh-syntax-highlighting färbt den Befehl ein
  4. Teil eines vorherigen Befehls eingeben → grauer Auto-Vorschlag → drücken
  5. z proj → zu einem zuvor besuchten Projektordner springen
  6. WezTerm ⌘D → geteilten Bereich → ⌘⌥← zum Navigieren

Problembehandlung

Syntax-Highlighting zeigt keine Farbe

  • Nicht als letztes in .zshrc eingebunden (muss nach allen anderen Modulen stehen)
  • WezTerm-Farbschema hat weniger als 256 Farben — unwahrscheinlich, aber Catppuccin / Tokyo Night bevorzugen

Verstümmelte Glyphen in Starship

Nerd Font fehlt. WezTerms Schrift-Konfiguration prüfen und die Schrift tatsächlich installieren (brew install --cask font-jetbrains-mono-nerd-font).

z tut nichts

  • zoxide init fehlt in .zshrc, oder .zshrc nicht neu geladen
  • Datenbank ist am Anfang leer — ein paar cds machen, um sie zu trainieren

WezTerm öffnet standardmäßig $HOME

In der Konfig setzen: config.default_cwd = wezterm.home_dir .. '/work', oder cd in deinen Ordner aliasieren.

chsh hat die Shell nicht geändert

  • Die neue Shell wurde nicht zu /etc/shells hinzugefügt → chsh schlägt fehl
  • Ausloggen / wieder einloggen, oder neu starten

Referenzen

Changelog

  • 2026-05-12: Erster Entwurf. Drei Terminals verglichen + WezTerm + zsh + Starship + vier Module + fünf Problembehandlungsfälle.