यदि आपकी कमांड लाइन पर वर्ण कभी-कभी ऑफ़सेट पर प्रदर्शित होते हैं, तो ऐसा अक्सर होता है क्योंकि zsh ने प्रॉम्प्ट के लिए गलत चौड़ाई की गणना की है। लक्षण हैं कि प्रदर्शन दिखता है ठीक जब तक आप वर्ण जोड़ने या वर्ण दर वर्ण चलती लेकिन जब आप अन्य आदेशों कर्सर (ले जाने का उपयोग करें (कुछ उन्हें करना चाहिए की तुलना में आगे सही प्रदर्शित होने के पात्रों के साथ) ठीक से प्रदर्शित हो जाता है कर रहे हैं Home, पूरा होने, आदि ) या जब कमांड दूसरी पंक्ति को ओवरलैप करता है।
कमांड के अक्षर कहां रखे गए हैं, यह जानने के लिए Zsh को संकेत की चौड़ाई को जानना होगा। यह मानता है कि प्रत्येक चरित्र एक स्थिति पर कब्जा कर लेता है जब तक कि अन्यथा न कहा जाए।
एक संभावना यह है कि आपके प्रॉम्प्ट में एस्केप सीक्वेंस हैं जो ठीक से सीमांकित नहीं हैं। एस्केप अनुक्रम जो पाठ के रंग या अन्य स्वरूपण पहलुओं को बदलते हैं, या जो विंडो शीर्षक या अन्य प्रभावों को बदलते हैं, में शून्य चौड़ाई होती है। उन्हें प्रतिशत-ब्रेसिज़ निर्माण के भीतर शामिल करने की आवश्यकता है%{…%}
। अधिक आम तौर पर, भागने का क्रम %42{…%}
zsh को यह बताने के लिए कहता है कि ब्रेसिज़ के अंदर जो है वह 42 अक्षर चौड़ा है।
इसलिए अपनी प्रॉम्प्ट सेटिंग्स ( PS1
और PROMPT
, या वे वेरिएबल जिन्हें वे रेफरेंस करते हैं) चेक करें और सुनिश्चित करें कि सभी सीक्वेंस से बच जाएं (जैसे कि \e[…m
टेक्स्ट फीचर्स बदलने के लिए - ध्यान दें कि यह कुछ वैरिएबल जैसे मौजूद हो सकता है $fg[red]
) अंदर हैं %{…%}
। चूंकि आप ओह-माय-ज़श का उपयोग कर रहे हैं, इसलिए अपनी सेटिंग्स और परिभाषाएँ जो आप ओह-माय-ज़श से उपयोग कर रहे हैं, दोनों की जाँच करें।
इसी मुद्दे पर मारपीट होती है। वहाँ एक में तत्काल चौड़ाई शून्य अनुक्रम संलग्न करने की आवश्यकता है \[…\]
।
एक और संभावना यह है कि आपके प्रॉम्प्ट में गैर- ASCII वर्ण हैं और उस zsh (या किसी अन्य अनुप्रयोग) और आपके टर्मिनल का एक अलग विचार है कि वे कितने व्यापक हैं। यह तब हो सकता है जब आपके टर्मिनल के एन्कोडिंग और शेल में घोषित एन्कोडिंग के बीच एक बेमेल है , और दो एन्कोडिंग के परिणामस्वरूप कुछ बाइट अनुक्रमों के लिए अलग-अलग चौड़ाई में परिणाम होते हैं। आमतौर पर आप इस मुद्दे पर एक गैर-यूनिकोड टर्मिनल का उपयोग कर सकते हैं, लेकिन एक यूनिकोड लोकेल या इसके विपरीत घोषित कर सकते हैं।
अनुप्रयोग वातावरण जानने के लिए पर्यावरण चर पर भरोसा करते हैं; प्रासंगिक सेटिंग है LC_CTYPE
, जो वातावरण चर से निर्धारित किया जाता है LANGUAGE
, LC_ALL
, LC_CTYPE
और LANG
(इनमें से पहला है कि सेट है लागू होता है)। कमांड locale | grep LC_CTYPE
आपको आपकी वर्तमान सेटिंग बताता है। आमतौर पर स्थानीय मुद्दों से बचने का सबसे अच्छा तरीका टर्मिनल एमुलेटर को सेट करना है LC_CTYPE
, क्योंकि यह जानता है कि यह एन्कोडिंग क्या उम्मीद करता है; लेकिन अगर वह आपके लिए काम नहीं कर रहा है, तो सुनिश्चित करें कि सेट करना है LC_CTYPE
।
समान लक्षण तब हो सकते हैं जब पिछली कमांड ने कुछ आउटपुट प्रदर्शित किया था जो एक नई रेखा में समाप्त नहीं हुआ था, ताकि प्रॉम्प्ट लाइन के बीच में प्रदर्शित हो लेकिन शेल को इसका एहसास नहीं होता है। इस मामले में जो केवल इस तरह के आदेश को चलाने के बाद होगा, लगातार नहीं।
यदि एक पंक्ति ठीक से प्रदर्शित नहीं होती है, तो कमांड redisplay
या clear-screen
( डिफ़ॉल्ट रूप से Ctrl+ Lसे) इसे ठीक कर देगा।