17 पॉइंट द्वारा GN⁺ 2026-01-11 | 10 टिप्पणियां | WhatsApp पर शेयर करें
  • Oh My Zsh(OMZ) अब भी व्यापक रूप से सुझाया जाता है, लेकिन यह शेल स्टार्टअप समय को धीमा करने वाला अनावश्यक स्क्रिप्ट ओवरहेड पैदा करता है
  • OMZ शेल स्क्रिप्ट में लिखा गया है, इसलिए हर बार नया टर्मिनल टैब खोलने पर सभी स्क्रिप्ट्स को इंटरप्रेट करना पड़ता है, और सिर्फ डिफ़ॉल्ट सेटिंग्स में भी लगभग 0.38 सेकंड की देरी होती है
  • सरल न्यूनतम Zsh सेटअप, Starship prompt, और fzf-आधारित history search इस्तेमाल करने पर स्टार्टअप समय 0.07 सेकंड तक घटाया जा सकता है
  • Starship एक ही binary से prompt बनाता है, और OMZ के git·virtual environment·language-specific plugins को replace कर देता है
  • जटिल plugins की बजाय ज़रूरत के फीचर्स ही सीधे जोड़ने वाला हल्का शेल कॉन्फ़िगरेशन ज़्यादा प्रभावी है

Oh My Zsh की प्रदर्शन समस्या

  • Oh My Zsh(OMZ) अब भी बहुत इस्तेमाल होता है, लेकिन अनावश्यक ओवरहेड (bloat) की वजह से शेल स्टार्टअप की गति कम हो जाती है
    • OMZ शेल स्क्रिप्ट्स से बना है, इसलिए हर बार नया टर्मिनल टैब खोलने पर सभी स्क्रिप्ट्स को इंटरप्रेट करना पड़ता है
    • डिफ़ॉल्ट plugins (git, zsh-autosuggestions, zsh-autocomplete) शामिल सेटअप में /usr/bin/time -f "%e seconds" zsh -i -c exit चलाने पर 0.38 सेकंड लगे
  • git repository फ़ोल्डर में नया टैब खोलने पर अनुभव के हिसाब से लगभग 1 सेकंड की देरी महसूस होती है
  • OMZ समय-समय पर updates की जाँच करता है, और इस प्रक्रिया से कुछ सेकंड की अतिरिक्त देरी हो सकती है
  • शेल कॉन्फ़िगरेशन को बार-बार अपडेट करना अनावश्यक है, और केवल ज़रूरी फीचर्स सीधे जोड़ने वाला सरल सेटअप सुझाया जाता है

न्यूनतम Zsh सेटअप

  • प्रस्तावित न्यूनतम Zsh सेटअप इस प्रकार है
    export HISTSIZE=1000000000
    export SAVEHIST=$HISTSIZE
    setopt EXTENDED_HISTORY
    setopt autocd
    autoload -U compinit; compinit
    
    • HISTSIZE और SAVEHIST command history का आकार तय करते हैं
    • EXTENDED_HISTORY history में timestamp जोड़ता है
    • autocd से cd कमांड के बिना directory बदली जा सकती है
    • compinit auto-completion system को initialize करता है
  • सिर्फ इस सेटअप से भी completion फीचर वाला बुनियादी शेल environment मिल जाता है

prompt customization

  • prompt के लिए Starship इस्तेमाल किया गया है
    • Starship एक binary में बना तेज़ और न्यूनतम prompt है
    • यह OMZ के मौजूदा plugins और themes को replace करता है, और git·virtual environment·language-specific status दिखाता है
  • Starship कॉन्फ़िगरेशन उदाहरण में AWS, GCP, Azure, NodeJS जैसे cloud-संबंधित संकेत बंद करके दृश्य शोर कम किया गया है
  • Python और Rust projects में संबंधित language prompt में उभरकर दिखती है, और command execution time भी दिखता है
  • इसे सक्रिय करने के लिए .zshrc में यह एक लाइन जोड़ें
    eval "$(starship init zsh)"
    

history search

  • आम तौर पर इस्तेमाल होने वाला zsh-autosuggestions plugin टाइप करते समय suggestions दिखाता है, जिससे ध्यान भटक सकता है
  • इसकी जगह fzf को Ctrl+R से bind करके history को interactive fuzzy search के ज़रिए खोजा जा सकता है
    source <(fzf --zsh)
    

प्रदर्शन सुधार का परिणाम

  • ऊपर के सेटअप के बाद शेल स्टार्टअप समय इस प्रकार रहा
    ❯ /usr/bin/time -f "%e seconds" zsh -i -c exit
    0.07 seconds
    
  • OMZ की तुलना में लगभग 5 गुना से अधिक तेज़ स्टार्टअप हासिल हुआ

