2010-11-28 16 views
20

यदि मेरे पास 2 बफर क्षैतिज/लंबवत विभाजित हैं और उनमें से एक को बंद करना चाहते हैं, लेकिन मैं एक विंडो बंद नहीं करना चाहता हूं। मैं विभाजित खिड़कियों के स्थानों को पहले बंद बफर के समान रखना चाहता हूं।विम क्लोज बफर लेकिन खिड़की विभाजित नहीं

यदि मैं दबाता हूं: बीडी, जिस विंडो में बंद बफर बंद था, वह भी बंद हो गया।

+0

[विम: स्प्लिट विंडो खोने के बिना बफर हटाएँ] के संभावित डुप्लिकेट (http: // stackoverflow।com/प्रश्न/4465095/vim-बफर-बिना-हारी-विभाजित खिड़की हटाना) – thirtythreeforty

उत्तर

24

@RusAlex मुझे पसंद है प्लग-इन पसंद नहीं है। मैं यह भी जानना चाहता हूं कि मैं वास्तव में कौन सा कोड दर्ज करता हूं।

nmap ,d :b#<bar>bd#<CR>

कम में इस vim की सामान्य कुंजी अनुक्रम ,d लिए इंतज़ार कर रहे मोड के लिए एक महत्वपूर्ण मानचित्रण कहते हैं। जब इस स्विच को पहले खुले बफर में निष्पादित किया गया था और उस बफर को हटाने का प्रयास किया गया था जिसे आपने दूर से हटा दिया था।

ऑफ़-स्क्रीन बफर को हटाने से स्क्रीन स्प्लिट रहता है।

आदेश तीन अंतरिक्ष-अलग हिस्से होते हैं:

  • nmap - जोड़/सामान्य मोड के लिए कुंजी मानचित्रण बदल
  • ,d - करने के लिए प्रतिक्रिया करने के लिए महत्वपूर्ण अनुक्रम; - पहली , (अल्पविराम), तो d
  • :b#<bar>bd#<CR> कुंजी अनुक्रम निष्पादित करने के लिए

आदेश निष्पादित किए जाने वाले पांच हिस्से होते हैं:

  • : - मोड कमांड लाइन के लिए vim स्विच
  • b# - विंडो को पहले खुले बफर
  • <bar> पर स्विच करें - एक अनुवर्ती आदेश की अपेक्षा करें; | (पाइप चरित्र) का प्रतिनिधित्व करता है; चेनिंग आदेशों
  • bd# के लिए इस्तेमाल किया - पहले से खुला बफर हटा सकते हैं, यानी कि बफर सिर्फ दूर से
  • <CR> बंद - आदेश (रों) निष्पादित; गाड़ी वापसी का प्रतिनिधित्व करता है, मूल रूप से कुंजी Return या Enter

आदेश स्वरूप यह ~/.vimrc की तरह एक विन्यास फाइल में प्रयोग किया जाता है में है।आप vim के भीतर से मानचित्रण जोड़ना चाहते हैं आप पहले जोड़ें : (कोलन) - मानचित्रण तो खो जाएगा जब vim बाहर निकलने:

:nmap ,d :b#<bar>bd#<CR>

जब आप खुले vim यह रूप में मोड के लिए विरोध सामान्य मोड में आमतौर पर है i दबाकर -- INSERT -- द्वारा स्क्रीन के निचले भाग पर इंगित करें), दृश्य और इसी तरह। nnmap में केवल सामान्य मोड में जोड़ने के लिए कुंजी मैपिंग निर्दिष्ट करता है। मैपिंग के बारे में अधिक here

महत्वपूर्ण नोट खोजें:

  • b# वर्तमान बफर करने के लिए स्विच जाएगा अगर यह केवल ज्ञात बफर है।
  • b# एक छिपा हुआ/बंद बफर पर स्विच कर सकता है, उदा। जिसे आपने अभी ,d दबाकर बंद कर दिया है।
  • bd# वर्तमान बफर को बंद कर देगा यदि यह एकमात्र ज्ञात बफर है जो आपको खाली बफर के साथ छोड़कर स्क्रीन को अनप्लग कर रहा है।
  • bd# विफल हो जाएगा यदि बफर एक छिपी हुई/बंद बफर है।
  • bd# अभी भी अनुपयुक्त होगा यदि एक और विंडो स्विच करने के बाद बफर बंद हो जाता है।

