2010-06-03 7 views
6

मुझे जितनी बार संभव हो कमांड मोड में जाने के लिए मेरा विम पसंद है। मुझे लगता है कि ऐसा करने के लिए फोकस खोना एक अच्छी घटना होगी। जो कुछ भी मैंने पाया वह खोया फोकस पर बचत के लिए है।विम: फोकस खो जाने पर कमांड मोड पर वापस जाएं

मैकवीम में टैब स्विच करते समय या cmd + tabbing को किसी अन्य ऐप पर स्विच करते समय मैं इसे cmd मोड पर ऑटो-रिटर्न करना चाहता हूं।

+0

वहाँ एक नकली सवाल है और सुपर उपयोगकर्ता पर जवाब: http://superuser.com/questions/236534/change -to-normal-mode-when-macvim-go-background – rubiii

उत्तर

16

निम्नलिखित autocommand "स्पष्ट" विकल्प होगा।

au FocusLost,TabLeave * stopinsert 

दुर्भाग्य से, यह केवल TabLeave के लिए ठीक से काम कर रहा है। फोकसलोस्ट इवेंट ट्रिगर कर रहा है लेकिन कुछ कारणों से stopinsert कमांड वास्तव में प्रभाव नहीं ले रहा है जब तक कि विम ने फोकस हासिल नहीं किया है।

इसके बजाय, आप feedkeys का लाभ उठा सकते हैं और "मुझे सामान्य मोड में ले जाएं चाहे कोई फर्क नहीं पड़ता!" key combo:

au FocusLost,TabLeave * call feedkeys("\<C-\>\<C-n>") 

केवल नकारात्मक पक्ष यह है कि feedkeys() एक बड़ी बात है, हालांकि, के बाद से विम 7 2006

+0

बिल्कुल सही, धन्यवाद! – devth

+0

कूल- कभी भी 'Ctrl - \ _ Ctrl-N' के बारे में नहीं पता था। मेरे पास मेरे vimrc में स्टॉपिनर्ट लाइन थी लेकिन हमेशा इस तथ्य से गड़बड़ हो गई कि बफर पर लौटने पर यह एक और चरित्र ले गया ...: wq –

+0

मैंने टिप्पणी की होगी, लेकिन मेरी टिप्पणी स्वरूपण के साथ आता है। निचे देखो। :) मुझे इस पर मार्गदर्शन के लिए @ jamessan धन्यवाद देना चाहिए। –

7

में वापस जारी किया गया था मैं एक जोड़ा है | आवश्यकता है कम से कम विम 7. यह नहीं होना चाहिए है टिप्पणी, लेकिन मैं समाधान प्रारूपित नहीं कर सकता।

फीडकी समाधान बहुत अच्छा है, यह सामान्य हिचकिचाहट के साथ है, चाहे आप अन्य मोड में हों, भले ही मैं सामान्य मोड पर वापस जाऊं। मैं कमांड लाइन मोड को रद्द नहीं करना चाहता हूं (विंडोज विंडोज़ में ड्रॉप फाइलों को खींचने के लिए) और मुझे दृश्य मोड को रद्द करने की आवश्यकता नहीं है, मैं सिर्फ डालने मोड को रद्द करना चाहता था।

समाधान है, तो, के रूप में प्रकट होता है:

autocmd FocusLost * call PopOutOfInsertMode() 

function! PopOutOfInsertMode() 
    if v:insertmode 
     feedkeys("\<C-\>\<C-n>") 
    endif 
endfunction 

दूसरे शब्दों में, केवल पॉप अगर आप एक डालने मोड में हैं। इसे और परिष्कृत किया जा सकता है, क्योंकि v: insertmode "सामान्य डालने" में 'i' होगा, प्रतिस्थापन मोड में 'आर' और वर्चुअल रीप्लेस मोड में 'v' होगा। मेरे लिए, भले ही पॉप आउट करना अच्छा है, लेकिन उपयोगकर्ता सूट में संपादित करना चाहता है।

इस हैं MacVim में आप के लिए काम नहीं कर रहा, साथ PopOutOfInsertMode की सामग्री को बदलने:

if v:insertmode == 'i' | call feedkeys("\<C-\>\<C-n>") | endif 
+0

अतिरिक्त जानकारी के लिए धन्यवाद! मैंने मूल समाधान के साथ एक ही समस्या की खोज की। कमांड मोड में कुछ देखने के लिए दूर चले गए और फिर वापस आकर इसे साफ़ करने के लिए निराशाजनक था। – devth

+1

दुर्भाग्यवश यह मैकवीम में काम नहीं करता है। मैंने क्यों नहीं देखा है, हालांकि यह चीजों की सूची में है। :) –

+0

क्या आपने कभी यह पता लगाया था? मुझे भी यही तकलीफ़ है! – ELLIOTTCABLE