आप देखेंगे कि जब आप cat
एक टर्मिनल पर एक शेल प्रॉम्प्ट पर दौड़ते हैं , तो cat
स्टडआउट से लिखने के लिए माना जाता है कि यह स्टड से क्या पढ़ता है, और दबाएं a, आपको a
टर्मिनल ड्राइवर द्वारा एक गूँजती हुई पीठ दिखाई देती है , लेकिन cat
वह नहीं लिखता है a
(आप देखें केवल एक a
, टर्मिनल चालक द्वारा प्रतिध्वनित)।
हालाँकि, यदि आप टाइप करते हैं, तो आपको आउटपुट a Backspace b Enterनहीं दिखता है , लेकिन ( और newline)।cat
a\010b\015
b\012
b
ऐसा इसलिए है क्योंकि टर्मिनल ड्राइवर (हम कर्नेल में सॉफ़्टवेयर की बात कर रहे हैं, टर्मिनल एमुलेटर में नहीं xterm
) जैसे कि कैनोनिकल मोड में एक बहुत ही बुनियादी लाइन संपादक को लागू करता है। टर्मिनल ड्राइवर को कमांड का उपयोग करते समय सिस्टम कॉल का उपयोग करके कॉन्फ़िगर किया जा सकता है । उदाहरण के लिए, विहित मोड को छोड़ने के लिए, आप कर सकते हैं । यदि तुम करो:ioctl()
stty
stty -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 में एकीकृत किया गया और वैकल्पिक बनाया गया ताकि वे उन प्रणालियों पर अक्षम हो सकें जो टर्मिनल इंटरफ़ेस के हिस्से के रूप में संपादन प्रदान करते हैं।
इसलिए इसके बजाय, उन्होंने दोनों के बीच चयन करने के लिए उपयोगकर्ताओं और दोनों के लिए एक इंटरफ़ेस लागू किया। ksh
80 के दशक की शुरुआत में शायद सबसे पहले (पुन: उपयोग कोड जिसे अलग से vi मोड और बॉर्न शेल के लिए एक emacs मोड को जोड़ने के लिए अलग से लिखा गया था) उसके बाद) tcsh
( tcsh
शुरुआत में केवल emacs
कुंजी बंधन vi
था , मोड बाद में जोड़ा गया था) और बाद में bash
और zsh
90 के दशक की शुरुआत में।
आप में दो मोड के बीच स्विच 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
और zsh
emacs मोड है (हालांकि zsh
, इसके साथ , vi
अगर यह आपका $EDITOR
है vi
), जबकि एटी एंड टी में ksh
, यह डंबल मोड है जब तक कि $EDITOR
या $VISUAL
इसका उल्लेख नहीं है vi
या emacs
।
ksh
बाद gmacs
में गोस्लिंग के उपयोगकर्ताओं को समायोजित करने के लिए एक मोड जोड़ा गया emacs
जो Ctrl+Tअलग तरह से संभाला ।
अब या एमएसीएस मोड ^W
में हैंडलिंग संभवतः टर्मिनल लाइन संपादक में चरित्र को पूर्व निर्धारित करता है , इसलिए हम वास्तव में उन्हें इसके लिए दोषी नहीं ठहरा सकते हैं और "विदा ..." के बारे में मेरे बयान को भ्रामक के रूप में देखा जा सकता है। यह सिर्फ इतना है कि मुझे यह चिड़चिड़ा लगता है जब चीजें पसंद होती हैं , या जब आप टाइप करते हैं तो बाकी सब चीजों से अलग व्यवहार करते हैं । आप अंदाजा लगा सकते हैं कि जब आपको कुछ टाइप करना था तो कुछ एप्लिकेशन ने अपनी विंडो बंद करना शुरू कर दिया था, तो मैंने इसे और अधिक परेशान कर दिया ।emacs
tcsh
werase
emacs
tcsh
info
Ctrl-WCtrl-W