अतिरिक्त नोट्स:

  • :windo b# पहले से खुला बफर करने के लिए सभी खिड़कियां स्विच करेंगे। सुनिश्चित नहीं है कि bd के साथ कैसे गठबंधन करें।
  • <CR> निष्पादित करने के लिए आपको Return या Enter मैन्युअल रूप से दबाए जाने के मामले में छोड़ा जा सकता है।
  • :nmap ,, से शुरू होने वाले सभी सामान्य मोड मैपिंग प्रदर्शित करता है।
  • :ls खुले बफर सूचीबद्ध करता है।
2

आप बफर को हटाना चाहते हैं लेकिन विभाजन को रखना चाहते हैं? आपको तब एक नया बफर चाहिए -: नया आपके लिए ऐसा करेगा, एक नई/खाली फ़ाइल के लिए बफर बनाना, लेकिन आपको अभी भी पुराने बफर/विंडो को मारने की आवश्यकता होगी। एक विंडो में एक बफर पर एक व्यूपोर्ट है, इसलिए यदि आप एक खाली विंडो चाहते हैं तो आपको खाली बफर चाहिए।

+0

मैं एक अच्छा choise कर दिया है: ख # bd # RusAlex

+0

nmap, डी। विम के अंदर एक समाधान खोजने के लिए। मेरे पास न्यूनतम प्लगइन है और मुझे यह भी मिला कि मुझे क्या चाहिए: nmap, d: b # बीडी # RusAlex

4

मुझे अपने काम कंप्यूटर पर जांच करनी होगी, लेकिन मुझे लगता है कि मैं जिस स्क्रिप्ट का उपयोग कर रहा हूं वह BufClose है।

+14

प्लगइन्स पसंद नहीं है: – RusAlex

+2

Rus, मुझे विश्वास है कि आपको अपनी पोस्ट का जवाब देना चाहिए और फिर इसे सही के रूप में चुना जाना चाहिए। वैसे भी, आपका आदेश: बी # बीडी # वही है जो मैं भी ढूंढ रहा हूं। पोस्ट करने का शुक्रिया! –

+0

बेवकूफ सवाल के लिए खेद है, लेकिन ' 'का अर्थ क्या है? –

9

विम में एक खाली विंडो होना असंभव है, लेकिन आप :enew का उपयोग कर वर्तमान विंडो में एक नई खाली फ़ाइल बना सकते हैं।

+0

एनएमएपी, डी: बी # बीडी # RusAlex

0

यहाँ कुछ समाधान नहीं है:

function! CloseSplitOrDeleteBuffer() 
    let curNr = winnr() 
    let curBuf = bufnr('%') 
    wincmd w     " try to move on next split 
    if winnr() == curNr   " there is no split" 
    exe 'bdelete' 
    elseif curBuf != bufnr('%') " there is split with another buffer 
    wincmd W     " move back" 
    exe 'bdelete' 
    else      " there is split with same buffer" 
    wincmd W 
    wincmd c 
    endif 
endfunction 


nnoremap <silent> Q :call CloseSplitOrDeleteBuffer()<CR> 
1

@RusAlex संस्करण + अंत में मौजूदा बफर को सक्रिय दो बार अगर हटाना बफर की जरूरत है।

nmap ,d :b#<bar>bd#<bar>b<CR> 
1

यहाँ कि @zenbro प्रदान की जवाब पर एक परिवर्तन हो सब अपने (विभाजन) विंडो और टैब खुला भले ही बफर आप बंद पिछले एक है रहता है।

फ़ंक्शन अगले बफर (या यदि आप वर्तमान बफर अंतिम है तो एक नया बफर) पर वर्तमान बफर (जो आप बंद कर रहे हैं) को इंगित करने वाली सभी विंडो स्विच करते हैं।

function! CloseBuffer() 
    let curBuf = bufnr('%') 
    let curTab = tabpagenr() 
    exe 'bnext' 

    " If in last buffer, create empty buffer 
    if curBuf == bufnr('%') 
     exe 'enew' 
    endif 

    " Loop through tabs 
    for i in range(tabpagenr('$')) 
     " Go to tab (is there a way with inactive tabs?) 
     exe 'tabnext ' . (i + 1) 
     " Store active window nr to restore later 
     let curWin = winnr() 
     " Loop through windows pointing to buffer 
     let winnr = bufwinnr(curBuf) 
     while (winnr >= 0) 
      " Go to window and switch to next buffer 
      exe winnr . 'wincmd w | bnext' 
      " Restore active window 
      exe curWin . 'wincmd w' 
      let winnr = bufwinnr(curBuf) 
     endwhile 
    endfor 

    " Close buffer, restore active tab 
    exe 'bd' . curBuf 
    exe 'tabnext ' . curTab 
endfunction 

यह नक्शा करने के लिए:

map <silent> <F4> :call CloseBuffer()<cr> 
संबंधित मुद्दे