17 Punkte von GN⁺ 2026-01-11 | 10 Kommentare | Auf WhatsApp teilen
  • Oh My Zsh (OMZ) wird weiterhin häufig empfohlen, verursacht aber unnötigen Skript-Overhead, der die Startzeit der Shell verlangsamt
  • OMZ ist in Shell-Skripten geschrieben, sodass beim Öffnen jedes neuen Terminal-Tabs alle Skripte erneut interpretiert werden müssen; selbst mit der Standardkonfiguration entsteht dabei eine Verzögerung von etwa 0,38 Sekunden
  • Mit einer einfachen minimalen Zsh-Konfiguration, dem Starship-Prompt und einer fzf-basierten Verlaufssuche lässt sich die Startzeit auf 0,07 Sekunden verkürzen
  • Starship erstellt den Prompt als einzelnes Binary und ersetzt damit die bisherigen git-, virtuelle-Umgebung- und sprachspezifischen Plugins von OMZ
  • Statt komplexer Plugins ist eine verschlankte Shell-Konfiguration, bei der nur die benötigten Funktionen direkt hinzugefügt werden, effizienter

Performance-Probleme von Oh My Zsh

  • Oh My Zsh (OMZ) ist weiterhin weit verbreitet, verlangsamt aber durch unnötigen Ballast (bloat) die Startgeschwindigkeit der Shell
    • OMZ besteht aus Shell-Skripten, die beim Öffnen jedes neuen Terminal-Tabs vollständig interpretiert werden müssen
    • In einer Konfiguration mit den Standard-Plugins git, zsh-autosuggestions und zsh-autocomplete ergab die Ausführung von /usr/bin/time -f "%e seconds" zsh -i -c exit 0,38 Sekunden
  • Wird ein neuer Tab in einem git-Repository geöffnet, entsteht subjektiv eine Verzögerung von etwa 1 Sekunde
  • OMZ prüft regelmäßig auf Updates, was mehrere zusätzliche Sekunden Verzögerung verursachen kann
  • Häufige Updates der Shell-Konfiguration sind unnötig; empfohlen wird eine einfache Konfiguration, in die nur die tatsächlich benötigten Funktionen direkt aufgenommen werden

Minimale Zsh-Konfiguration

  • Die vorgeschlagene minimale Zsh-Konfiguration sieht wie folgt aus
    export HISTSIZE=1000000000
    export SAVEHIST=$HISTSIZE
    setopt EXTENDED_HISTORY
    setopt autocd
    autoload -U compinit; compinit
    
    • HISTSIZE und SAVEHIST legen die Größe des Befehlsverlaufs fest
    • EXTENDED_HISTORY fügt dem Verlauf Zeitstempel hinzu
    • autocd erlaubt den Verzeichniswechsel ohne den Befehl cd
    • compinit initialisiert das Autovervollständigungssystem
    Anzeige
  • Schon diese Konfiguration bietet eine grundlegende Shell-Umgebung mit Vervollständigung

Anpassung des Prompts

  • Für den Prompt wird Starship verwendet
    • Starship ist ein schneller, minimalistischer Prompt in Form eines einzelnen Binarys
    • Es ersetzt die bisherigen Plugins und Themes von OMZ und zeigt git-, virtuelle-Umgebung- und sprachspezifische Statusinformationen an
  • Im Beispiel für die Starship-Konfiguration werden cloudbezogene Anzeigen wie AWS, GCP, Azure und NodeJS deaktiviert, um visuelles Rauschen zu reduzieren
  • In Python- und Rust-Projekten wird die jeweilige Sprache im Prompt hervorgehoben; außerdem wird die Laufzeit von Befehlen angezeigt
  • Aktivierung durch Hinzufügen dieser einen Zeile in .zshrc
    eval "$(starship init zsh)"
    

Verlaufssuche

  • Das häufig verwendete Plugin zsh-autosuggestions zeigt Vorschläge während der Eingabe an und kann dadurch ablenkend wirken
  • Stattdessen wird fzf an Ctrl+R gebunden, um den Verlauf per interaktiver Fuzzy-Suche zu durchsuchen
    source <(fzf --zsh)
    
    Anzeige

Ergebnis der Performance-Verbesserung

  • Nach Anwendung der obigen Konfiguration ergibt sich für die Shell-Startzeit
    ❯ /usr/bin/time -f "%e seconds" zsh -i -c exit
    0.07 seconds
    
  • Damit ist die Startgeschwindigkeit im Vergleich zu OMZ mehr als fünfmal höher

