Kanıt
Aslında sadece düz ol 'çalıştırdığınız alternatif bir dosya olmadığından :bd
, geçerli arabelleği silerek ... onsuz deneyin #
ve sonucun aynı olduğunu göreceksiniz. Benzer bir şey ile olur :buffer
, :sbuffer
ve en azından kabul birkaç diğer komutlar #
bir argüman olarak: onlar sessizce hiçbir argüman iletilmiş gibi davranır.
Aynı doğrultuda, Denersen :bunload #
bu hatayı alıyorum: E90: Cannot unload last buffer
. :bunload
Bağımsız değişken olmadan çalıştırın ve bir kez daha aynı sonucu elde edersiniz.
Dokümanlar
Yani #
"hiçbir şey" (muhtemelen boş bir dize) ile değiştirilen kanıtlarımız var . Buradan nereye gidiyoruz? Bu davranıştan bahsetmeye çalışırken bir süre yardım dosyalarının etrafında dolaştım. Açık bir şey yoktu ama :h cmdline-lines
diyor (bir veya iki sayfayı aşağı kaydır) ...
Bir dosya adının beklendiği yerde '%' veya '#' karakteri kullanıldığında, geçerli ve alternatif dosya adına genişletilir.
I um koyarak olarak okumak #
yoluyla expand()
işlev (yani, expand('#')
aynı temel kod) ya da en azından yok kullanılır.
:h expand()
diyor:
Genişlet ... özel anahtar kelimeler. .. '%' veya '#' kullanılırken geçerli veya alternatif dosya adı tanımlanmamışsa, boş bir dize kullanılır.
Tanıdık geliyor.
Kod
Şimdi yukarıdakilerin hiçbiri kesin değildir ya da Neden? bu yüzden kazmaya biraz daha zaman harcadım ... bu sefer kodda. Benim C çok paslı ve yüklü iyi bir araç yok ama :bdelete
denilen bazı kurulum yapan bir işlev bulmayı başardı do_bufdel()
. Bu aracılığıyla komut satırı değişkenleri gönderir buflist_findpat()
ise, bu #
, döner bir değer karşılaşılmaktadır curwin->w_alt_fnum
. Bu, alternatif arabelleğin "tampon numarası" ... bizim senaryomuzda pozitif bir değer olamaz. (Bu dönüş değeri seçilmeden önce alt dosyanın geçerli olup olmadığını kontrol etmez.)
İçinde geri do_bufdel()
çek parametre işlenmesi döngü ayrılmış olup, bu durumda, 0 daha düşük bir tampon numarası için bu dönüş değeri karşı yapılır. Bu, çekirdek :bdelete
kodda hiçbir parametrenin sunulmamasına yol açacaktır ... ki bu benim önceki sezgilerimle aynı doğrultuda.
Sıradaki ne?
Net bir hataya benzeyen hiçbir şey göremediğim için tasarlanmış gibi görünüyor. Muhtemelen ihmal günahı ... gözden kaçan ve bu nedenle zarif bir muamele olmayan bir köşe davası. Ancak sadece bunu yazan geliştiriciler kesin olarak biliyor. Bu yüzden son adım girdilerini almaya çalışmak olacaktır. Christian B.'nin dediği gibi vim-dev listesine sormanın yolu var.
(Not buflist_findpat()
bu varsaymak hayal streç gerektirmeyen bu yüzden bir yardımcı fonksiyonudur :bunload
, :buffer
göre ortak davranışlarını açıklıyor vb bunu kullanıyor da ... #
.)
NVIM v0.3.0-dev
, kontrol ettim.