अतिरिक्त टिप्स

  • Vim users Zsh में Vim mode चालू करके command editing की गति बढ़ा सकते हैं
    set -o vi
    bindkey -v '^?' backward-delete-char
    
    • zle डिफ़ॉल्ट रूप से Emacs key bindings इस्तेमाल करता है, इसलिए यह सेटिंग Vim-style input सक्षम करती है

निष्कर्ष और उपयोग के मामले

  • OMZ से स्विच करने के बाद कुछ ही दिनों में नए workflow के अनुरूप ढल गए
  • ज़रूरत के plugins को सीधे manual load किया जा सकता है
  • कई टैब खोलने का कारण tmux और terminal-based editor (helix) का साथ में उपयोग है
    • tmux में lazygit और yazi file manager को popup रूप में चलाया जाता है
    • code execution और test output के लिए अस्थायी split panes उपयोग होते हैं, और हर एक अलग शेल session की तरह काम करता है

टिप्पणियों का सार

  • कुछ users का कहना है कि OMZ का स्टार्टअप समय 0.03 सेकंड के स्तर पर काफ़ी तेज़ है
  • लेखक ने इशारा किया कि zsh-autocomplete plugin गति को धीमा करता है
  • zsh-bench परिणामों में OMZ के लिए first prompt delay 603ms और सरल Zsh सेटअप के लिए 103ms मापा गया
  • Starship, OMZ की prompt-संबंधित सुविधाओं को एक ही टूल से replace करता है
  • अन्य users ने Zimfw, Atuin, और खुद लिखे गए bash prompt जैसे विकल्पों का उल्लेख किया

10 टिप्पणियां

 
tesha001 2026-01-12

अब तक यह इतनी ज़्यादा ध्यान खींचने वाली असुविधा जैसी तो नहीं लगी थी।

 
princox 2026-01-12

वेब सर्वर भी नहीं है, और जब तक इतनी असुविधा महसूस न हो कि खलने लगे, तब तक इसे ऐसे ही चलने देता हूँ..

 
zxcv123 2026-01-11

डेवलपर्स हैं तो क्या, बेकार के कुछ ms को लेकर भी हंगामा मचा रहे हैं, lol

 
edunga1 2026-01-12

मैंने शुरुआत omz के साथ की थी, इसलिए लगा कि यह बस वही असुविधा है जिसे झेलना पड़ता है, उफ़ उफ़
हाल में मैंने plugins भी एक-एक करके हटाए और update policy भी बदल दी.. यह देखकर लगा कि इसके बिना भी काम चल जाएगा।
मेरे लिए, जब tmuxinator से config लोड करते समय omz update y/n दिखता है, तो वह खास पसंद नहीं आता।

 
devfluotin 2026-01-12

मैं कुछ महीने पहले prezto पर स्विच किया था, तो लगा कि omz क्या पहले भी इतना धीमा था?
सिर्फ कुछ बेसिक plugins ही जोड़ो तो भी यह काफ़ी धीमा हो जाता है...

 
wedding 2026-01-14

मैं starship पर शिफ्ट हो गया हूँ

 
kayws426 2026-01-12

क्या बेकार के कुछ ms के लिए ही टेक्नोलॉजी आगे नहीं बढ़ रही थी?

 
t7vonn 2026-01-11