Zusätzliche Tipps

  • Vim-Nutzer können in Zsh den Vim-Modus aktivieren, um die Bearbeitung von Befehlen zu beschleunigen
    set -o vi
    bindkey -v '^?' backward-delete-char
    
    Anzeige
    • zle verwendet standardmäßig Emacs-Keybindings; mit dieser Einstellung wird die Eingabe im Vim-Stil unterstützt

Fazit und Einsatzszenarien

  • Nach dem Wechsel von OMZ erfolgte die Anpassung an den neuen Workflow innerhalb weniger Tage
  • Benötigte Plugins können direkt manuell geladen werden
  • Der Grund für das Öffnen vieler Tabs ist die gemeinsame Nutzung von tmux und einem terminalbasierten Editor (helix)
    • In tmux werden lazygit und der Dateimanager yazi als Pop-ups ausgeführt
    • Für Code-Ausführung und Testausgaben werden temporäre Splits verwendet, die jeweils als eigene Shell-Sitzung laufen

Zusammenfassung der Kommentare

  • Einige Nutzer behaupten, die Startzeit von OMZ liege mit 0,03 Sekunden bereits in einem ausreichend schnellen Bereich
  • Der Autor weist darauf hin, dass das Plugin zsh-autocomplete die Geschwindigkeit verringert
  • In Ergebnissen von zsh-bench wurde für OMZ eine Verzögerung bis zum ersten Prompt von 603 ms gemessen, für eine einfache Zsh-Konfiguration 103 ms
  • Starship ersetzt die promptbezogenen Funktionen von OMZ durch ein einzelnes Werkzeug
  • Andere Nutzer erwähnen Alternativen wie Zimfw, Atuin und selbst geschriebene bash-Prompts

10 Kommentare

 
zxcv123 2026-01-11

Typisch Entwickler: Wegen ein paar unnötigen Millisekunden machen sie gleich so ein Riesendrama, haha.

 
kayws426 2026-01-12

Entwickelt sich die Technik nicht gerade wegen dieser unnötigen paar ms weiter?

 
edunga1 2026-01-12

Ich habe mit omz angefangen und dachte, das wäre einfach eine Unannehmlichkeit, die man in Kauf nehmen muss seufz
In letzter Zeit habe ich die Plugins nach und nach entfernt und auch die Update-Richtlinie geändert ... wenn ich das sehe, denke ich mir, dass es auch ganz ohne geht.
Wenn ich mit tmuxinator die Konfiguration lade und dann die omz-Update-Abfrage y/n auftaucht, finde ich das eher nervig.

 
devfluotin 2026-01-12

Ich bin vor ein paar Monaten zu prezto gewechselt und dachte mir dabei schon, ob omz wirklich so langsam war.
Schon mit nur ein paar grundlegenden Plugins wird es deutlich langsamer...

 
wedding 2026-01-14

Ich bin auf starship umgestiegen.

 
t7vonn 2026-01-11

