vim: कुल बफ़र्स की संख्या


12

vim में, के साथ

:buffers

मुझे सभी बफ़र्स की संख्या समान है

:ls

, लेकिन
मैं बफ़र्स की कुल संख्या कैसे प्राप्त कर सकता हूं?

जवाबों:


9

हेपेटाइट के समाधान से समान विचार, लेकिन एक लाइनर के रूप में। कई अन्य चीजें इस तरह से की जा सकती हैं: बफर का नाम प्राप्त करें (मानचित्र के लिए धन्यवाद), पोंछने वाले बफ़र्स जो एक पैटर्न से मेल खाते हैं , /programming/2974192/how-can-i-pare-down- vims-बफर-सूची-से-केवल-सक्रिय-बफ़र्स / 2974600 # 2974600n आदि।

echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))

14

अब तक के जवाब बहुत ज्यादा हैक हैं। यहाँ विम का अंतर्निहित तरीका है:

len(getbufinfo({'buflisted':1}))

हमेशा की तरह, :h getbufinfo()आधिकारिक स्पष्टीकरण के लिए विम की सहायता ( ) देखें ।


3
जिस समय यह पूछा गया था, आपका उत्तर संभव नहीं था क्योंकि विम ने इसका समर्थन नहीं किया था। अब यह शायद इष्टतम समाधान है।
हेप्टाइट

4

मेरे ज्ञान के लिए ऐसा करने के लिए विम में कोई अंतर्निहित पद्धति नहीं है, लेकिन आप एक समारोह बना सकते हैं:

function! NrBufs()
    let i = bufnr('$')
    let j = 0
    while i >= 1
        if buflisted(i)
            let j+=1
        endif
        let i-=1
    endwhile
    return j
endfunction

इसके नाम में समाप्त होने वाले नाम के साथ एक पाठ फ़ाइल में उपरोक्त रखें: इसे स्रोत, फिर आप कुछ ऐसा कर सकते हैं:

:let buffer_count = NrBufs()
:echo buffer_count

21 जून का नोट: यदि आपके पास 2017 के रूप में विम का हालिया संस्करण है, तो नीचे गिद का जवाब इष्टतम समाधान है।


1
अन्य लोगों के लिए ध्यान दें जो यह पाते हैं: मुझे लगता है कि यह 'मैं> 0' होना चाहिए, क्योंकि बफर संख्या 1 से शुरू होती है, 0. नहीं
मेटा

@ मीता: मैंने अपना जवाब तय कर दिया। धन्यवाद। हालांकि यह वास्तव में एक मुद्दा नहीं होने वाला है क्योंकि हमेशा कम से कम एक बफर होगा।
४४

3

क्या आप शायद देख रहे हैं?

:echo(bufnr('$'))

यह "काउंट" बफ़र्स होगा जो विम के बाद से अनलोड किया गया है, कभी भी एक बफर नंबर को रीसायकल नहीं करता है, इसके अलावा यह होना चाहिए: इको बुफ़्नर ('$')
हेप्टाइट

(ठीक है, आपका संस्करण ठीक से अंतिम लोड किए गए बफर की संख्या को प्रतिध्वनित करेगा, लेकिन वाक्यविन्यास थोड़ा भ्रमित है।)
1

@ हेपेटाइट - हां, वह गलती थी। वाक्य रचना की बात के रूप में, मुझे दोनों में कोई अंतर नहीं दिखता।
रूक

वे एक ही काम करते हैं, लेकिन: इको एक कमांड है और एक फ़ंक्शन नहीं है, और कभी भी फ़ंक्शन की तरह उपयोग नहीं किया जा सकता है (जब तक कि आप अपने स्वयं के उपयोगकर्ता-परिभाषित फ़ंक्शन को एक: ईको के आसपास लपेटते नहीं हैं)। अंतर विम के कई संदर्भों में महत्वपूर्ण है।
Heptite

@ हेपेटाइट - मुझे मानना ​​चाहिए कि मुझे कुछ पता नहीं है कि आपने अभी क्या कहा ... (एक डक्ट टेप इंजीनियर के यहाँ, "कोड सुंदर है" प्रोग्रामर से कम)
Rook

2

यदि आप एक कमांड के रूप में हेपटाइट का समाधान चाहते हैं, तो अपने .vimrc फ़ाइल में निम्न जोड़ें:

command BufNum echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.