एस्केप के अलावा इन्सर्ट मोड से बाहर निकलने के अन्य तरीके


74

एमएसीएस पर विम को पसंद करने का प्राथमिक कारण यह है कि होम रो से दूर मेरा हाथ का मूवमेंट बहुत कम है (प्रोग्रामर के रूप में भी)। हालांकि, एक मुख्य समय जो मैं ऐसा करता हूं वह एस्केप को दबाकर इन्सर्ट मोड छोड़ रहा है।

मुझे हाल ही में पता चला कि मैं इन्सर्ट मोड को छोड़ने के लिए भी Ctrl + C का उपयोग कर सकता हूँ। हालाँकि, यह वास्तव में एक सुधार नहीं है।

मैं अपने हाथों को घर की पंक्ति से बाहर किए बिना सम्मिलित मोड से कैसे बाहर निकल सकता हूं, और बड़े पैमाने पर प्रभावित किए बिना कि मेरे पास टाइप करने की क्षमता क्या है? नोट: मैं एक dvorak कीबोर्ड लेआउट के साथ ज्यादातर वेनिला विम का उपयोग करता हूं, हालांकि मैं एक qwerty लेआउट के लिए समाधान भी सुनना पसंद करूंगा।


1
आप कहीं भी किसी भी महत्वपूर्ण संयोजन को मैप कर सकते हैं, और आप कुछ और नहीं कर सकते। क्या यही मतलब है तुम्हारा?
यो '

3
Ctrl + c शॉर्टकट THX सीखे!
फिलिप गाचौड

कैपिंग लॉक के बारे में Esc के रूप में कैसे?
कोलब कैन्यन

@PhillippeGachaud: Esc के प्रतिस्थापन के रूप में Ctrl-C का उपयोग न करें। Ctrl-C एस्केप के समान नहीं है, यह एक मजबूर एस्केप है और कुछ परिस्थितियों में अलग तरह से व्यवहार कर सकता है।
रेयान

जवाबों:


60

यदि आप होम रो पोजिशनिंग का उपयोग करते हैं तो एक सामान्य बाइंडिंग जो आप देखेंगे , वह है jj , क्योंकि यह QWERTY लेआउट के लिए अच्छी तरह से काम करता है।

inoremap jj <ESC>

उस मामले में, एक शाब्दिक टाइप करने के लिए jj- आपको दूसरे वर्ण को टाइप करने के बीच 1 सेकंड (डिफ़ॉल्ट रूप से) की प्रतीक्षा करनी चाहिए। ( :help 'timeout'विवरण के लिए देखें)

वहाँ भी है c-oजो आपको सम्मिलित करने से बाहर ले जाएगा, जिससे आप एक सामान्य कमांड कर सकते हैं, और फिर आपको सही वापस डालने में डाल देंगे।

http://vim.wikia.com/wiki/Avoid_the_escape_key


1
ड्वोरक में, jहै cकुंजी। तो यह बहुत बुरा नहीं होगा (टाइप करने के लिए cc)। मैं बाँध भी सकता था hh(qwerty jkey = dvorak h), जो मुझे टाइप shhhhhhhकर रहा होता अगर मैं टाइप करता या कुछ और।
डुर्रोन 597

7
cc कम से कम अंग्रेजी में एक बहुत अधिक सामान्य दो अक्षर कुंजी संयोजन है। तो यह सबसे अच्छा विकल्प नहीं हो सकता है
निक जे एडम्स

4
नकल के बारे में कैसे jk? दो कुंजी खोजें जो कि Dvorak में आसन्न हैं, लेकिन आपकी पसंदीदा भाषा में आम संयोजन नहीं हैं। tn, उदाहरण के लिए, स्थिति के समकक्ष है jk
डेविड लॉर्ड

1
मैं थोड़े है की तरह jk/ kjड्वोरक में भी बाहर निकलने के सामान्य मोड; वे QWERTY कीबोर्ड पर "c" और "v" कुंजी हैं, इसलिए वे मेरे बाएं पॉइंटर और मध्य उंगलियों के लिए आसान हैं।
अलक्षेंद्र

2
मुझे लगता है कि हम और भी बेहतर कर सकते हैं - iiइसके बजाय उपयोग करें । हां, आपको अपनी उंगलियों को होम रो से स्थानांतरित करना होगा लेकिन यह अभी भी आरामदायक है। और इससे भी महत्वपूर्ण बात, आप अपनी उंगली को हिलाए बिना मोड के बीच आगे और पीछे स्विच कर सकते हैं।
श्रीधर सरनोबत

38