Wenn du das Terminal häufig verwendest, ist die zusätzliche Verzögerung durch omz ziemlich unangenehm.

 
GN⁺ 2026-01-11
Hacker-News-Kommentare
  • Ich habe genau einen Grund, oh-my-zsh zu verwenden
    Ich will auf einer neuen Maschine, einem Remote-Host oder in einem Container sofort eine direkt produktive Shell-Umgebung haben
    Statt Stunden damit zu verbringen, die Konfiguration selbst anzupassen, investiere ich diese Zeit lieber in wichtigere Dinge

    • Ich würde empfehlen, Starship auszuprobieren
      Das bietet weiterhin die Erfahrung „installieren und sofort nutzen“, aber ohne Prompt-Latenz von über 200 ms
      Die Installation geht mit einer einzigen curl-Zeile, und die Konfiguration ist ebenfalls einfach
      Ich denke, du wirst es nicht bereuen, es ausprobiert zu haben
    • Wenn es eine Maschine ist, auf der benutzerdefinierte Konfiguration erlaubt ist, halte ich es für besser, die eigenen dotfiles zu kopieren und zu verwenden
      Hat man die Konfigurationsdateien einmal erstellt und per git verwaltet, kann man sie auf anderen Maschinen unverändert weiterverwenden
      Wenn ich eine neue Maschine einrichte, muss ich auch nur meine dotfiles holen, und meine gewohnte Umgebung läuft sofort
    • Sind dotfiles nicht genau für so etwas gedacht?
      Nur halb im Scherz, aber das Kopieren einer .bashrc ist deutlich einfacher als die Installation einer kompletten Standard-Shell-Konfiguration
    • Ich habe Oh My Zsh auch verwendet, aber wegen der Langsamkeit wieder aufgegeben
      Es war nervig, bei jedem neuen Tab warten zu müssen
      Am Ende habe ich nur ein paar benötigte Plugins direkt über Homebrew installiert, und das hat nicht einmal eine Stunde gedauert
      Jetzt habe ich eine schnelle, schlanke Shell und bin deutlich produktiver und zufriedener
    • Zim ist auch gut. Schneller als Oh My Zsh und einfach zu konfigurieren
      Der Shell-Start ist sehr schnell, und das Setup ist unkompliziert
  • Deshalb bin ich zu fish gewechselt
    Es ist nicht perfekt auf meinen Geschmack zugeschnitten, aber die Standardeinstellungen sind gut genug, dass ich mich einfach daran gewöhnt habe
    Inzwischen muss ich mir um die Shell-Konfiguration fast keine Gedanken mehr machen

    • Der Vorteil dieses Ansatzes ist, dass man auf jedem Host einfach fish installieren kann und dann ohne zusätzliche Konfiguration dieselbe Umgebung hat
    • fish bietet schon im Auslieferungszustand starke Performance und eine hervorragende UX
      Anfänger sollten sich allerdings unbedingt die Keybindings ansehen
      Bei einem Teamkollegen wurde die Arbeit langsamer, weil er Funktionen wie Tab-Completion oder shift+arrow nicht kannte
    • Ich frage mich, was in der Standardkonfiguration eigentlich fehlt
      Ich füge gelegentlich nur Vim-Bindings oder ein Fuzzy-Find-Plugin hinzu
      Schon das Standard-fish ist wirklich hervorragend
  • Ich stimme nicht der Meinung zu, dass man in Zsh unbedingt den Vim-Modus aktivieren sollte
    Das normale readline ist für einzelne Befehle völlig ausreichend
    Längere Befehle kann man mit C-x C-e bearbeiten
    Beim Pair Programming wirkt die Umschaltung in den Vim-Modus auf mich eher langsamer

    • Ich habe gerade erst gelernt, wie nützlich der Shortcut C-x C-e wirklich ist
    • Ich habe nach dem Aktivieren des Vim-Modus auch die readline-Bindings wieder ergänzt
      Die meiste Zeit bin ich im Insert-Modus, und nur für größere Bearbeitungen nutze ich C-x C-e
    • Ein Moduswechsel ist nur ein Tastendruck, also gibt es keinen Grund, warum das langsamer sein sollte
      Wenn man an vi-Keybindings gewöhnt ist, sind Befehle wie w, b, dw durch Muscle Memory schneller
      Einen Editor zu öffnen unterbricht den Flow und verdeckt außerdem die Ausgabe, deshalb mag ich das nicht
      Ich wünschte, die Shell hätte auch Funktionen aus Vim wie Löschen zwischen Zeichen (di")
  • Ich nutze oh-my-zsh auch nur als Grundgerüst
    Ich verwende nur das git-Plugin und lade benutzerdefinierte Funktionen automatisch
    Mit hyperfine gemessen lag die Login-Shell bei 54 ms und eine normale Shell bei etwa 6 ms
    Ich denke, die Verzögerung von 380 ms könnte auch andere Ursachen haben

    • Wenn du dich für zsh-Performance interessierst, empfehle ich zsh4humans
      Sofortiger Start ist möglich, und der Wartungsmodus verhindert eher, dass man Zeit verschwendet
    • zsh -l ist eine Login-Shell und lädt zshrc nicht
      Man sollte mit zsh -ic exit testen
      Details dazu stehen im zsh-bench-Leitfaden
    • Für genauere Messungen ist es besser, zprof in .zshrc einzufügen
      zmodload zsh/zprof
      ...
      zprof
      
    • Ich würde auch empfehlen, Benchmarks innerhalb eines git-Repositorys auszuführen
    • Es lohnt sich auch, Plugins wie extract, z, fzf auszuprobieren
  • Ich bin auf die Kombination fish + starship umgestiegen
    fish bietet standardmäßig Autovervollständigung und Syntax-Highlighting und ersetzt damit die wichtigsten Funktionen von oh-my-zsh
    Siehe auch diesen Beitrag

    • fish ist allerdings nicht POSIX-kompatibel, was unpraktisch sein kann
      Deshalb bleibe ich bei zsh + starship + einem einfachen Init-Skript
      Ich wünschte, fish würde vollständig „einfach funktionieren“, aber ganz so weit ist es noch nicht
    • Ich habe auch jahrzehntelang zsh verwendet, bin aber seit letztem Jahr auf fish umgestiegen und nutze es weiterhin
      Dass es kein HEREDOC gibt und keine Background-Blöcke möglich sind, ist unpraktisch,
      aber heutzutage bevorzuge ich für komplexe Skripte eher Sprachen, die zu einem einzelnen Binary gebaut werden
      Wenn es ausgereifter ist, will ich zu nushell wechseln
    • Eigentlich ist fish schon im Standardzustand hervorragend, sodass fast keine Anpassungen nötig sind
  • Ich bin vor ein paar Jahren zu Zim gewechselt
    Es hat alles, was ich brauche, und ist schnell und einfach zu installieren
    https://zimfw.sh/

    • Zimfw hat ein sehr schnelles und flexibles Installationssystem
      Es unterstützt verschiedene Quellen und Formate, und auch die Integration von zsh-Code ist hervorragend
      In Geschwindigkeit und Kompatibilität ist es den meisten Plugin-Systemen deutlich überlegen
      Wirklich ein großartiges Framework
  • Ich habe oh-my-zsh vor etwa 15 Jahren im Studium installiert,
    und seitdem war ich so zufrieden damit, dass ich nie das Bedürfnis hatte, andere Shells oder Konfigurationen auszuprobieren
    Bei jedem neuen Rechner ist es das Erste, was ich installiere

  • Ich habe oh-my-zsh lange verwendet, aber diesmal mit Claude in fünf Minuten entfernt
    Ich habe nur die Funktionen, die ich wirklich brauche, durch raw zsh ersetzt
    Da ich starship als Prompt nutze, brauchte ich kaum zusätzliche Konfiguration
    Bisher scheint alles problemlos zu funktionieren

  • Manche finden es übertrieben, sich über die 0,5 Sekunden Verzögerung von oh-my-zsh zu beschweren
    Ihrer Meinung nach reicht es völlig, einfach bash und KDE konsole zu verwenden
    Die Shell sei nur ein einfacher Wrapper für die Arbeit, und man müsse sich um solche Mikrooptimierungen nicht kümmern

    • Wer jedoch terminalzentriert arbeitet, öffnet pro Tag dutzende Shells
      Jede Shell ist Teil des Arbeitsflusses, daher fällt selbst eine Verzögerung von 1 Sekunde spürbar ins Gewicht
      Deshalb halte ich eine schnelle Shell für wichtig
    • Andere fragen wiederum, wie oft man am Tag überhaupt eine Shell öffnet
      Selbst wenn es 20-mal wäre, sei das kein großes Problem
    • Eine weitere Person meint, man sollte das eher als persönliche Präferenz sehen
      Natürlich ist bessere Performance schön, aber es sei kein grundlegendes Problem
  • Meine zsh-Konfiguration ist etwa 90 Zeilen lang und verwendet nur drei Plugins (compinit, vcs-info, edit-command-line)
    Vom Start bis zum Ende dauert es ungefähr 0,32 Sekunden
    In großen Repositories gibt es Verzögerungen, weil Branch-Informationen abgefragt werden
    Mit dem bkt-Caching-Utility (https://github.com/dimo414/bkt) lässt sich dieses Problem lösen
    Wahrscheinlich nutzt Starship ein ähnliches Caching-Verfahren

 
roxie 2026-02-27

Wenn man es nicht optimiert, ist es wirklich langsam. Aber ich habe mich an viele der Funktionen so gewöhnt, dass es nicht gerade leicht ist, davon wegzukommen.

 
tesha001 2026-01-12

Bisher fühlte es sich noch nicht so störend an, dass es wirklich auffallen würde.

 
princox 2026-01-12

Es ist ja kein Webserver; solange es nicht so unbequem ist, dass es wirklich stört, nehme ich es einfach hin..