क्या ESC को वास्तविक पलायन कुंजी के रूप में व्यवहार करना संभव है?


3

इसलिए मैंने आखिरकार Emacs पर स्विच कर लिया है, इतना नहीं क्योंकि मैं अभी तक आश्वस्त हूं कि यह अपने आप में बेहतर संपादक है लेकिन क्योंकि इसमें निश्चित रूप से अधिक शक्तिशाली एक्सटेंशन हैं। मैं अभी भी विम-मोड का उपयोग कर रहा हूं , शायद यह मेरी समस्या का हिस्सा है ... लेकिन मैं वास्तव में मोड-एप्रोच को छोड़ने का इरादा नहीं करता हूं, इसलिए मैं शायद इसके साथ रहूंगा।

मैं काफी अच्छी तरह से साथ हो रहा हूं, लेकिन एक चीज जो मुझे वास्तव में अनावश्यक लगती है वह है escकुंजी का व्यवहार (जो मेरे पास है shift-lock)। मैं बहुत अधिक या कम "आतंक कुंजी" के रूप में इस पर भरोसा करने के लिए उपयोग किया जाता हूं, जो अच्छा नहीं हो सकता है, लेकिन मुझे लगता है कि मुझे आम तौर पर खुद कीस्ट्रोक्स के बारे में काफी कम देखभाल करने की अनुमति मिलती है, और इस तरह तेजी से।

मैं यह करना चाहता हूं कि मुझे किसी भी मिनीबफ़र या विशेष संपादन मोड से एक अच्छी तरह से परिभाषित सामान्य स्थिति में लाना होगा। शायद सबसे महत्वपूर्ण बात, मैं चाहूंगा कि यह असंबंधित कुछ भी न करे ,

  • अनुकरण करना meta। मेरे पास एक altकुंजी के लिए क्या है?
  • विंडो बंद करें मैं उस समय भी नहीं था।
  • कुछ प्रमुख अनुक्रम में अंतिम कुंजी के रूप में व्याख्या की जा रही है।
  • ...

क्या यह संभव है कि सभी को बंद कर दिया जाए और escएक वास्तविक पलायन कुंजी बनाई जाए ? विम-मोड ऐसा व्यवहार करता है जैसे मुझे कुछ स्थितियों में पसंद है, लेकिन विशेष रूप से जब अन्य प्लगइन्स शामिल होते हैं तो यह अक्सर टूट जाता है।

वैकल्पिक रूप से, क्या ऐसे विभिन्न विकल्प हैं जो मेरे प्रकार के वर्कफ़्लो के अनुरूप हो सकते हैं?


1
@ मेमिंग: मेरा मतलब यह नहीं है कि "एबॉर्ट की", मेरा मतलब यह नहीं है कि "वहाँ कि कुंजी" करीब हो, मेरा मतलब यह नहीं है कि "कुंजी को दबाएं"। मेरा मतलब है "मुझे जितना संभव हो उतना कम गंदगी के साथ यहां से बाहर निकालें"। बाहर जा रहा है मानक संपादन मोड, जहां सब कुछ बर्ताव करता है के रूप में मैं करने के लिए इस्तेमाल कर रहा हूँ। विम में , ईएससी मुझे हमेशा सामान्य मोड में लाने में काफी अच्छा काम करता है। Emacs में , यह अक्सर किसी अन्य तरीके से कुंजी की व्याख्या करने में विफल रहता है जिसकी मुझे उम्मीद नहीं है।
लेफ्टरेंबाउट

समझा। क्षमा करें, आपके प्रश्न को ठीक से नहीं समझा। अब मैं समझ गया।
मेमोरियल

Emacs में, Esc कुंजी "कुछ" करता है - इसलिए आपको यह तय करने की आवश्यकता है कि आप किन कार्यों और स्थितियों से चाहते हैं कि वे कुछ करना चाहते हैं, और इसे अन्य सभी स्थितियों के लिए अक्षम कर दें।
कानून

शायद आप ( C-gया ESC ESC ESCबाद के Emacs में ज्यादातर चीजों से बाहर निकलता है) के लिए अपने कैप्स लॉक कुंजी को रीमैप कर सकते हैं । लेकिन फिर आपको वी-स्टाइल सामान्य मोड के लिए कुछ और उपयोग करने की आवश्यकता होगी, जैसे C-c(यदि यह विम-मोड द्वारा समर्थित है)।
echristopherson

