पहला, थोड़ा इतिहास। पुराने दिनों में, जब आपने एक टर्मिनल पर कुछ पाठ टाइप किया , तो प्रत्येक कुंजी ने एक चरित्र को आवेदन में भेजा। चूंकि मशीनें जो टर्मिनल से अधिक शक्तिशाली बनने के लिए जुड़ी थीं, टर्मिनलों को एक नियंत्रण कुंजी पर मानकीकृत किया गया था , जो कुछ विशेष वर्णों को भेजते थे, जो मुद्रित नहीं होते थे लेकिन कुछ प्रकार के फ़ंक्शन होते थे। अंततः विजयी चरित्र सेट ASCII था , जिसमें 128 वर्ण थे जिनमें से 32 नियंत्रण वर्ण हैं। Ctrl10xxxxx binary (बाइनरी नोटेशन) लिखे एक पत्र या अन्य प्रतीक के साथ एक साथ दबाने पर नियंत्रण वर्ण भेजा जाता है जिसका कोड 00xxxxx sends है, उदा Ctrl+ [वर्ण संख्या 27₁₀ = 0011011₂ भेजता है क्योंकि [
91₁₀ = 1011011₂ है।
टर्मिनलों पर कुछ फ़ंक्शन कुंजियों ने नियंत्रण वर्ण भेजे:
- Backspace=
Ctrl-H
(बीएस = बैकस्पेस) Space
- Tab=
Ctrl-I
(HT = क्षैतिज टैब)
- Linefeed=
Ctrl-J
(LF = लाइन फीड) (कुछ टर्मिनलों में कभी यह कुंजी होती थी)
- Returnया Enter=
Ctrl-M
(सीआर = कैरिज रिटर्न)
- Escape=
Ctrl-[
(ESC = एस्केप)
जब टर्मिनलों में अधिक फ़ंक्शन कुंजियाँ थीं, तो उन सभी का प्रतिनिधित्व करने के लिए पर्याप्त नियंत्रण वर्ण नहीं थे। तो वे भेजा दृश्यों चरित्र की, और सार्वभौमिक परंपरा है कि इन चरित्र दृश्यों, एस्केप वर्ण के साथ शुरू है Ctrl-[
।
जैसे-जैसे समय बीतता गया, हार्डवेयर टर्मिनल दुर्लभ और दुर्लभ होते गए; आजकल कीबोर्ड और एप्लिकेशन के बीच अनुवाद के कई स्तर हैं । उपलब्ध वर्णों की संख्या में सीमा और कुछ प्रमुख संयोजनों और कुछ नियंत्रण वर्णों के बीच कठिन-कोडित पत्राचार अब प्रासंगिक नहीं है। हालांकि, एप्लिकेशन मौजूदा टर्मिनलों के साथ संगत बने हुए हैं, और टर्मिनल मौजूदा अनुप्रयोगों के साथ संगत बने हुए हैं, जिससे कुछ भी बदलना मुश्किल हो गया है।
इसलिए आज भी, यूनिक्स जैसी प्रणालियों पर, टर्मिनल एमुलेटर में चलने वाले एप्लिकेशन को चरित्र प्राप्त होता है Ctrl-I
जब उपयोगकर्ता Tabकुंजी दबाता है , चरित्र Ctrl-[
जब उपयोगकर्ता दबाता है Esc, आदि। यदि विम एक यूनिक्स टर्मिनल में चल रहा है, तो यह बीच अंतर नहीं कर सकता है। <Esc>
और <Ctrl-[>
क्योंकि टर्मिनल एक ही जानकारी भेजता है।
अन्य वातावरण में चल रहे विम में यह सीमा नहीं है, इसलिए सिद्धांत रूप में उनके लिए अलग-अलग जानकारी भेजना संभव होगा। यह देखते हुए कि विम कई स्थानों Ctrl-[
पर प्रतिनिधित्व करने के लिए चरित्र का उपयोग करता है <Esc>
, यह बदलते हुए कि अव्यवहारिक होगा; इसके बजाय Ctrl+ [एक अलग इनपुट ईवेंट भेजने के लिए बनाया जा सकता है।
मुझे लगता है कि दोनों के बीच अंतर करती है विम खुद के किसी भी संस्करण के बारे में पता नहीं कर रहा हूँ Escऔर Ctrl+ [(लेकिन यह है कि मैं कभी भी किसी भी इस्तेमाल किया था नहीं है)। Gvim, एक के लिए, एक उद्यान विविधता टर्मिनल का अनुकरण करता है ।
विडंबना यह है कि आपका सबसे अच्छा शर्त एक टर्मिनल एमुलेटर में चल रहा विम हो सकता है। कुछ टर्मिनल एमुलेटर आपको चाबियों और कीचर्स द्वारा भेजे गए भागने के क्रम को अनुकूलित करने की अनुमति देते हैं। तो आप might ( ) वर्ण नहीं भेजने के लिए Ctrl+ की व्यवस्था कर सकते हैं , लेकिन कुछ बच निकलने का क्रम। Xterm, यूनिक्स जैसी प्रणालियों के लिए "संदर्भ" टर्मिनल एमुलेटर, ऐसी दो योजनाओं का समर्थन करता है। उदाहरण के लिए:[Ctrl-[
- Escभेजता है
␛
और Tabभेजता है ␉
, सभी कॉन्फ़िगरेशन में।
?.VT100.modifyOtherKeys: 0
(डिफ़ॉल्ट के साथ ) या ?.VT100.modifyOtherKeys: 1
, Ctrl+ [भेजता है ␛
और Ctrl+ Iभेजता है ␉
। ?.VT100.modifyOtherKeys: 1
केवल मेटा संयोजनों और नियंत्रण संयोजनों को प्रभावित करता है जिसमें ASCII वर्ण का अभाव होता है।
- साथ
?.VT100.modifyOtherKeys: 2
और ?.VT100.formatOtherKeys: 0
(डिफ़ॉल्ट), Ctrl+ [भेजता है ␛[27;5;91~
और Ctrl+ Iभेजता है ␛[27;5;105~
।
- साथ
?.VT100.modifyOtherKeys: 2
और ?.VT100.formatOtherKeys: 1
, Ctrl+ [भेजता है ␛[91;5u
और Ctrl+ Iभेजता है ␛[105;5u
।
Xterm (और दो योजनाओं के बीच चयन करने के लिए) शुरू करते समय modifyOtherKeys
संसाधन सेट करके समर्थन को चालू किया जा सकता है formatOtherKeys
, या इसे एप्लिकेशन द्वारा गतिशील रूप से चालू और बंद किया जा सकता है।
विम का कोई अंतर्निहित समर्थन नहीं है जो मुझे पता है। आप इन एस्केप सीक्वेंस के लिए अपनी खुद की बाइंडिंग लिख सकते हैं। यह संभव है कि विम को modifyOtherKeys
संशोधित टर्मिनल परिभाषा खिलाकर मोड में टर्मिनल को स्वचालित रूप से सेट किया जाए, लेकिन ऐसा करना इस उत्तर के दायरे से बाहर है।
नेओविम में किसी एक वेरिएंट के लिए बिल्ट-इन सपोर्ट है । जहां तक मैं समझता हूं, अगर टर्मिनल इसका समर्थन करता है, तो यह समर्थन को स्विच नहीं करता है, ऐसा उपयोगकर्ता को करना है।
¹ तेजी से और सबसे अधिक आजकल, Backspaceचरित्र 127 भेजता है।
Esc
याC-[
है, तो आप भाग्य से बाहर हैं, लेकिन आप विम का एक जीयूआई संस्करण के साथ या अपने टर्मिनल को फिर से कॉन्फ़िगर द्वारा कुछ करने के लिए सक्षम हो सकता है।