अंतर्निहित विकल्पों के अलावा <C-[>और दूसरों द्वारा उद्धृत कुंजी के <C-c>लिए <Esc>, एक अन्य लोकप्रिय समाधान <CapsLock>अतिरिक्त एस्केप के रूप में रीमैप करना है । यह एक Qwerty और Dvorak कीबोर्ड दोनों पर है।

इस तरह से आप Esc को बहुत ही आसानी से बाईं छोटी उंगली के साथ दबा सकते हैं, होमरॉ से हाथ हटाए बिना (संयोगवश, कैप्सलॉक वह जगह है जहां वी का आविष्कार होने पर कीबोर्ड पर उपयोग किया जाता था)।

रीमैपिंग की जा सकती है:

  • AutoHotKey उपयोगिता का उपयोग करके विंडोज पर ;
  • मैक पर KeyRemap4MacBook उपयोगिता और अन्य का उपयोग कर ;
  • लिनक्स पर, डेस्कटॉप पर्यावरण के अनुसार बदलता रहता है। उदाहरण के लिए, लिनक्स टकसाल / दालचीनी मेनू-> कीबोर्ड-> कीबोर्ड लेआउट-> लॉक लॉक व्यवहार में उचित विकल्प का चयन करने की बात है। वैकल्पिक रूप से, लेकिन कम आसानी से, इसे एक्समॉडमैप प्रोग्राम का उपयोग करके Xorg स्तर पर रीमैप किया जा सकता है और इसके बाद निम्न .Xmodmapफ़ाइल चल सकती है:

    clear Lock
    keycode 0x42 = Escape
    

    सिस्टम को स्वतः लॉग-इन की गई फ़ाइलों की श्रृंखला में रणनीतिक रूप से निम्न शेल स्क्रिप्ट लाइन ( .Xmodmapअपने होम डाइर पर है ~) को दबाकर इसे हर लॉगिन पर स्वचालित रूप से चलाने के लिए सेटअप किया जा सकता है :

    if [ -s ~/.Xmodmap ]; then
      xmodmap ~/.Xmodmap
    fi
    

    हालांकि यह मुश्किल है, क्योंकि वास्तव में खट्टा फाइलें उपयोग किए गए (डेस्कटॉप) वातावरण के अनुसार भिन्न होती हैं। उदाहरण के लिए, मेरे पास सिनेमोन "स्टार्टअप एप्लिकेशन" में एक प्रविष्टि के रूप में xmodmap है (जो मुझे मानक GUI कुंजी रीमैपिंग अनुकूलन से अधिक करने की अनुमति देता है)।

कुछ लोग आगे भी जाते हैं और व्यवहार करने के लिए CapsLock कुंजी को प्रोग्राम करते हैं:

  • Ctrlकुंजी के रूप में इसे दबाकर रखें,
  • एक Escकुंजी के रूप में दबाकर और जल्दी से इसे जारी करना।

यह ठीक से स्थापित करने / इसी remap उपयोगिता प्रोग्रामिंग द्वारा विंडोज और मैक पर किया जा सकता (विशेष रूप से AutoHotkey संकेत के लिए पाया जा सकता है यहाँ और KeyRemap4MacBook के लिए जाँच यहाँ )। लिनक्स पर प्रोग्राम xcape का उपयोग करते हुए


2
पूरी तरह से सहमत। होम रो पर ctrl कुंजी होने से बहुत अधिक प्रयोज्यता में सुधार होता है (ctrl + n के साथ पूर्णता के माध्यम से स्क्रॉल करना, ctrl + f / ctrl + b के साथ फ़ाइल के माध्यम से स्क्रॉल करना, ctrl + के साथ भागना आदि) इन सभी प्रमुख कॉम्बो को प्रदर्शन करना आसान होता है। इस तरह।
जॉन ओएम। 20

1
छोटी उंगली घुमाए बिनाCtrl कुंजी (नियमित स्थिति में) दबाने के बारे में : आप इसे हाथ की बाहरी हथेली से दबा सकते हैं, क्योंकि यह यहाँ अच्छी तरह से वर्णित है (मुझे यह अच्छी चतुर चाल नेट पर मिली, इसे देने का समय वापस :) और कुदोस जिन्होंने इसका आविष्कार किया था)
जियोवानी मैगीरियानी

FWIW KeyRemap4MacBook का नाम बदलकर Karabiner
alxndr

मैंने इस समाधान की कोशिश की, लेकिन पाया कि मैंने कुछ समय शिफ्ट को दबाते हुए दुर्घटना से कैप्स लॉक मारा, जो कि कष्टप्रद था। तो आपका माइलेज इस बात पर निर्भर करता है कि आपकी बाईं पिंकी कितनी फुर्तीली है। :)
गॉडस्मिथ

