सबूत
क्योंकि कोई वैकल्पिक फ़ाइल नहीं है जो आप वास्तव में केवल सादे ol 'चला रहे हैं :bd
, वर्तमान बफ़र को हटा रहे हैं ... इसके बिना प्रयास करें #
और आप देखेंगे कि परिणाम समान है। इसी तरह की बात होती है :buffer
, :sbuffer
और कम से कम कुछ अन्य आदेश जो #
एक तर्क के रूप में स्वीकार करते हैं : वे चुपचाप व्यवहार करते हैं जैसे कि कोई तर्क पारित नहीं किया गया था।
उसी पंक्तियों के साथ, यदि आप कोशिश :bunload #
करते हैं कि आपको यह त्रुटि मिले E90: Cannot unload last buffer
:। भागो :bunload
एक बार फिर से कोई तर्क और, के साथ, आप एक ही परिणाम प्राप्त करेंगे।
डॉक्स
इसलिए हमारे पास ऐसे सबूत हैं जो #
"कुछ भी नहीं" (शायद एक खाली स्ट्रिंग) द्वारा प्रतिस्थापित किया जा रहा है। हम यहाँ से कहाँ जायेंगे? मैंने इस व्यवहार का उल्लेख खोजने की कोशिश करते हुए थोड़ी देर के लिए मदद फ़ाइलों के चारों ओर पोक किया। कुछ भी स्पष्ट नहीं था लेकिन :h cmdline-lines
कहते हैं (एक या दो पृष्ठ नीचे स्क्रॉल करें) ...
जब वर्ण '%' या '#' का उपयोग किया जाता है जहां फ़ाइल नाम अपेक्षित होता है, तो उन्हें वर्तमान और वैकल्पिक फ़ाइल नाम में विस्तारित किया जाता है।
मैंने पढ़ा है कि Vim फ़ंक्शन के #
माध्यम से डाल रहा है expand()
(यानी expand('#')
) या कम से कम उसी अंतर्निहित कोड का उपयोग किया जाता है।
:h expand()
कहते हैं:
विस्तार करें .. विशेष कीवर्ड। .. '%' या '#' का उपयोग करते समय, और वर्तमान या वैकल्पिक फ़ाइल नाम को परिभाषित नहीं किया जाता है, एक खाली स्ट्रिंग का उपयोग किया जाता है।
परिचित लगता है।
कोड
अब उपरोक्त में से कोई भी निश्चित नहीं है या कोई सुराग क्यों देता है ? इसलिए मैंने खुदाई में कुछ और समय बिताया ... इस बार कोड में। मेरा C बहुत ही कठोर है और मेरे पास कोई अच्छा उपकरण नहीं है, लेकिन मैं एक ऐसा फंक्शन ढूंढने में कामयाब रहा, जो कुछ सेटअप को :bdelete
कॉल करता है do_bufdel()
। यह कमांड लाइन तर्क भेजता है buflist_findpat()
, जिसके माध्यम से, यदि #
सामना किया जाता है , तो मान लौटाता है curwin->w_alt_fnum
। यह वैकल्पिक बफर का "बफर नंबर" है ... जो हमारे परिदृश्य में एक सकारात्मक मूल्य नहीं हो सकता है। (इस बात की कोई जाँच नहीं है कि रिटर्न वैल्यू चुने जाने से पहले पूरी फाइल वैध है या मौजूद नहीं है।)
do_bufdel()
एक चेक आउट बैक में 0 से कम बफर नंबर के लिए उस रिटर्न वैल्यू के खिलाफ बनाया गया है, जिस स्थिति में पैरामीटर प्रोसेसिंग लूप बाहर से टूट गया है। इसका परिणाम यह होगा कि कोर :bdelete
कोड को कोई भी पैरामीटर प्रस्तुत नहीं किया जाएगा ... जो कि मेरे पहले के अंतर्ज्ञान के अनुरूप है।
आगे क्या होगा?
यह ऐसा प्रतीत होता है कि इस रूप में डिज़ाइन किया गया है कि मुझे ऐसा कुछ भी दिखाई नहीं दिया जो एक स्पष्ट बग की तरह दिखता हो। संभवतः चूक का पाप, हालांकि ... एक कोने का मामला जिसे नजरअंदाज किया गया है और इस प्रकार कोई सुंदर संभाल नहीं है। लेकिन केवल डेवलपर्स ने लिखा है कि यह सुनिश्चित करने के लिए पता है। तो अंतिम चरण उनके इनपुट प्राप्त करने का प्रयास करना होगा। जैसा कि क्रिश्चियन बी ने कहा कि विम-देव सूची में जाने का तरीका है।
(ध्यान दें कि buflist_findpat()
एक उपयोगिता समारोह है तो यह मान लेना कि कल्पना की एक खिंचाव की आवश्यकता नहीं होगी :bunload
, :buffer
आदि प्रयोग कर रहे हैं, भी ... कि के संबंध में उनके सामान्य व्यवहार की व्याख्या करता है #
।)
NVIM v0.3.0-dev
, मैंने जाँच की।