अगर आप टर्मिनल का अक्सर इस्तेमाल करते हैं, तो omz की वजह से जुड़ने वाली अतिरिक्त देरी काफ़ी खटकती है।

 
GN⁺ 2026-01-11
Hacker News की राय
  • मैं oh-my-zsh सिर्फ़ एक वजह से इस्तेमाल करता हूँ
    ताकि नई मशीन, remote host, या container कहीं भी मुझे तुरंत इस्तेमाल करने लायक फ़ौरन प्रोडक्टिव shell environment मिल जाए
    config खुद छेड़ने में घंटों लगाने से बेहतर है कि वह समय ज़्यादा अहम कामों में लगाऊँ

    • मैं Starship आज़माने की सलाह दूँगा
      इसमें भी “install करो और तुरंत इस्तेमाल करो” वाला अनुभव मिलता है, लेकिन 200ms से ज़्यादा prompt latency नहीं होती
      एक curl लाइन से install हो जाता है, और config भी सरल है
      मुझे लगता है, इसे आज़माकर पछतावा नहीं होगा
    • अगर मशीन custom config की अनुमति देती है, तो मेरा मानना है कि अपनी dotfiles कॉपी करके इस्तेमाल करना बेहतर है
      एक बार config files बना कर git से manage कर लो, तो दूसरी मशीनों पर भी वही इस्तेमाल कर सकते हो
      मैं भी नई मशीन सेट करते समय सिर्फ़ dotfiles लाता हूँ और मेरा परिचित environment तुरंत चलने लगता है
    • सच कहें तो dotfiles इसी काम के लिए बनी हैं, है ना?
      मज़ाक अपनी जगह, लेकिन default shell setup install करने से .bashrc कॉपी करना कहीं आसान है
    • मैंने भी Oh My Zsh इस्तेमाल किया था, लेकिन यह इतना धीमा था कि छोड़ना पड़ा
      हर बार tab खोलते समय इंतज़ार करना पड़ता था, जो काफ़ी चिढ़ाने वाला था
      आख़िर में मैंने Homebrew से सिर्फ़ ज़रूरी plugins खुद install किए, और इसमें एक घंटा भी नहीं लगा
      अब shell तेज़ और हल्का है, इसलिए मैं कहीं ज़्यादा प्रोडक्टिव हूँ और बेहतर महसूस करता हूँ
    • Zim भी ठीक है। यह Oh My Zsh से तेज़ है और config करना आसान है
      shell startup बहुत तेज़ है और setup भी आसान है
  • इसलिए मैं fish पर चला गया
    यह पूरी तरह मेरे मन का नहीं है, लेकिन इसकी default settings इतनी अच्छी हैं कि बस आदत पड़ गई
    अब shell config पर मुझे लगभग कभी ध्यान नहीं देना पड़ता

    • इस approach का फ़ायदा यह है कि किसी भी host पर fish install करते ही बिना extra config के वही environment इस्तेमाल किया जा सकता है
    • fish default में ही बेहतरीन performance और शानदार UX देता है
      हाँ, नए users को key bindings ज़रूर पढ़नी चाहिए
      मेरे एक teammate को tab completion या shift+arrow जैसे features का पता नहीं था, इसलिए उसकी गति धीमी हो गई थी
    • मैं जानना चाहूँगा कि default setup में ऐसा क्या कमी है
      मैं कभी-कभी सिर्फ़ vim bindings या fuzzy find plugin जोड़ता हूँ
      सिर्फ़ default fish भी काफ़ी शानदार है
  • मैं इस राय से सहमत नहीं हूँ कि Zsh में Vim mode चालू करने की सलाह दी जानी चाहिए
    default readline भी single command के लिए काफ़ी अच्छा है
    लंबी command को C-x C-e से edit किया जा सकता है
    pair programming करते समय, Vim mode switching की वजह से उल्टा यह धीमा लगता है

    • मुझे अभी पता चला कि C-x C-e shortcut सच में बहुत काम का है
    • मैंने भी Vim mode चालू करने के बाद readline bindings फिर से जोड़ीं
      ज़्यादातर समय insert mode में रहता हूँ, और बड़ी editing की ज़रूरत हो तो ही C-x C-e इस्तेमाल करता हूँ
    • mode switching सिर्फ़ एक key press है, इसलिए इसके धीमा होने की वजह नहीं होनी चाहिए
      अगर आप vi key bindings के आदी हैं, तो w, b, dw जैसे commands muscle memory की वजह से ज़्यादा तेज़ लगते हैं
      editor खोलना flow तोड़ देता है और output भी छिपा देता है, इसलिए मुझे वह पसंद नहीं
      काश shell में भी Vim का अक्षरों के बीच delete करना (di") जैसा feature होता
  • मैं भी oh-my-zsh को सिर्फ़ base setup के लिए इस्तेमाल करता हूँ
    सिर्फ़ git plugin इस्तेमाल करता हूँ, और custom functions auto-load कराता हूँ
    hyperfine से मापने पर login shell लगभग 54ms और सामान्य shell लगभग 6ms निकला
    मुझे लगता है कि 380ms delay की कोई दूसरी वजह भी हो सकती है

    • अगर आपको zsh performance में दिलचस्पी है, तो zsh4humans की सिफ़ारिश है
      इसमें instant startup मिलता है, और maintenance mode में होने की वजह से उल्टा समय की बर्बादी रुकती है
    • zsh -l login shell है, इसलिए यह zshrc load नहीं करता
      testing zsh -ic exit से करनी चाहिए
      विस्तार से जानने के लिए zsh-bench guide देखें
    • और सटीक measurement के लिए zprof को .zshrc में जोड़ना बेहतर है
      zmodload zsh/zprof
      ...
      zprof
      
    • git repository के अंदर benchmark चलाकर देखना भी सुझाया जाता है
    • extract, z, fzf जैसे plugins भी आज़माने लायक हैं
  • मैं fish + starship के combination पर आ गया हूँ
    fish default रूप से autocompletion और syntax highlighting देता है, इसलिए oh-my-zsh के मुख्य features की जगह ले लेता है
    संबंधित लेख देखें

    • लेकिन fish POSIX compatible नहीं है, इसलिए थोड़ी असुविधा होती है
      इसीलिए मैं zsh+starship+एक simple init script बनाए रखता हूँ
      चाहता हूँ कि fish पूरी तरह “बस काम करे”, लेकिन अभी थोड़ी कमी लगती है
    • मैंने भी दशकों तक zsh इस्तेमाल किया, लेकिन पिछले साल से fish पर स्विच करके अभी तक उसी पर हूँ
      HEREDOC का न होना और background block का काम न करना असुविधाजनक है,
      लेकिन आजकल मैं complex scripts की जगह ज़्यादा single binary में build होने वाली languages पसंद करता हूँ
      जब यह stable हो जाएगा, तो nushell पर जाने का सोच रहा हूँ
    • सच कहें तो fish default state में ही काफ़ी शानदार है, इसलिए customization की बहुत कम ज़रूरत पड़ती है
  • मैं कुछ साल पहले Zim पर चला गया था
    इसमें ज़रूरी features सब हैं, और यह तेज़ है और install करना आसान है
    https://zimfw.sh/

    • Zimfw के पास बहुत तेज़ और flexible installation system है
      यह कई तरह के sources और formats को support करता है, और zsh code integration भी बेहतरीन है
      ज़्यादातर plugin systems की तुलना में इसकी speed और compatibility कहीं बेहतर है
      यह सच में शानदार framework है
  • लगभग 15 साल पहले, कॉलेज के समय मैंने oh-my-zsh install किया था,
    और तब से मैं इससे इतना संतुष्ट हूँ कि किसी दूसरे shell या setup को आज़माने की ज़रूरत ही महसूस नहीं हुई
    नई computer setup करते समय यह सबसे पहले install करता हूँ

  • मैं लंबे समय से oh-my-zsh इस्तेमाल कर रहा था, लेकिन इस बार Claude की मदद से 5 मिनट में इसे हटा दिया
    ज़रूरी features को सिर्फ़ raw zsh से बदल लिया
    क्योंकि prompt के लिए starship इस्तेमाल करता हूँ, इसलिए extra config की लगभग ज़रूरत नहीं पड़ी
    अभी तक सब कुछ ठीक से काम करता दिख रहा है

  • कुछ लोगों को लगता है कि oh-my-zsh की 0.5 सेकंड की देरी को समस्या बनाना बढ़ा-चढ़ाकर कहना है
    उनका कहना है कि बस bash और KDE konsole इस्तेमाल कर लो, वही काफ़ी है
    shell तो सिर्फ़ साधारण कामों के लिए एक wrapper है, इसलिए ऐसी micro-optimization पर ध्यान देने की ज़रूरत नहीं

    • लेकिन अगर आप terminal-केंद्रित तरीके से काम करते हैं, तो दिन भर में दर्जनों shell खोलते हैं
      और हर shell workflow का हिस्सा होता है, इसलिए 1 सेकंड की देरी भी साफ़ महसूस होती है
      इसी वजह से तेज़ shell महत्वपूर्ण लगता है
    • इसके उलट, कुछ लोग पूछते हैं कि भला दिन में shell कितनी बार खोलते हो
      ज़्यादा से ज़्यादा 20 बार ही, और उनके हिसाब से यह कोई बड़ी समस्या नहीं
    • एक और व्यक्ति का कहना है कि इसे बस व्यक्तिगत पसंद का मामला समझना चाहिए
      performance तेज़ होना अच्छा है, लेकिन यह कोई मूलभूत समस्या नहीं है
  • मेरी zsh config लगभग 90 lines की है और मैं सिर्फ़ 3 plugins (compinit, vcs-info, edit-command-line) इस्तेमाल करता हूँ
    startup से exit तक लगभग 0.32 सेकंड लगते हैं
    बड़े repositories में branch info लाने के कारण delay होता है
    bkt caching utility(https://github.com/dimo414/bkt) से ऐसी समस्या हल की जा सकती है
    शायद Starship भी इसी तरह caching का उपयोग करता है

 
roxie 2026-02-27

अगर optimization न करें तो यह सच में काफ़ी धीमा है। लेकिन इसकी कई features की आदत पड़ गई है, इसलिए इसे छोड़ना थोड़ा,, आसान नहीं है।