2011-02-17 15 views
5

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

मुझे दस्तावेज़ों में कुछ भी उचित नहीं मिला, इसलिए किसी को यह कैसे करना है इस पर कोई सुराग?

धन्यवाद।

उत्तर

4

एकमात्र चीज जिसे मैं इसके बारे में सोच सकता हूं, वर्तमान टैब में सभी विंडो के माध्यम से :windo का उपयोग करना है और जांचें कि फ़ाइल लोड हो गई है या नहीं। कुछ इस तरह:

function! TabIsEmpty() 
    " Remember which window we're in at the moment 
    let initial_win_num = winnr() 

    let win_count = 0 
    " Add the length of the file name on to count: 
    " this will be 0 if there is no file name 
    windo let win_count += len(expand('%')) 

    " Go back to the initial window 
    exe initial_win_num . "wincmd w" 

    " Check count 
    if win_count == 0 
     " Tab page is empty 
     return 1 
    else 
     return 0 
    endif 
endfunction 

" Test it like this: 
echo TabIsEmpty() 

" Use it like this: 
if TabIsEmpty() == 1 
    echo "The tab is empty" 
else 
    echo "The tab is not empty" 
endif 

तो केवल एक चीज है खुले में एक सहायता पृष्ठ या पूर्वावलोकन विंडो या ऐसा ही कुछ है, यह शायद 1 वापसी के रूप में मैं नहीं लगताwindo उन से अधिक संचालित करेंगे।

+0

हां, यही अल काम करता है, मैं सिर्फ एक छोटे से परिवर्तन किया, वापस जाने के लिए प्रारंभिक खिड़की के लिए, मैं 'exe "सामान्य कर रहा हूँ"। प्रारंभिक_विन_नम। "^ डब्ल्यू^डब्ल्यू" '। आपका बहुत बहुत धन्यवाद! –

+0

डॉएएल, धन्यवाद, इससे मुझे अपनी समस्या के साथ भी मदद मिली: http://stackoverflow.com/q/15141979/212307 – Rixius

3

मान लीजिए कि टैब में कई खिड़कियां हैं, लेकिन सभी विंडोज़ बफर खाली हैं।

शायद आप यह कहना चाहते हैं कि यह टैब खाली नहीं है। यदि ऐसा है, तो हमें सभी टैबों को पार करने की आवश्यकता नहीं है। निम्नलिखित काम करेगा।

function! TabIsEmpty() 
    return winnr('$') == 1 && len(expand('%')) == 0 && line2byte(line('$') + 1) <= 2 
endfunction 
3

शायद मैं सवाल समझ नहीं कर रहा हूँ, लेकिन एक टैब कोई बफर ऐसा करने की है, तो जाँच करने के लिए:

if bufname("%") == "" 
+1

यह मेरे लिए पूरी तरह से काम करता है अगर कोई फ़ाइल नहीं है (या सत्र, जो argc जांच रहा है मिस) दिया गया था: autocmd vimenter * अगर bufname ("%") == "" | एनईआरडीटी | अगर अंत – Von

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