หลักฐาน
เนื่องจากไม่มีไฟล์อื่นที่คุณเพิ่งเรียกใช้ล้วน ol จริง ๆ 'การ:bdลบบัฟเฟอร์ปัจจุบัน ... ลองใช้โดยไม่ลองแล้ว#คุณจะเห็นผลลัพธ์เหมือนกัน สิ่งที่คล้ายกันเกิดขึ้นกับ:buffer, :sbufferและอย่างน้อยสองคำสั่งอื่น ๆ ที่รับ#เป็นอาร์กิวเมนต์: พวกเขาอย่างเงียบ ๆ ทำตัวราวกับว่าไม่มีข้อโต้แย้งได้ผ่าน
พร้อมสายเดียวกันถ้าคุณพยายามที่คุณจะได้รับข้อผิดพลาดนี้::bunload # E90: Cannot unload last bufferทำงาน:bunloadโดยไม่มีข้อโต้แย้งและคุณจะได้รับผลลัพธ์เหมือนเดิมอีกครั้ง
เอกสาร
ดังนั้นเราจึงมีหลักฐานที่#ถูกแทนที่ด้วย "ไม่มีอะไร" (อาจเป็นสตริงว่าง) เราไปจากที่นี่ที่ไหน ฉันแหย่ไปรอบ ๆ แฟ้มช่วยเหลือในขณะที่พยายามค้นหาการพูดถึงพฤติกรรมนี้ ไม่มีอะไรชัดเจน แต่:h cmdline-linesพูดว่า (เลื่อนหน้าลงหนึ่งหรือสองหน้า) ...
เมื่อใช้อักขระ '%' หรือ '#' ในกรณีที่คาดว่าชื่อไฟล์จะถูกขยายเป็นชื่อไฟล์ปัจจุบันและชื่ออื่น
ฉันอ่านว่าเป็นเสียงเรียก#ผ่านexpand()ฟังก์ชั่น (เช่นexpand('#')) หรืออย่างน้อยรหัสพื้นฐานเดียวกันที่ใช้มี
:h expand() พูดว่า:
ขยาย .. คำหลักพิเศษ .. เมื่อใช้ '%' หรือ '#' และไม่ได้กำหนดชื่อไฟล์ปัจจุบันหรือชื่อสำรองจะใช้สตริงว่าง
เสียงที่คุ้นเคย.
รหัส
ตอนนี้ไม่มีข้อสรุปใดที่ชัดเจนหรือให้เงื่อนงำว่าทำไม? ดังนั้นฉันจึงใช้เวลาขุดอีก ... คราวนี้เป็นรหัส ฉันซีเป็นสนิมมากและฉันไม่ได้มีเครื่องมือที่ดีที่ติดตั้ง แต่ฉันจัดการเพื่อหาฟังก์ชั่นที่ไม่ติดตั้งบางอย่างสำหรับเรียกว่า:bdelete do_bufdel()นี้จะส่งอาร์กิวเมนต์บรรทัดคำสั่งผ่านbuflist_findpat()ซึ่งถ้าพบให้ผลตอบแทนคุ้มค่า# curwin->w_alt_fnumนั่นคือ "หมายเลขบัฟเฟอร์" ของบัฟเฟอร์สำรอง ... ซึ่งไม่สามารถเป็นค่าบวกในสถานการณ์ของเรา (ไม่มีการตรวจสอบว่าไฟล์ alt ถูกต้อง / มีอยู่ก่อนที่จะเลือกค่าส่งคืนนั้น)
การย้อนกลับในdo_bufdel()การตรวจสอบจะทำกับค่าส่งคืนสำหรับหมายเลขบัฟเฟอร์ที่น้อยกว่า 0 ซึ่งในกรณีนี้การประมวลผลการวนรอบพารามิเตอร์จะแยกออก นั่นจะส่งผลให้ไม่มีพารามิเตอร์ที่นำเสนอใน:bdeleteรหัสหลัก... ซึ่งเหมาะสมกับสัญชาติญาณก่อนหน้าของฉัน
อะไรต่อไป?
ดูเหมือนว่าจะทำงานได้ตามที่ได้รับการออกแบบมาโดยที่ฉันไม่เห็นอะไรเลยที่ดูเหมือนข้อผิดพลาดที่ชัดเจน อาจเป็นบาปของการละเว้นแม้ว่า ... กรณีมุมที่ถูกมองข้ามและจึงไม่มีการจัดการที่สง่างาม แต่มีเพียงนักพัฒนาที่เขียนสิ่งนี้รู้อย่างแน่นอน ดังนั้นขั้นตอนสุดท้ายคือพยายามป้อนข้อมูลของพวกเขา ดังที่Christian B. กล่าวว่าการถามรายการ vim-dev เป็นวิธีที่จะไป
(โปรดทราบว่าbuflist_findpat()เป็นฟังก์ชันยูทิลิตี้ดังนั้นจึงไม่จำเป็นต้องใช้จินตนาการในการคิด:bunloadเช่น:bufferนั้น ฯลฯ กำลังใช้มันเช่นกัน ... ที่จะอธิบายพฤติกรรมทั่วไปของพวกเขาด้วยความเคารพ#)
NVIM v0.3.0-devฉันตรวจสอบ