लंबे इनपुट स्ट्रिंग्स पर बाश (ट्टी और एक्स) में अजीब होम एक्टिंग


10

जब मैं हिट करता हूं Homeयदि मेरा वर्तमान इनपुट काफी कम है (कहते हैं, <36 अक्षर), तो यह ठीक काम करता है। हालाँकि, जब मैंने एक लंबी कमांड टाइप की है और फिर शुरुआत में वापस जाना चाहता हूं, तो ऐसा लगता है कि यह अपना काम करता है, लेकिन कमांड अभी प्रदर्शित नहीं हुआ है। ऐसा लगता है जैसे मैं शुरुआत में नहीं हूं लेकिन लगभग 10 अक्षर बंद हैं। यद्यपि यदि मैं "नेत्रहीन" टाइप करता हूं, तो यह ठीक काम करता है, लेकिन यह कुल गड़बड़ की तरह दिखता है, जैसे कि पूरे इनपुट को दाईं ओर स्थानांतरित किया गया है, लेकिन फिर से नहीं बनाया गया। इसलिए मैं इसे टाइप करता हूं, लेकिन "वास्तव में" नहीं, क्योंकि मैं जिस स्थान को "मिटा रहा हूं" वास्तव में "10 अक्षर" दाईं ओर है। तदनुसार, यदि मैं कमांड को मिटाने की कोशिश करता हूं, तो पहले 10 अक्षर अभी भी प्रदर्शित होते हैं, लेकिन अगर मैं Enterइसे हिट करता हूं तो बस एक और संकेत दिखाता है जैसे कि पिछला इनपुट खाली था।

मुझे पता है कि यह अब तक का सबसे अच्छा स्पष्टीकरण नहीं है, लेकिन मुद्दा यह है कि बैश इसे पहचानता है और सही काम करने की कोशिश करता है, लेकिन अक्सर विफल रहता है।

मैं ट्टी में और एक्स सत्र में एक टर्मिनल में दोनों को पुन: पेश करता हूं। जब मैं हिट करता हूं Ctrl+ Vऔर तब Homeमुझे अलग-अलग क्रम ( ^[OHएक्स में, ^[[1~ट्टी में) दिखाई देते हैं, लेकिन दोनों ही मेरे में लगते हैं /etc/inputrc:

# do not bell on tab-completion
#set bell-style none

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on

$if mode=emacs

# for linux console and RH/Debian xterm
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[7~": beginning-of-line
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word

# for rxvt
"\e[8~": end-of-line

# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# for freebsd console
"\e[H": beginning-of-line
"\e[F": end-of-line
$endif

echo $TERMlinuxtty और xtermX सत्र में दिखाता है ।

आईटी इस

GNU बैश, संस्करण 4.2.24 (2) -release (i686-pc-linux-gnu)

किसी को भी इस बारे में सुराग है?


1
आपका संकेत कब तक है? क्या 36 वर्णों के बारे में कमांड लाइन टाइप करने से आपके टर्मिनल की एक लाइन भर जाती है, और इस तरह साइड स्क्रॉलिंग हो जाती है? क्या यह तब भी होता है जब आप इस प्रॉम्प्ट का उपयोग करते हैं? PS1='$ '
मिकेल

@ मिकेल मुझे नहीं पता कि आपके मन में क्या है, लेकिन आप शायद सबसे सही रास्ते के पास हैं। यह प्रतीत नहीं होता है जब मैं न्यूनतर संकेत का उपयोग करता हूं। जो मैंने उपयोग किया था वह डिफ़ॉल्ट एक की तुलना में थोड़ा संशोधित था PS1="\e[0;36m[\u@\h \W]\$ \e[m":। क्या इसके साथ कोई गलत है? टाइपिंग 36 अक्षर एक लाइन (दूर तक) नहीं भरते हैं। इसके अलावा, मैं tty में साइड स्क्रॉलिंग नहीं है :)
Lev Levitsky

@ मिकेल I ने jw013 की सलाह का पालन किया और प्रॉम्प्ट को समायोजित किया, जो इसे हल करने के लिए लगता है। हो सकता है कि आप इस बारे में विस्तार से बताएं कि समस्या क्या थी ताकि मैं आपको कुछ प्रतिनिधि के रूप में पुरस्कृत कर सकूं क्योंकि यह पहले पता लगाने के लिए :)
लेव लेवित्स्की

जवाबों:


12

आप गैर-मुद्रण के साथ अपने शीघ्र के कुछ हिस्सों (सहित, लेकिन बदलते रंगों के लिए दृश्यों से बचने के लिए ही सीमित नहीं) के चारों ओर की जरूरत है \[और \]

आपका मूल संकेत: \e[0;36m[\u@\h \W]\$ \e[m
निश्चित संकेत:\[\e[0;36m\][\u@\h \W]\$ \[\e[m\]

\[और \]बता bashमें वास्तव में स्क्रीन पर प्रिंट नहीं है के बीच है कि सब कुछ, यानी शून्य लम्बाई है। गणना की गई त्वरित लंबाई यह जानने के लिए आवश्यक है कि आपके द्वारा टाइप किए गए पात्रों को कहां से प्रतिध्वनित किया जाए। बाहर जा रहे \[ \]का कारण बनता है bashएक गलत शीघ्र लंबाई, जो अक्सर की वजह से अजीब टर्मिनल ज्यामिति पर निर्भर व्यवहार की ओर जाता है की गणना करने के bashजहां कर्सर वास्तविकता के साथ मेल नहीं है के विचार।


धन्यवाद, यह समस्या को हल करता है। मैं कुछ स्पष्टीकरण की सराहना करता हूं, हालांकि: उस व्यवहार का कारण क्या था, वर्ग कोष्ठक क्या करते हैं, आदि। यह अच्छा होगा कि यह सब एक पृष्ठ पर हो और भविष्य में किसी और की मदद कर सके।
लेव लेवित्स्की

@LevLevitsky मैंने उत्तर में एक छोटा स्पष्टीकरण जोड़ा।
jw013

बहुत धन्यवाद! यह अब मेरे लिए अधिक समझ में आता है।
लेव लेवित्स्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.