2013-03-21 6 views
28

विम में, जब दृश्य मोड में, मुझे Esc को दो बार बाहर निकलने और चयन को बंद करने के लिए प्रेस करना होगा। एसी की एक प्रेस के बाद मुझे चयन बंद करने के लिए 2 सेकंड का इंतजार करना होगा।विलंब के बिना दृश्य मोड से बाहर निकलें

एएससी टाइप करते समय तुरंत दृश्य मोड से बाहर निकलने के लिए मैं क्या कर सकता हूं?

+2

क्या आपके पास ईएससी कुंजी के साथ कोई मैपिंग है? – Kent

उत्तर

37

निष्पादित निम्न आदेश मुझे मदद की

set timeoutlen=1000 ttimeoutlen=0 

देखें: http://www.johnhawthorn.com/2012/09/vi-escape-delays/

+10

मुझे आश्चर्य है कि किसी ने इस जवाब को क्यों कम किया है, क्योंकि यह ठीक काम करता है। मुझे संदर्भ पर tmux के लिए सेटिंग उपयोगी मिली: 'set -sg escape-time 0' – mMontu

+0

@mMontu Omg धन्यवाद, मैं यह जानकर पागल हो रहा था कि सेटिंग का उपयोग क्यों नहीं किया जा रहा था, मुझे नहीं पता था टीएमयूक्स की अपनी अलग सेटिंग थी! –

+0

मेरे लिए यह tmux का उपयोग करते समय खुद को प्रकट करना प्रतीत होता था। एमएमंटू टिप्पणी ने मुझे लिंक पर इंगित किया, जिसने चमत्कार किया – Paul

5

एक त्वरित समाधान का <C-c> बजाय उपयोग कर रहा है, लेकिन आप शायद <Esc> है, जो एक मानचित्रण कि <Esc> के साथ शुरू होता है, जो 'timeoutlen' की जाँच करने के लिए मानचित्रण पूरा हो गया है कि क्या विम इंतजार करता है के कारण होता है पर समय समाप्त करना चाहते हैं।

यह आवश्यक नहीं है कि "असली" मैपिंग हो; कई टर्मिनल वर्कअराउंड (उदाहरण के लिए कुछ चाबियाँ काम करने के लिए) ऐसी मैपिंग सेट अप करने की सलाह देते हैं। (दुर्भाग्य से, यह एक कठिन और जटिल मुद्दा है।)

आप के माध्यम से मानचित्रण पा सकते हैं:

:verbose map <Esc> 
+0

करते समय ' 'वास्तव में कोई देरी नहीं है। लेकिन मैं 'ईएससी 'का उपयोग करना चाहता हूं। मुझे 'कोई मानचित्रण नहीं मिला' – Ozkan

+1

एचएम, यह 'सेटिंग सेट _ _' सेटिंग में से एक के कारण भी हो सकता है, लेकिन मुझे नहीं पता कि इसका निवारण कैसे करें। –

8

के रूप में इंगो समझाया। बस सोचा कि मैं समाधान पोस्ट करूंगा: https://github.com/Greduan/dotfiles/blob/47f92e4db29d4ead778d877a85082b271de130ed/vim/vimrc.vim#L332-L346

बहुत अच्छी तरह से काम करता है। यह मेरे लिए थोड़ा उलझन में है, इसलिए मैं वास्तव में समझा नहीं सकता, लेकिन कोड स्वयं को बहुत अच्छी तरह से समझाता है।

बिंदु यह काम करता है, यह बस टर्मिनल पर भी <Esc> तुरंत काम करता है। मेरा मानना ​​है कि यदि आपके पास मैपिंग <Esc> पर सेट है तो यह आपको उन लोगों को भी करने का समय देगा। हालांकि मुझे यकीन नहीं है।

संपादित

थोड़ा अध्ययन किया और अब मैं यह समझा सकते हैं। असल में, यदि आप एक जीयूआई (जैसे मैकवीम) का उपयोग नहीं कर रहे हैं तो जब आप डालने मोड दर्ज करते हैं तो ttimeoutlen को 0 पर सेट किया जाएगा। मतलब यह है कि जैसे ही आप <Esc> पर क्लिक करेंगे, जो काम करेगा। हालांकि एक बार जब आप सामान्य मोड में हों तो यह ttimeoutlen आपके द्वारा पसंद की गई संख्या पर सेट करेगा, जिससे आप <Esc> के साथ मैपिंग कर सकते हैं।

सही समाधान मुझे लगता है, क्योंकि यदि आपके पास सम्मिलित मोड में मैपिंग है तो यह नियंत्रण या कुछ ऐसा उपयोग करेगा।

संपादित 2

कोड यह रहा:

set timeout " Do time out on mappings and others 
set timeoutlen=2000 " Wait {num} ms before timing out a mapping 

" When you’re pressing Escape to leave insert mode in the terminal, it will by 
" default take a second or another keystroke to leave insert mode completely 
" and update the statusline. This fixes that. I got this from: 
" https://powerline.readthedocs.org/en/latest/tipstricks.html#vim 
if !has('gui_running') 
    set ttimeoutlen=10 
    augroup FastEscape 
     autocmd! 
     au InsertEnter * set timeoutlen=0 
     au InsertLeave * set timeoutlen=1000 
    augroup END 
endif 

बार मैं शर्त यह है कि जीयूआई नहीं चल रहा है हटा दिया है और यह अभी भी जहाँ तक मैं बता सकता है काम करता है।

+0

दूसरी लाइन और 1000ms से 2000ms के बीच क्या अंतर है? धन्यवाद! – etal

+0

@etal ईमानदारी से यकीन नहीं है। मैंने बहुत पहले ऐसा किया था। : पी वे एक ही विकल्प हैं ताकि वे शायद वही सेट हो सकें। पढ़ना ': एच टाइमआउट',': एच टाइमआउट 'और ': एच ttimeoutlen' आपको इसे समझने में मदद करनी चाहिए। मुझे पूरा यकीन है कि विम के जीयूआई संस्करण को कैसे संभालता है और कैसे विम का टर्मिनल संस्करण इसे संभालता है, इस बीच अंतर के द्वारा बनाई गई क्विर्क के लिए कारण केवल एक कामकाज है। उम्मीद है की वो मदद करदे। :) – greduan

1

मुझे कोई मानचित्रण <ESC> विश्व स्तर पर या दृश्य मोड के लिए करने के लिए बाध्य है (बुला: वर्बोज़ vmap <ESC> कोई परिणाम देता है), लेकिन विजुअल मोड से बाहर निकलने पर अभी भी एक महत्वपूर्ण देरी है।बिना किसी vimrc के ताजा इंस्टॉल पर भी देरी मौजूद है। < का उपयोग कर सी-सी > देरी के बिना दृश्य मोड से बाहर निकलता है।

जब से मैं दबाने < सी-सी > किसी भी मोड से बाहर निकलने के लिए पसंद नहीं है, मैं वर्तमान <ESC> < दृश्य मोड में सी-ग > मैप करें। यह किसी भी देरी के बिना < ईएससी > का उपयोग कर दृश्य मोड से बाहर निकलता है।

:vmap <ESC> <C-c> 

या अपने vimrc

vnoremap <ESC> <C-c> 

अगर आप वैश्विक या दृश्य मोड मैपिंग <ESC> करने के लिए बाध्य है तुम्हारे पास काम नहीं करेगा में निम्न पंक्ति डाल दिया।

संबंधित मुद्दे