2
यदि आप ( ) और इसके विपरीत रीमैप Ctrlकरते हैं, तो वास्तव में चमकता है। पिंकी कमजोर है, अंगूठा मजबूत है। QWERTY पर आपको इसके लिए होम रो को छोड़ने की आवश्यकता नहीं है, ड्वोरक पर यह इतना अच्छा नहीं है, लेकिन स्वीकार्य है। AltCmd <C-[>
नैश ब्रिजेस

28

मेरे द्वारा उपयोग किए जाने वाले मैपिंग हैं:

inoremap jk <esc>
inoremap kj <esc>

इस तरह, आप बस उसी समय jऔर हिट कर सकते हैं k, बिना इस बात की परवाह किए कि आप पहले किस पर दबाव डालते हैं।


70
लेकिन मैं एक किताब लिख रहा हूँ, जिसमें ईड्सगर दिज्क्स्त्र को रेकजाविक में डांडा खेलने के बारे में बताया गया है! ;)
डुर्रोन 597 15

यदि आप किसी भी डच लिखना चाहते हैं तो दोनों भयानक हैं।
हेलके वालिंगा

12

<C-[>और <C-c>दो मूल विकल्प हैं <Esc>

देखें :help i_<esc>और :help i_ctrl-cजो के बीच का अंतर बताते हैं <C-c>और <Esc>


फिर, ये सुधार नहीं हैं, क्योंकि Ctrl होम पंक्ति से केवल उतना ही दूर है जितना कि एस्केप है।
डुर्रोन 597

4
@ durron597 QWERTY कीबोर्ड पर, Ctrl होम पंक्ति से केवल दूर हो सकता है, लेकिन इसमें एक महत्वपूर्ण अंतर है: यह होम रो के नीचे है। आपको इसे दबाने के लिए केवल अपनी उंगली हिलानी होगी, जबकि Esc के साथ आपको अपना पूरा हाथ कुछ और घुमाना होगा। इसके अलावा, <C-[>इसमें एक अच्छी समरूपता है (दोनों छोटी उंगलियां विपरीत दिशाओं में चलती हैं)।
wchargin


2
माना। के अभ्यस्त उपयोग <C-c>आसानी से प्लग इन और autocmds तोड़ सकते हैं।
डेविड लॉर्ड

मेरी मशीन पर, यह <C - [> काम करता है, लेकिन इसे <cc>
अलेक्जेंडर मिल्स से

4

आप मैप कर सकते हैं Caps Lockकरने के लिए Control किसी भी बाहरी प्रोग्राम का उपयोग किए बिना :

  • में मैक ओएस एक्स यात्रा > संशोधक कुंजियां - सिस्टम प्राथमिकताएं> कीबोर्ड
  • में लिनक्स निष्पादित करें:setxkbmap -option caps:ctrl_modifier
  • में विंडोज अपनी रजिस्ट्री को संपादित करें।

यह Controlहोम रो पर लाता है , जिससे सभी कंट्रोल संशोधित स्ट्रोक को प्रेस करना आसान हो जाता है , जिसमें शामिल हैं Ctrl-[और Ctrl-Cजो विम में सम्मिलित मोड से बाहर निकलते हैं।

वैकल्पिक रूप से, उनके जवाब के नीचे जियोवन्नी Caps Lockदोनों को प्रदर्शन करने के लिए Control और Escape प्रेस की लंबाई के आधार पर मैप करने का सुझाव देता है , लेकिन इसके लिए अतिरिक्त सॉफ़्टवेयर की आवश्यकता होती है।

Ctrl-[है पसंदीदा विकल्प है, क्योंकि यह हमेशा की तरह काम करता Escape

एक उल्लेखनीय अंतर के साथ Ctrl-Cयह है कि जब एक संपादन छोड़ने है blockwise दृश्य मोड में , Ctrl-Cपरिवर्तन वर्तमान लाइन पर बना रहेगा, लेकिन परिवर्तन को दोहराना नहीं होगा ब्लॉक है, जो कि मोड की बात है में अन्य लाइनों पर।

यह संक्षिप्तीकरण के लिए जाँच नहीं करेगा, या InsertLveve इवेंट को ट्रिगर करेगा। देख:help i_CTRL-C


4

मैं अपने प्लगइन vim-easyescape का उपयोग करने का सुझाव दूंगा

Plug "zhou13/vim-easyescape"
let g:easyescape_chars = { "j": 1, "k": 1 }
let g:easyescape_timeout = 100
cnoremap jk <ESC>
cnoremap kj <ESC>

एक सरल मानचित्र अनुक्रम के साथ समस्या यह inoremap jj <ESC>है कि जब भी आप टाइप करें jया kइन्सर्ट मोड में विम विराम देगा (यह मैपिंग लागू करने के लिए निर्धारित करने के लिए अगली कुंजी की प्रतीक्षा कर रहा है)। ठहराव दृश्य विकर्षण का कारण बनता है जिसे आप नोटिस कर सकते हैं या नहीं। vim-easyescape को ऐसी समस्या नहीं है और यह कस्टम टाइमआउट का समर्थन करता है।


3

टर्मिनल vi और Vim में, alt+ single-normal-mode-keyअधिकांश टर्मिनलों में त्वरित संपादन के लिए काम करेगा।

यह काम करता है क्योंकि अधिकांश टर्मिनल भागने वाले चरित्र के रूप में ऑल्ट संशोधक भेजते हैं। उदाहरण के लिए, जब आप alt+kटर्मिनल एमुलेटर टाइप करते हैं तो रनिंग प्रोग्राम में दो कैरेक्टर भेजते हैं: esc, k। Vi और Vim इसकी व्याख्या करते हैं जैसा कि आप उम्मीद करेंगे; यह सम्मिलित मोड (भागने के कारण) को छोड़ देता है और सामान्य मोड कमांड को निष्पादित करता है (उदाहरण में, कर्सर को एक पंक्ति ऊपर ले जाना)।

यह सम्मिलित मोड से बाहर निकलने का एक सुविधाजनक तरीका हो सकता है यदि आपके कीबोर्ड में स्पेस बार के बगल में पूरी कुंजी है (ताकि इसे अंगूठे से दबाया जा सके, अपनी उंगलियों को होम रो पर छोड़ दें), इसलिए जब तक आप टर्मिनल एमुलेटर का उपयोग कर रहे हैं इस व्यवहार के साथ और सामान्य मोड कमांड चलाने में कोई आपत्ति नहीं है।


2
क्या आप विस्तार से बता सकते हैं कि क्या है single-normal-mode-key? आपका मतलब पलायन है?
kenorb

एक सामान्य कुंजी प्रेस जिसे आप सामान्य मोड में उपयोग करेंगे, का उपयोग मुख्य मोड में आवेषण कुंजी के साथ किया जा सकता है। उदाहरण के लिए किसी वर्ण को हटाने के लिए Alt + x।
ewatt

2
मैं इस उत्तर को काफी नहीं समझता; Alt + x वास्तव में सामान्य मोड में Alt की तुलना में कुछ अलग करने के लिए लगता है? और कुछ अन्य चाबियाँ काम नहीं लगती हैं? लेकिन शायद मैं इसे गलत उपयोग कर रहा हूँ ..? हो सकता है कि आप अपने उत्तर पर थोड़ा विस्तार से बता सकें कि यह कैसे काम करता है, और कुछ विम डॉक्स का लिंक भी अच्छा होगा :-) धन्यवाद! :-)
मार्टिन टूरनोइज

यह वास्तव में आपके टर्मिनल कॉन्फ़िगरेशन पर निर्भर करता है और आम तौर पर सेट नहीं होता है जैसा कि आप सुझाव देते हैं।
क्रिश्चियन ब्रेबांट

1
मैंने इसे उकेरा, फिर इतिहास की जाँच की और महसूस किया कि किसी कारणवश एक मॉडरेटर ने इसे पतली हवा से 99% पाठ जोड़ने के लिए संपादित किया था, बजाय इसके कि हम बाकी लोगों की तरह एक टिप्पणी छोड़ दें। इसलिए मुझे अपना वोट उल्टा करना पड़ा। निश्चित रूप से यहां जो हुआ वह समझदार संपादन के दायरे से बाहर है? मैंने अब तक कम विघटनकारी संपादन अस्वीकार किए हैं। नई सामग्री बढ़िया है, निश्चित है, लेकिन इस उत्तर में नहीं है। यह अपना होना चाहिए था।
अंडरस्कोर_ड

3

FWIW मैं का उपयोग करें:

:map! ;l ^[
:vmap ;l ^[

यह रिटर्न को हिट करने के समान है। मैं ;अन्य इन्सर्ट-मोड मैपिंग के लिए लीडर के रूप में भी उपयोग करता हूँ ।

टाइप करने के लिए आवश्यक समय ';) + अक्षर जब कोड गोल्फिंग है; मैंने अन्यथा कोई संघर्ष नहीं किया है।


शायद मानचित्रण से बचने के लिए इसे मैप करना बेहतर होगा ^ [सही? :)
अलेक्जेंडर मिल्स

2

मैं काफी समय से Ctrl+ का उपयोग कर 3रहा हूं, मुझे अधिकांश विकल्पों की तुलना में टाइप करना आसान लगता है और लगता है कि यह अच्छी तरह से (कम से कम लिनक्स पर) काम करेगा। मेरे Caps Lockलिए मैप किया गया है Ctrl, इसलिए इसे टाइप करना बहुत कम्फर्टेबल है।

मैंने कुछ समय के लिए Ctrl+ का उपयोग करने की कोशिश की c, लेकिन मेरे पास इसके साथ कुछ मुद्दे थे जो मुझे अब बिल्कुल याद नहीं हैं, लेकिन मुझे ठीक वैसा ही व्यवहार नहीं मिल रहा था Esc, जैसे मुझे अब Ctrl+ के साथ मिलता है 3


2
Ctrl-3 वास्तव में क्या करने वाला है?
क्रिश्चियन ब्रेबेंड

मुझे नहीं पता कि यह कैसे काम करता है, लेकिन यह Escवैनिला विम की तरह काम करता है । मैंने इसे संयोजनों का परीक्षण करके अनुभवजन्य पाया, इस बारे में विवरण नहीं जानते कि इंटर्न कैसे काम करते हैं।
एलियास

1
यह एक vi चीज नहीं है, शेल पर भी काम करता है। बहुत उपयोगी है अगर आपके पास vi मोड है जो आपके शेल पर bindkey -v
golfadas

1

यदि आपके पास एक यूएस इंग्लिश कीबोर्ड है, तो दबाने Ctrl- [दबाने के लिए बराबर है Esc। यह इन्सर्ट मोड से बाहर निकलने का एक आसान तरीका प्रदान करता है। वैकल्पिक रूप से उपयोग Ctrl- c

यदि आपने आसान मोड ( -y) में विम किया है , तो आप सम्मिलित मोड से बाहर निकलने के लिए Ctrl- l(नियंत्रण-एल) दबाएं ।

वहाँ भी है Ctrl+ oजो केवल अस्थायी बाहर निकलने डालने मोड सिर्फ एक आदेश निष्पादित और वापस लौटने मोड डालने के लिए करने के लिए होगा (देखें: :help i_CTRL-O)

या Ctrl+ r, लेकिन यह केवल रजिस्टर या अभिव्यक्ति, जैसे की सामग्री डालने के लिए है Ctrl+ r, =5*5(देखें: :help i_CTRL-R, :help c_CTRL-Rऔर stackoverflow पोस्ट )।

और पढ़ें: विम विकिया में भागने की कुंजी से बचें


3
FYI करें: Ctrl+rरजिस्ट्रियां सम्मिलित करने के लिए है (अभिव्यक्ति =reg सहित )। यदि आप अस्थायी रूप से एक बंद कमांड उपयोग को निष्पादित करना चाहते हैं Ctrl+o
सुकीमा

1

मैंने <A-e>पलायन के लिए समझौता किया है:

noremap  <A-e> <Esc>
snoremap <A-e> <Esc>
inoremap <A-e> <Esc>
tnoremap <A-e> <Esc>

" For some reason in command line mode '\e' is interpreted as Enter.
cnoremap <A-e> <C-c>

संपादित करें: बस उसी के बारे में पाया गया <C-\><C\n>जो आपको किसी अन्य मोड से सामान्य मोड में भेजता है। इसका समग्र व्यवहार भी बेहतर है। मैपिंग बन जाते हैं:

noremap <A-e> <C-\><C-n>
noremap! <A-e> <C-\><C-n>

0
nnoremap <C-I> <C-I>
vnoremap <Tab> <Esc>gV
onoremap <Tab> <Esc>
inoremap <Tab> <Esc>`^

मैं बाहर निकलने के लिए टैब को रीमैप करता हूं। मुझे लगता है कि ऐतिहासिक रूप से यही वह जगह है जहां esc कुंजी हुआ करती थी, इसलिए मैंने इसका इस्तेमाल किया और कभी पीछे मुड़कर नहीं देखा। मुझे शायद ही कभी किसी दस्तावेज़ में टैब में डालने की ज़रूरत होती है, और जब मैं करता हूं तो मैं सिर्फ शिफ्ट + टैब दबाता हूं। मैंने मूल टैब बाइंडिंग को कभी याद नहीं किया।


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