Zsh में उपयोगकर्ता इनपुट की एक पंक्ति पढ़ने का बेहतर तरीका? (जैसे zle के साथ?)


11

Zsh readकिसी कारण के लिए ^Mउन्हें <Enter>कीस्ट्रोक्स के रूप में स्वीकार करने के बजाय गूंज रहा है । (यदि -dसेट किया गया है, तो वे <Enter>'s के रूप में पहचाने जाते हैं , लेकिन अभी भी गूँजते हैं।) यह भी बैकस्पेस कुंजी की तरह मूल बातों का समर्थन नहीं करता है।

मैं इसे हैकिंग / रनिंग के द्वारा प्राप्त कर सकता हूँ bash,

> a=$(bash -c 'read -e -p "What would you like to do?: " tmp; echo $tmp')
What would you like to do?: eat cake
> echo $a                                                                
eat cake

लेकिन मैं सोच रहा हूँ अगर वहाँ एक क्लीनर रास्ता है।


एक ताजा zsh4.3.10 स्थापित पर पुष्टि नहीं कर सकता ; % read aयहाँ ठीक काम करता है।
user1686

यह ओएस एक्स पर इटर्म का उपयोग कर रहा है; readलिनक्स मशीनों पर काम करता है।
निकोलस तुंग

जवाबों:


19

Zsh के तहत आराम से टेक्स्ट की एक लाइन इनपुट करने के लिए, उपयोग करें vared। का उपयोग varedकरने के बजाय readका आह्वान zle , जो गुजर के बराबर है -eआह्वान ReadLine के लिए पार्टी में।

vared -p 'What would you like to do?: ' -c tmp

सादे के साथ आपके द्वारा वर्णित व्यवहार readएक शेल इश्यू के बजाय एक गलत टर्मिनल जैसा दिखता है। stty -aअपनी टर्मिनल सेटिंग दिखाने के लिए चलाएँ , और सुनिश्चित करें कि आपकी कुंजी भेजता eolहै पर सेट है ^Mऔर eraseसेट Backspaceहै। ऑपरेटिंग सिस्टम पर निर्भर करता है और यह टर्मिनल पर और सेट कैसे करता है, या Backspaceतो भेजता है । बैकस्पेस सेटिंग आमतौर पर कुछ कॉन्फ़िगरेशन फ़ाइल के कारण गलत हो जाती है जो इसे मैन्युअल रूप से सेट करने की कोशिश करती है, इसलिए पहली चीज जो आपको करनी चाहिए वह है ट्रैक और ऐसी किसी भी गलतफहमी को दूर करना। यदि आपको कोई नहीं मिलता है, तो यह जांचने के लिए अपने टर्मिनल एमुलेटर की सेटिंग की समीक्षा करें कि यह कुछ ऐतिहासिक संगतता मोड में सेट नहीं है। यदि अन्य सभी विफल होते हैं, तो अपने साथ कुछ ऐसा जोड़ें :^H^?~/.zshrc

if [[ $(ps -o comm= $PPID) = iterm ]]; then
  stty erase '^?'
fi

1
vared -p 'आप क्या करना चाहेंगे ?:' -c tmp
zzapper

इतना ठंडा! varedबिलिन के बारे में नहीं पता था । पता चला, zshzleमैन पेज निश्चित रूप से कम से कम स्किमिंग के माध्यम से लायक है।
रतिज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.