Chứng cớ
Vì không có tệp thay thế mà bạn thực sự chỉ đang chạy ol 'đơn giản :bd
, nên xóa bộ đệm hiện tại ... hãy thử mà không có #
và bạn sẽ thấy kết quả là như nhau. Một điều tương tự xảy ra với :buffer
, :sbuffer
và ít nhất một vài lệnh khác chấp nhận #
như một đối số: chúng âm thầm hành xử như thể không có đối số nào được thông qua.
Dọc theo cùng một dòng, nếu bạn thử, :bunload #
bạn sẽ gặp lỗi này : E90: Cannot unload last buffer
. Chạy :bunload
không có đối số và, một lần nữa, bạn sẽ nhận được kết quả tương tự.
Tài liệu
Vì vậy, chúng tôi có bằng chứng #
đang được thay thế bằng "không có gì" (có thể là một chuỗi trống). Chúng ta sẽ đi đâu từ đây? Tôi chọc vào các tập tin trợ giúp một lúc để cố gắng đề cập đến hành vi này. Không có gì rõ ràng nhưng :h cmdline-lines
nói (cuộn xuống một hoặc hai trang) ...
Khi ký tự '%' hoặc '#' được sử dụng trong trường hợp tên tệp được mong đợi, chúng sẽ được mở rộng thành tên tệp hiện tại và thay thế.
Tôi đọc điều đó khi Vim đưa #
vào expand()
hàm (tức là expand('#')
) hoặc ít nhất là cùng một mã cơ bản được sử dụng ở đó.
:h expand()
nói:
Mở rộng .. từ khóa đặc biệt. .. Khi sử dụng '%' hoặc '#' và tên tệp hiện tại hoặc thay thế không được xác định, một chuỗi trống được sử dụng.
Âm thanh quen thuộc.
Mật mã
Bây giờ không có điều nào ở trên là dứt khoát hoặc đưa ra manh mối về Tại sao? vì vậy tôi đã dành thêm thời gian để đào ... lần này trong mã. My C rất hoen rỉ và tôi không cài đặt bất kỳ công cụ tốt nào nhưng tôi đã tìm được một chức năng thực hiện một số thiết lập để :bdelete
gọi do_bufdel()
. Điều này sẽ gửi các đối số dòng lệnh thông qua buflist_findpat()
đó, nếu #
gặp phải, trả về giá trị curwin->w_alt_fnum
. Đó là "số bộ đệm" của bộ đệm thay thế ... không thể là giá trị dương trong kịch bản của chúng tôi. (Không có kiểm tra xem tệp alt có hợp lệ / tồn tại trước khi giá trị trả về đó được chọn hay không.)
Thoát ra trong do_bufdel()
một kiểm tra được thực hiện đối với giá trị trả về đó cho số bộ đệm nhỏ hơn 0 trong trường hợp vòng xử lý tham số bị phá vỡ. Điều đó sẽ không dẫn đến việc các tham số được trình bày cho :bdelete
mã lõi ... phù hợp với trực giác trước đây của tôi.
Cái gì tiếp theo?
Nó dường như đang hoạt động như được thiết kế ở chỗ tôi không thấy bất cứ thứ gì trông giống như một lỗi rõ ràng. Có thể tội lỗi của sự thiếu sót, mặc dù ... một trường hợp góc đã bị bỏ qua và do đó không có xử lý duyên dáng. Nhưng chỉ có các nhà phát triển đã viết điều này biết chắc chắn. Vì vậy, bước cuối cùng sẽ là cố gắng để có được đầu vào của họ. Như Christian B. đã nói hỏi trong danh sách vim-dev là con đường để đi.
(Lưu ý rằng buflist_findpat()
là một chức năng tiện ích như vậy nó sẽ không đòi hỏi một căng của trí tưởng tượng cho rằng :bunload
, :buffer
vv đang sử dụng nó, quá ... mà có thể giải thích hành vi phổ biến của họ đối với với #
.)
NVIM v0.3.0-dev
, tôi đã kiểm tra.