Beweise
Da es keine alternative Datei gibt, die Sie gerade ausführen :bd
, löschen Sie den aktuellen Puffer. Versuchen Sie es ohne #
und Sie werden sehen, dass das Ergebnis dasselbe ist. Ähnliches passiert mit :buffer
, :sbuffer
und zumindest ein paar andere Befehle , die akzeptieren #
als Argument: sie so leise verhalten , wenn keine Argumente übergeben wurden.
In diesem Sinne erhalten Sie beim Versuch folgende :bunload #
Fehlermeldung : E90: Cannot unload last buffer
. Führen Sie es :bunload
ohne Argumente aus, und Sie erhalten erneut das gleiche Ergebnis.
Die Docs
Wir haben also Beweise, #
die durch "nichts" ersetzt werden (wahrscheinlich eine leere Zeichenfolge). Was machen wir jetzt? Ich stöberte eine Weile in den Hilfedateien herum und versuchte, dieses Verhalten zu erwähnen. Es gab nichts explizites als zu :h cmdline-lines
sagen (ein oder zwei Seiten nach unten scrollen) ...
Wenn das Zeichen '%' oder '#' verwendet wird, wenn ein Dateiname erwartet wird, werden sie auf den aktuellen und alternativen Dateinamen erweitert.
Ich habe das als Vim gelesen, der #
die expand()
Funktion (dh expand('#')
) oder zumindest den gleichen zugrunde liegenden Code durchläuft, der dort verwendet wird.
:h expand()
sagt:
Erweitern Sie .. spezielle Schlüsselwörter. .. Wenn Sie '%' oder '#' verwenden und der aktuelle oder alternative Dateiname nicht definiert ist, wird eine leere Zeichenfolge verwendet.
Klingt vertraut.
Der Code
Jetzt ist keines der oben genannten Punkte endgültig oder gibt einen Hinweis darauf, warum? Also habe ich noch etwas Zeit damit verbracht zu graben ... diesmal im Code. Mein C ist sehr rostig und ich habe keine guten Tools installiert, aber ich habe es geschafft, eine Funktion zu finden, die ein Setup für :bdelete
aufgerufen ausführt do_bufdel()
. Dies sendet Befehlszeilenargumente, über buflist_findpat()
die bei #
Auftreten ein Wert zurückgegeben wird curwin->w_alt_fnum
. Das ist die "Puffernummer" des alternativen Puffers ... was in unserem Szenario kein positiver Wert sein kann. (Es wird nicht überprüft, ob die Alt-Datei gültig ist / existiert, bevor dieser Rückgabewert ausgewählt wird.)
Bereits aus do_bufdel()
einer Überprüfung vorgenommen , gegen diesen Rückgabewert für eine Puffernummer kleiner als 0 ist in diesem Fall der Parameter - Verarbeitungsschleife unterbrochen ist aus. Das würde dazu führen, dass dem Kerncode keine Parameter präsentiert :bdelete
werden ... was genau meinen früheren Intuitionen entspricht.
Was kommt als nächstes?
Es scheint so zu funktionieren, als hätte ich nichts gesehen, was wie ein klarer Fehler aussah. Möglicherweise jedoch Unterlassungssünde ... ein Eckfall, der übersehen wurde und daher keine anmutige Behandlung hat. Aber nur die Entwickler, die dies geschrieben haben, wissen es mit Sicherheit. Der letzte Schritt wäre also, zu versuchen, ihren Input zu bekommen. Wie Christian B. sagte, ist das Fragen auf der Vim-Dev-Liste der richtige Weg.
(Beachten Sie, dass buflist_findpat()
eine Nutzenfunktion ist so wäre es nicht eine Ausdehnung der Phantasie erfordert , dass zu übernehmen :bunload
, :buffer
etc. verwendet es auch ... , die ihr gemeinsames Verhalten in Bezug auf erklären würden #
.)
NVIM v0.3.0-dev
, habe ich überprüft.