<Esc> अक्षम करें लेकिन <C - [> रखें


24

मेरे द्वारा उपयोग किए जा रहे इन्सर्ट मोड से वापस स्विच करने के लिए <Esc>। अब मैं <C-[>इसके बजाय खुद को पीछे हटाना चाह रहा हूं <Esc>। इसके लिए मुझे <Esc>रीट्रेनिंग की मदद करने के लिए अक्षम करना होगा।

समस्या है

:inoremap <Esc> <Nop>

भी निष्क्रिय करता है <C-[>। विम के लिए वे एक ही बात लगती है।

क्या एक के बिना एक को निष्क्रिय करने का कोई तरीका है?


13
यह निर्भर करता है कि आप किस वातावरण में काम कर रहे हैं। अधिकांश पाठ टर्मिनलों आवेदन करने के लिए एक ही जानकारी भेजने के लिए जब आप प्रेस Escया C-[है, तो आप भाग्य से बाहर हैं, लेकिन आप विम का एक जीयूआई संस्करण के साथ या अपने टर्मिनल को फिर से कॉन्फ़िगर द्वारा कुछ करने के लिए सक्षम हो सकता है।
गिल्स एसओ- बुराई को रोकना

सही! कोई मुद्दा नहीं। मुझे कीबोर्ड मैपिंग के साथ वर्कअराउंड मिलेगा। धन्यवाद
mxlian

3
@Gilles तुम एक जवाब में क्यों नहीं डालते? यह Googlers और हमारी साइट आँकड़े के लिए बेहतर है।
रोबी WXYZ

2
@ सुपरस्क्रिप्ट मैंने इस पर थोड़ा और शोध किया है और एक उत्तर पोस्ट किया है।
गिलेस एसओ- बुराई को रोकें '

जवाबों:


35

पहला, थोड़ा इतिहास। पुराने दिनों में, जब आपने एक टर्मिनल पर कुछ पाठ टाइप किया , तो प्रत्येक कुंजी ने एक चरित्र को आवेदन में भेजा। चूंकि मशीनें जो टर्मिनल से अधिक शक्तिशाली बनने के लिए जुड़ी थीं, टर्मिनलों को एक नियंत्रण कुंजी पर मानकीकृत किया गया था , जो कुछ विशेष वर्णों को भेजते थे, जो मुद्रित नहीं होते थे लेकिन कुछ प्रकार के फ़ंक्शन होते थे। अंततः विजयी चरित्र सेट 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 भेजता है।

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