zsh anpassen — starship-Prompt, Verlauf, Aliase, Plugins
Das macOS-Standard-zsh in 30 Minuten zu einer produktiven Shell machen. starship + Verlaufssuche + autosuggestions + Syntax-Highlighting.
macOS liefert seit Catalina zsh als Standard-Shell aus, doch die Out-of-the-Box-Konfiguration lässt viel Potenzial ungenutzt. Das vollständige Oh My Zsh zu installieren fügt Gewicht hinzu und verlangsamt den Shellstart. Dieser Leitfaden passt nur das an, was wirklich gebraucht wird — starship-Prompt, Verlaufssuche, autosuggestions, Syntax-Highlighting, fzf und fünf nützliche Aliase.
Ich glaube, was eine gute Shell-Konfiguration ausmacht, ist nicht die Anzahl der installierten Plugins, sondern die Startzeit und die tägliche Reibung — weil eine Shell, die 500 ms zum Starten braucht, jedes Mal unbewusst stört, statt unsichtbar zu bleiben. Früher hatte ich Oh My Zsh mit Dutzenden Plugins; heute ist starship mit drei gezielten Plugins mein Standard, da ich die Startzeit von ~800 ms auf ~80 ms reduziert habe.
Die Zielgruppe sind Leute, die die Mac-Ersteinrichtung abgeschlossen haben und zsh polieren möchten — einschließlich der Synchronisierung von .zshrc auf andere Geräte über dotfiles.
TL;DR
- starship — schneller, ansprechender Prompt (leichter als Oh My Zsh)
- zsh-autosuggestions — graue verlaufsbasierte Vorschläge (fish-Stil)
- zsh-syntax-highlighting — Befehle beim Tippen einfärben
- fzf Shell-Integration — moderner
Ctrl+RVerlaufssuche .zshrcüber dotfiles in chezmoi committen, damit andere Geräte es aufgreifen
Voraussetzungen
- macOS 14+ + Homebrew (Mac-Ersteinrichtung)
- Ein Nerd-Font-fähiges Terminal — Terminal.app, WezTerm/iTerm2
1. Warum das Standard-zsh nicht reicht
- Keine Git-Info im Prompt — Branch / geänderter Zustand unsichtbar
- Schwache Verlaufssuche —
Ctrl+Rexistiert, aber kein Fuzzy - Begrenzte Autovervollständigung — Tab funktioniert, aber keine fish-ähnlichen grauen Vorschläge
- Kein Syntax-Highlighting — Tippfehler zeigen sich erst nach dem Absenden
Das zu beheben zahlt sich täglich aus.
2. starship-Prompt (5 Min.)
starship.rs — ein schneller, plattformübergreifender Prompt, in Rust geschrieben. Leichter als Oh My Zshs Powerlevel10k, der Start-Overhead ist nahezu null.
2.1 Installieren
brew install starshipAm Ende von .zshrc:
eval "$(starship init zsh)"Neues Terminal öffnen — sofort angewendet.
2.2 Nerd Font (für Icons)
Um starships Git-Branch- und Sprachsymbole zu sehen, brauchst du eine Nerd Font.
brew install --cask font-jetbrains-mono-nerd-fontDie Schrift deines Terminals auf JetBrainsMono Nerd Font ändern. (Siehe den WezTerm-Leitfaden.)
2.3 Anpassungen (optional)
~/.config/starship.toml:
# Zweizeiliger Prompt — Info oben, Eingabe unten
add_newline = true
format = """
$directory$git_branch$git_status$nodejs$python$rust$line_break$character"""
[character]
success_symbol = "[➜](bold green)"
error_symbol = "[✗](bold red)"
[directory]
truncation_length = 3
truncate_to_repo = true
[git_branch]
symbol = " "
style = "bold purple"
[git_status]
conflicted = "⚠️ "
ahead = "⇡${count} "
behind = "⇣${count} "
staged = "[+${count}](green) "
modified = "[!${count}](yellow) "
untracked = "[?${count}](red) "Die Standardwerte sind ausgezeichnet — zunächst ohne
starship.tomlstarten und nur das anpassen, was stört.
3. Verlauf — schlechte Standardwerte korrigieren
Zu .zshrc hinzufügen:
# Verlaufsgrößen
HISTSIZE=50000 # Zeilen im Speicher
SAVEHIST=100000 # Zeilen in der Datei gespeichert
HISTFILE="$HOME/.zsh_history"
# Deduplizieren + sofortiges Speichern
setopt HIST_IGNORE_ALL_DUPS # Duplikate verwerfen
setopt HIST_REDUCE_BLANKS # Nur-Leerzeichen-Diffs zusammenführen
setopt HIST_VERIFY # `!42`-artige Erweiterungen nicht auto-ausführen
setopt SHARE_HISTORY # Alle zsh-Instanzen teilen Verlauf
setopt INC_APPEND_HISTORY # Sofort an Verlaufsdatei anhängen
setopt EXTENDED_HISTORY # Zeitstempel + Dauer
# Hoch/Runter — Präfix-Übereinstimmungssuche
autoload -U up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search # Hoch
bindkey "^[[B" down-line-or-beginning-search # RunterEffekt: git c eingeben und ↑ drücken — es werden nur vergangene Befehle durchlaufen, die mit git c beginnen.
4. zsh-autosuggestions (3 Min.)
Fish-ähnliche graue Vorschläge für den nächsten Befehl. Tab oder → zum Akzeptieren.
brew install zsh-autosuggestionsAm Ende von .zshrc:
source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh
# Grauer Ton (Standard ist zu dunkel)
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=#5f5f5f'
# Vorschläge bei sehr langen Befehlen überspringen (Performance)
ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=80Neues Terminal öffnen → Befehl tippen → grauer Vorschlag erscheint = OK.
5. zsh-syntax-highlighting (2 Min.)
Befehle beim Tippen einfärben — gültig grün, ungültig rot, Optionen gelb usw.
brew install zsh-syntax-highlightingAm Ende von .zshrc — muss nach zsh-autosuggestions kommen:
source $(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zshReihenfolge wichtig:
- autosuggestions
- syntax-highlighting (muss zuletzt stehen)
In umgekehrter Reihenfolge brechen beide gelegentlich.
6. fzf — moderner Ctrl+R Verlaufssuche
Das Standard-Ctrl+R geht Zeile für Zeile zurück. fzf gibt dir Fuzzy-Suche + Vorschau.
brew install fzf
$(brew --prefix)/opt/fzf/install --allDas Installationsskript fügt dies zu .zshrc hinzu:
[ -f ~/.fzf.zsh ] && source ~/.fzf.zshCtrl + R— Fuzzy-VerlaufssucheCtrl + T— Fuzzy-Datei im aktuellen Verzeichnis auswählen (z. B.vim <Ctrl+T>)Alt + C— Fuzzycd
Mehr: Mac-Ersteinrichtung §3.2.
7. Fünf nützliche Aliase
.zshrc oder eine separate ~/.zsh_aliases (empfohlen):
# git
alias g='git'
alias gs='git status -s'
alias gd='git diff'
alias gco='git checkout'
alias gp='git push'
alias gl='git log --oneline --graph --decorate -20'
# Dateisystem (eza — modernes ls)
alias ls='eza --git --group-directories-first'
alias ll='eza -l --git --group-directories-first --icons'
alias la='eza -la --git --group-directories-first --icons'
alias tree='eza --tree --level=3'
# Verzeichnisnavigation
alias ..='cd ..'
alias ...='cd ../..'
# Neu laden
alias zrl='source ~/.zshrc'
# Editor (VS Code oder Cursor)
alias c='code .'Einbuchstabige Aliase bergen Kollisionsgefahr.
g(git) undc(code) sind unbedenklich, solange die Absicht klar ist.
8. Verzeichnisspringen — zoxide
Statt cd /Users/me/projects/myapp einfach z myapp tippen und in einem Schritt dorthin springen. zoxide lernt dabei häufig besuchte Verzeichnisse.
brew install zoxide.zshrc:
eval "$(zoxide init zsh --cmd cd)" # cd selbst durch zoxide ersetzencd wie gewohnt verwenden; zoxide lernt. Dann springt cd myapp über Teilnamen.
9. Vollständiges .zshrc-Beispiel
Eine vollständige Referenz, die das Obige kombiniert:
# ~/.zshrc
# ─────────────────────────────────────────────
# PATH
# ─────────────────────────────────────────────
export PATH="$HOME/.local/bin:$PATH"
# ─────────────────────────────────────────────
# Verlauf
# ─────────────────────────────────────────────
HISTSIZE=50000
SAVEHIST=100000
HISTFILE="$HOME/.zsh_history"
setopt HIST_IGNORE_ALL_DUPS HIST_REDUCE_BLANKS HIST_VERIFY
setopt SHARE_HISTORY INC_APPEND_HISTORY EXTENDED_HISTORY
# Hoch/Runter — Präfix-Suche
autoload -U up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
bindkey "^[[A" up-line-or-beginning-search
bindkey "^[[B" down-line-or-beginning-search
# ─────────────────────────────────────────────
# Aliase
# ─────────────────────────────────────────────
alias g='git'
alias gs='git status -s'
alias gd='git diff'
alias gp='git push'
alias gl='git log --oneline --graph --decorate -20'
alias ls='eza --git --group-directories-first'
alias ll='eza -l --git --group-directories-first --icons'
alias la='eza -la --git --group-directories-first --icons'
alias ..='cd ..'
alias ...='cd ../..'
alias zrl='source ~/.zshrc'
alias c='code .'
# ─────────────────────────────────────────────
# Plugins (Reihenfolge wichtig)
# ─────────────────────────────────────────────
source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=#5f5f5f'
ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=80
source $(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
# ─────────────────────────────────────────────
# Tools
# ─────────────────────────────────────────────
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
eval "$(mise activate zsh)" # Sprach-Versionsmanager — /mac/dev-toolchain
eval "$(zoxide init zsh --cmd cd)"
# ─────────────────────────────────────────────
# Prompt
# ─────────────────────────────────────────────
eval "$(starship init zsh)"10. Verifizieren
# In einem neuen Terminal
type starship # /opt/homebrew/bin/starship
ZSH_AUTOSUGGEST_USE_ASYNC=true # autosuggest aktiv
echo $HISTSIZE # 50000
# starship-Prompt
cd ~/work/myrepo # Prompt zeigt Git-Branch + Sprachsymbole
# Vorschläge
git c # grauer Vorschlag — Tab zum Akzeptieren
# fzf
history | head # 'git c' tippen dann Ctrl+R — Fuzzy-Suche11. Problembehandlung
Prompt voll mit kaputten Glyphen (▢▢)
Nerd Font fehlt. font-jetbrains-mono-nerd-font über brew installieren und die Terminal-Schrift ändern.
command not found: starship
which starshipgibt nichts zurück → ist das brew-Präfix im PATH?- Apple Silicon:
eval "$(/opt/homebrew/bin/brew shellenv)"sollte in.zprofilesein
Langsamer Start eines neuen Terminals (1 s+)
- Schwere Befehle (
nvm) in.zshrclazy-loaden (verzögert initialisieren) - Mit
zprofprofilieren:zmodload zsh/zprofam Anfang hinzufügen,zprof | head -20am Ende
autosuggestions zeigen sich nicht
- Reihenfolge in
.zshrc: syntax-highlighting nach autosuggestions ZSH_AUTOSUGGEST_HIGHLIGHT_STYLEist möglicherweise zu nah am Hintergrundunset ZSH_AUTOSUGGEST_HIGHLIGHT_STYLEausprobieren, um den Standard zu verwenden
syntax-highlighting flackert direkt nach dem Tippen
- „Render fast" in WezTerm/iTerm2 deaktivieren
- Oder
ZSH_HIGHLIGHT_MAXLENGTH=300setzen, um Highlighting bei sehr langen Zeilen abzuschalten
zsh: no matches found: *.txt
zshs Globbing ist standardmäßig streng. Entweder setopt NULL_GLOB in .zshrc, oder escapen: \*.txt.
12. Nächste Schritte
- Mac-Ersteinrichtung — /mac/initial-setup
- Terminal — WezTerm / iTerm2 — /mac/terminal
- dotfiles mit chezmoi — /mac/dotfiles —
.zshrcauf Geräten synchronisieren - Sprach-Toolchain (mise) — /mac/dev-toolchain
Referenzen
Changelog
- 2026-05-16: Erster Entwurf. starship + Verlauf + autosuggestions + syntax-highlighting + fzf + Aliase + zoxide + vollständiges .zshrc-Beispiel + sechs Problembehandlungsfälle.