मैं (global-set-key (kbd "M-C-g") 'vim:activate-normal-mode)अपने .emacsसामान में डाल दिया और बहुत संतोषजनक ढंग से काम करता है, यद्यपि "बॉयलरप्लेट-ईश" C-g ESCसंयोजन का एक बहुत कुछ के साथ ।
१०:१३ बजे

जवाबों:


1

वह व्यवहार जिसके लिए आप देख रहे हैं, Emacs Lisp फ़ंक्शन में सन्निहित है keyboard-quit, डिफ़ॉल्ट रूप से C-g(Control-g) से बंधा हुआ है । इसका व्यवहार मोटे तौर पर समतुल्य है, Emacs के संदर्भ में, C-cएक शेल में सामान्य फ़ंक्शन के लिए ; यह जो भी लिस्प कोड चल रहा है उसे बाधित करेगा, और आपको शीर्ष स्तर पर वापस लाएगा। (विशेष रूप से, यदि आपको मिनीबफ़र में पाठ प्रविष्टि के लिए संकेत दिया जा रहा है और आप यह तय नहीं करना चाहते हैं कि यह जो कुछ भी है वह आपको सब के बाद संकेत दे रहा है, तो Cg यह है कि आप इसे कैसे रद्द करते हैं।)

डिफ़ॉल्ट रूप से एस्केप कुंजी का एक प्रेस, मेटा प्रीफिक्स कुंजी के रूप में कार्य करता है; अर्थात, एक कीबाइंडिंग जिसमें मेटा कुंजी (जैसे ) शामिल है M-x, execute-extended-commandवैसे ही काम करेगा जैसे अगर आप Alt-x दबाते हैं, या यदि आप एस्केप दबाते हैं, तो X - Emacs अंतर नहीं करते हैं। ट्रिपल-दबाने वाला एस्केप कुंजी चलेगा keyboard-escape-quit, जो keyboard-quitएक "अधिक का अर्थ है कि मैं क्या करता हूं" व्यवहार के साथ अधिक है, - कुछ ऐसा जो मुझे एमाक्स का उपयोग करने के कई वर्षों में कभी नहीं चाहिए था, और वास्तव में कुछ के बारे में पता नहीं था मिनट पहले, लेकिन आप इसे उपयोगी पा सकते हैं।

उन चीजों के बारे में बोलना, जो आपको उपयोगी लग सकती हैं: आप किसी भी Emacs फंक्शन पर फंक्शन के माध्यम से इनवॉइस प्राप्त कर सकते हैं describe-function, C-h f FUNCTION-NAME RETजो कि ( जैसे , प्रेस और रिलीज कंट्रोल-एच, प्रेस एफ, प्रॉम्प्ट पर एक फंक्शन नेम में टाइप करें, रिटर्न लौटाएं), या के रूप में M-x describe-function RET FUNCTION-NAME RET। चरों के लिए, यह वैसा ही है, सिवाय C-h vया इसके describe-variable, चर नाम; कीस्ट्रोक के लिए, यह C-h kया है describe-key, और आप उस कुंजी कॉर्ड को टाइप करते हैं जिसका बाइंडिंग आपको वर्णित है। ये तीन कार्य, C-h mवर्तमान बफ़र के प्रमुख और लघु मोड पर प्रलेखन को पुनः प्राप्त करने के लिए, एमएसीएस कैसे काम करता है और यह क्या कर सकता है, इसकी खोज में बहुत उपयोगी हैं, और मैं उत्साहपूर्वक आपको उन्हें डिग्री को कम करने के लिए सबसे अच्छा और तेज़ तरीका बताता हूं। Emacs विदेशी और डराने वाले लगते हैं।

अब, अंत में, अपने वास्तविक प्रश्न का उत्तर देने के लिए: Emacs की डिफ़ॉल्ट कुंजी मैपिंग को फिर से कॉन्फ़िगर करना संभव हो सकता है, जैसे कि यह एस्केप कुंजी और मेटा कुंजी को अलग करता है। हालाँकि, मैं वास्तव में आपको ऐसा करने की कोशिश नहीं करता, कुछ कारणों से।

सबसे पहले, जब मुझे यकीन है कि ऐसा करने का एक तरीका है, यह जरूरी अस्पष्ट और मुश्किल हो रहा है, और इसमें गैर-स्पष्ट तरीकों से गलत होने की बहुत संभावना होगी - ऐसा कुछ, जो एमएसीएस के लिए ठीक है जब आप संपादक को सीखने की कोशिश कर रहे हों, तो यह वास्तव में उचित नहीं है। इससे भी बदतर, अगर आप इसे भोले और स्पष्ट फैशन में करने की कोशिश करते हैं (जैसे M-: (global-set-key (kbd "ESC") 'keyboard-quit) RET), तो आप मेटा कुंजी व्यवहार को पूरी तरह से तोड़ देंगे। वास्तव में इसे सही तरीके से काम करने के लिए एमएसीएस के इनपुट इवेंट प्रोसेसिंग के निम्नतम स्तरों में उतरना होगा - एक हेडलैम्प पहनना, एक माचिस लाना और एक दोपहर का भोजन पैक करना। (शायद दो लंच।)

दूसरा, भले ही आप उस बंधन को मज़बूती से काम करते हुए प्राप्त कर सकते हैं, यह बहुत अधिक गैर-मानक है, जबकि आपके द्वारा उपयोग किए जाने वाले किसी भी Emacs, निश्चित रूप से C-gबाध्य होंगे keyboard-quit। विशेष रूप से संपादक को सीखते समय, यह डिफ़ॉल्ट रूप से कीबाइंडिंग के साथ परिचित होने के लिए सलाह दी जाती है, इसके बजाय एक फैशन में चीजों को रीबाइंड करने के बजाय जो केवल आपके स्वयं के एमएसीएस इनिट फाइलों के साथ काम करेगा। (यदि आप या तो यह गारंटी दे सकते हैं कि आप कभी भी कहीं भी Emacs का उपयोग अपने बॉक्स में नहीं करेंगे, या आप हमेशा अपनी Init फ़ाइलों को स्थापित करने में सक्षम होंगे, तो महान! जो Emacs के मानक पुस्तकालय का हिस्सा है, "डिफ़ॉल्ट" के रूप में गिना जाता है, क्योंकि आप इसे किसी भी ठीक से स्थापित Emacs के माध्यम से M-x vim-mode RETया इसी तरह से लागू कर सकते हैं ।)

tl; dr: आप शायद ईएससी के साथ ऐसा कर सकते हैं, लेकिन ऐसा करने के लिए भयानक हैकरी ले लेंगे, यह बिल्कुल संभव है, और आप उन सुविधाओं के लिए उपयोग होने से बेहतर हो रहे हैं, जिन्हें एमएसीएस आपके द्वारा वांछित व्यवहार को लागू करने के लिए प्रदान करता है। ।


आपके उत्तर के लिए धन्यवाद। मुझे आदत पड़ने लगी है C-g। दुर्भाग्य से, विम-मोड की आवश्यकता होती है कि मैं वास्तव ESCमें इसके नॉर्मल मोड में जाने के लिए प्रेस करूं, इसलिए मैं अब तीन कीस्ट्रोक्स खर्च करता हूं जब किसी को पर्याप्त होना चाहिए (और यदि मुझे आदेश गलत लगता है, तो एमएसीएस M-C-gपरिभाषित नहीं होने के बारे में शिकायत करता है और मैं इससे बाहर हूं। मेरा प्रवाह फिर से)। क्या आपके पास कोई विचार होगा जो अभी तक बेहतर हो सकता है?
17

@leftaroundabout आप M-C-gदोनों कार्यों को करने में सक्षम हो सकते हैं ; इसमें यह C-h k RET ESC RETदेखना शामिल होगा कि विम इंसर्ट मोड में ESC के लिए क्या बाध्य है (मान लें कि यह एक फ़ंक्शन कहलाता है vim-normal-mode, और फिर M-C-gउदाहरण के लिए बाइंडिंग है (lambda () (keyboard-quit) (vim-normal-mode))
हारून मिलर

3

आप इसका उपयोग अपनी Emacs init फाइल में कर सकते हैं:

;;; esc always quits
(define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit)
(global-set-key [escape] 'keyboard-quit)

लवली! अंतिम पंक्ति को (वैश्विक-सेट-कुंजी [भागने] 'कीबोर्ड-एस्केप-छोड़) के बदले, सही मायने में तीन-भागने वाले डैश के रूप में कार्य करने के लिए
ओले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.