आप देखेंगे कि जब आप catएक टर्मिनल पर एक शेल प्रॉम्प्ट पर दौड़ते हैं , तो catस्टडआउट से लिखने के लिए माना जाता है कि यह स्टड से क्या पढ़ता है, और दबाएं a, आपको aटर्मिनल ड्राइवर द्वारा एक गूँजती हुई पीठ दिखाई देती है , लेकिन catवह नहीं लिखता है a(आप देखें केवल एक a, टर्मिनल चालक द्वारा प्रतिध्वनित)।
हालाँकि, यदि आप टाइप करते हैं, तो आपको आउटपुट a Backspace b Enterनहीं दिखता है , लेकिन ( और newline)।cata\010b\015b\012b
ऐसा इसलिए है क्योंकि टर्मिनल ड्राइवर (हम कर्नेल में सॉफ़्टवेयर की बात कर रहे हैं, टर्मिनल एमुलेटर में नहीं xterm) जैसे कि कैनोनिकल मोड में एक बहुत ही बुनियादी लाइन संपादक को लागू करता है। टर्मिनल ड्राइवर को कमांड का उपयोग करते समय सिस्टम कॉल का उपयोग करके कॉन्फ़िगर किया जा सकता है । उदाहरण के लिए, विहित मोड को छोड़ने के लिए, आप कर सकते हैं । यदि तुम करो:ioctl()sttystty -icanon
stty -icanon; cat
फिर, आप दोनों echo(जो आप के साथ अक्षम हो सकते थे stty -echo) और catआउटपुट एक ही समय में देखेंगे ।
वह संपादक एक लाइन संपादक है। यही है, यह उपयोगकर्ता के लिए पाठ की एक पंक्ति को संपादित करने के लिए है जब तक कि इसे दबाने पर टर्मिनल डिवाइस को पढ़ने के लिए आवेदन नहीं भेजा जाता है Enter।
उस संपादक की संपादन क्षमताएं बहुत सीमित हैं। अधिकांश कार्यान्वयनों में, केवल 4 संपादन कुंजी (वास्तव में वर्ण) भी इसके साथ विन्यास योग्य हैं stty:
- मिटा (
^Hया ^?आमतौर पर): पिछले चरित्र को मिटा दें
- मार (
^Uआमतौर पर): खाली (मार) लाइन अब तक दर्ज की गई
- वासेज़ (
^W): पिछले शब्द को मिटा दें
- lnext (
^V): अगला अक्षर अक्षरशः दर्ज करें (उपरोक्त सभी का विशेष अर्थ रद्द करें)
पुराने दिनों में, यह सोचा गया था कि टर्मिनल चालक लाइन संपादक को कट्टर क्षमताओं के साथ बढ़ाया जाएगा। इसीलिए आरंभिक गोले में से किसी में भी कमांड लाइन संपादन क्षमता नहीं है (आप catऊपर की तरह चलने पर शेल प्रॉम्प्ट पर समान पंक्ति संपादन क्षमता प्राप्त करेंगे )।
हालाँकि, ऐसा वास्तव में कभी नहीं हुआ, हो सकता है कि अलग-अलग टर्मिनलों में गड़बड़ी होने का कारण कुछ प्रमुख प्रेसों पर समान अक्षर न भेजना हो, जिससे यह स्पष्ट हो गया कि इसे कर्नेल स्पेस में लागू नहीं किया जाना चाहिए।
इसलिए कुछ खोलों ने टर्मिनल चालक के विहित मोड को छोड़ना शुरू कर दिया और अपने स्वयं के लाइन संपादक को लागू किया। उस समय, emacsऔर viपूरी तरह से अलग कुंजी बंधन और ऑपरेशन मोड के साथ सबसे लोकप्रिय दृश्य पाठ संपादक थे। में vi, आपके पास पाठ दर्ज करने के लिए एक मोड है, और संपादन के लिए एक है। में emacs, आप हमेशा टेक्स्ट मोड में प्रवेश करते हैं, लेकिन मुख्य संयोजनों को दबाकर संपादन किया जाता है (जैसे ^bचरित्र को पीछे की ओर ले जाना)।
अपने स्वयं के अलग-अलग कुंजी बंधन के साथ आने के समय गोले के लिए कोई मतलब नहीं था। इससे लोगों को एक अलग सीखने के लिए हताशा पैदा होती। हालाँकि, दूसरे के ऊपर एक ( emacsया vi) शैली चुनने से दूसरे संपादक के उपयोगकर्ताओं को अलग करने का एक निश्चित तरीका होता ।
Https://www.usenix.org/legacy/publications/library/proceedings/vhll/full_papers/korn.ksh.a के अनुसार :
बेल प्रयोगशालाओं में सॉफ्टवेयर डेवलपर्स द्वारा ksh की लोकप्रिय इनलाइन संपादन सुविधाएँ (vi और emacs मोड) बनाई गईं; पैट सुलिवन द्वारा vi लाइन संपादन मोड, और माइक Veach द्वारा emacs लाइन संपादन मोड। प्रत्येक ने स्वतंत्र रूप से इन विशेषताओं को जोड़ने के लिए बॉर्न शेल को संशोधित किया था, और दोनों ऐसे संगठनों में थे जो केवल ksh का उपयोग करना चाहते थे यदि ksh उनके संबंधित इनलाइन संपादक थे। मूल रूप से ksh में कमांड लाइन एडिटिंग जोड़ने के विचार को इस उम्मीद में खारिज कर दिया गया था कि लाइन एडिटिंग टर्मिनल ड्राइवर में चली जाएगी। हालांकि, जब यह स्पष्ट हो गया कि यह जल्द ही होने की संभावना नहीं थी, दोनों पंक्ति संपादन मोड को ksh में एकीकृत किया गया और वैकल्पिक बनाया गया ताकि वे उन प्रणालियों पर अक्षम हो सकें जो टर्मिनल इंटरफ़ेस के हिस्से के रूप में संपादन प्रदान करते हैं।
इसलिए इसके बजाय, उन्होंने दोनों के बीच चयन करने के लिए उपयोगकर्ताओं और दोनों के लिए एक इंटरफ़ेस लागू किया। ksh80 के दशक की शुरुआत में शायद सबसे पहले (पुन: उपयोग कोड जिसे अलग से vi मोड और बॉर्न शेल के लिए एक emacs मोड को जोड़ने के लिए अलग से लिखा गया था) उसके बाद) tcsh( tcshशुरुआत में केवल emacsकुंजी बंधन viथा , मोड बाद में जोड़ा गया था) और बाद में bashऔर zsh90 के दशक की शुरुआत में।
आप में दो मोड के बीच स्विच bash, zshया kshके साथ set -o viया set -o emacs, और साथ bindkey -eया bindkey -vमें tcshया zsh।
POSIX वास्तव में viमोड को निर्दिष्ट करता है न कि emacsमोड के लिए sh(कहानी है कि रिचर्ड स्टालमैन ने POSIX के लिए emacsमोड को निर्दिष्ट करने पर आपत्ति कीsh )।
के लिए डिफ़ॉल्ट मोड bash, ksh(pdksh, mksh, oksh) के सार्वजनिक डोमेन वेरिएंट , tcshऔर zshemacs मोड है (हालांकि zsh, इसके साथ , viअगर यह आपका $EDITORहै vi), जबकि एटी एंड टी में ksh, यह डंबल मोड है जब तक कि $EDITORया $VISUALइसका उल्लेख नहीं है viया emacs।
kshबाद gmacsमें गोस्लिंग के उपयोगकर्ताओं को समायोजित करने के लिए एक मोड जोड़ा गया emacsजो Ctrl+Tअलग तरह से संभाला ।
अब या एमएसीएस मोड ^Wमें हैंडलिंग संभवतः टर्मिनल लाइन संपादक में चरित्र को पूर्व निर्धारित करता है , इसलिए हम वास्तव में उन्हें इसके लिए दोषी नहीं ठहरा सकते हैं और "विदा ..." के बारे में मेरे बयान को भ्रामक के रूप में देखा जा सकता है। यह सिर्फ इतना है कि मुझे यह चिड़चिड़ा लगता है जब चीजें पसंद होती हैं , या जब आप टाइप करते हैं तो बाकी सब चीजों से अलग व्यवहार करते हैं । आप अंदाजा लगा सकते हैं कि जब आपको कुछ टाइप करना था तो कुछ एप्लिकेशन ने अपनी विंडो बंद करना शुरू कर दिया था, तो मैंने इसे और अधिक परेशान कर दिया ।emacstcshweraseemacstcshinfoCtrl-WCtrl-W