तीर कुंजियों के बाद बैश में उल्टा इतिहास खोज कर्सर को गलत स्थान पर प्रदर्शित करने का कारण बनता है


10

मैंने देखा है कि कई बार जब मैं रिवर्स-हिस्ट्री-सर्च कमांड कमांड से CTRL+ के माध्यम से r, अगर मैं कमांड को संपादित करना चाहता हूं, तो कभी-कभी कर्सर गलत स्थिति में कूदता है जब मैं एक तीर कुंजी दबाता हूं या CTRL+ aया CTRL+ दर्ज करता हूं e। विशिष्ट स्थिति यह ऐसा प्रतीत होता है कि मेरी कमांड लाइन प्रॉम्प्ट के आकार के बराबर एक ऑफसेट हो सकती है PS1

यह कठिनाई का कारण बनता है क्योंकि कर्सर का वास्तविक स्थान स्क्रीन पर प्रस्तुत किए गए से अलग है; कमांड के भविष्य के संपादन को इस तरह से प्रस्तुत किया जाता है जैसे कि वह कर्सर जहां वह कूदता है, लेकिन वास्तविक कमांड बिना किसी कूद के सही स्थान को बनाए रखता है।

क्या किसी को पता है कि यह क्या कारण है या इसे कैसे ठीक किया जाए?

संपादित करें: यदि मैं PS1समस्या के अंत में एक नई पंक्ति जोड़ता हूं तो लगता है कि वह दूर चली जाएगी। हालाँकि, मैं प्रॉम्प्ट के रूप में उसी लाइन पर कमांड दर्ज करना पसंद करूंगा।

जवाबों:


6

यह अक्सर आपके इतिहास में आदेशों के कारण होता है जो 1 पंक्ति से अधिक लंबे होते हैं। जब आप इतिहास से छोटी वस्तु का चयन करते हैं, तो कमांड लाइन को फिर से रेंडर करने में प्रॉम्प्ट की चौड़ाई को ध्यान में नहीं रखता है, इसलिए उस लंबी कमांड के बाद सब कुछ खराब हो जाता है।

जो आसान उपाय मैंने पाया है वह है घर की चाबी को हिट करना, "इको" और हिट एंटर डालना। फिर अंतिम कमांड को याद करें और वहां से संपादित करें। (पहली प्रतिध्वनि हटाते हुए। :)


धन्यवाद, मैंने वास्तव में कुछ समय पहले ही कोशिश की थी। मेरे मामले में मैं लापरवाह था और एक फाइल को उड़ा दिया क्योंकि कमांड में एक पाइप था जिसने गूंज को निगल लिया था। आप सही हैं, यह केवल मेरे प्रयोग के अनुसार लंबे आदेशों को प्रभावित करता है।
जॉन्ड्री

इको की तुलना में एक बेहतर समाधान जो मैंने अभी पाया: एक '#' को प्रतिध्वनि के बजाय लाइन की शुरुआत में जोड़ें। इस तरह से बैश पूरी लाइन को एक टिप्पणी की तरह मानते हैं।
जोंडर्री

1
फिर भी बेहतर: यदि वर्तमान लाइन फिर से तैयार की जाती है तो समस्या दूर होती है। या तो स्क्रीन को साफ़ करने के लिए Cl और वर्तमान लाइन को फिर से बनाएँ या अनबाउंड फ़ंक्शन redraw-current-line के लिए एक महत्वपूर्ण बाइंडिंग बनाए।
जॉन्ड्री

मैं सीएल समाधान का उल्लेख करना भूल गया क्योंकि मैं स्क्रॉल बफर खोने से वास्तव में नफरत करता हूं, लेकिन हां, यह इतिहास नेविगेशन से एक अस्थायी रेंडरिंग गड़बड़ है, इसलिए एक रीड्रा को मजबूर करना इसे ठीक कर देगा। redraw-current-line एक बेहतर समाधान की तरह लगता है!
कबड्डी

13

हो सकता है कि आपके पास PS1 में नॉन-प्रिंटिंग एस्केप सीक्वेंस न हो \ _ [और \] में संलग्न नहीं।

सुनिश्चित करें कि आपने उन सभी को इस तरह संलग्न किया है:

\[\e[33m\]\w\[\e[31m\] $ \[\e[0m\]

1
अच्छा काम करता है अगर आप में केवल गैर मुद्रण दृश्यों लगा \[और \](ताकि आप इन ब्लॉक उद्धरण के कई समूहों की जरूरत है)
Andomar
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.