Ich habe die autocmd.txt
Hilfe durchgesehen , aber die Informationen darüber sind verstreut und nicht immer vorhanden (z. B. mit BufRead
).
Könnte jemand, der dies gut versteht, die Reihenfolge dieser Ereignisse auflisten - mit möglicherweise in Klammern angegebenen Bedingungen, wie z
WinEnter
BufEnter (if this window is for a different buffer than the current)
und so weiter, als einfache Referenz?
Anmerkung (kopiert von meinem eigenen Kommentar unten) : Ich spreche nicht über einzelne Erklärungen von ihnen, die in Ordnung sind, sondern darüber, wie sie miteinander interagieren und in welcher Reihenfolge sie passieren. Zum Beispiel, WinEnter
sagt "Vim führt die BufEnter-Autobefehle nach den WinEnter-Autobefehlen aus", TabEnter
sagt "Nach dem Auslösen des WinEnter und vor dem Auslösen des BufEnter-Ereignisses", ist alles so an vielen Stellen verteilt. Und manchmal wird es überhaupt nicht erwähnt (zum Beispiel BufRead
nicht, ob es nach oder vor BufEnter ausgeführt wird - vielleicht kann ein Experte es aus einer anderen Information ableiten, aber ich kann es nicht.
Also, meine Absicht hier ist es, Erstellen Sie eine einzige, einfache Referenz für die Reihenfolge dieser Ereignisse, die von Nicht-Experten schnell nachgeschlagen werden kann.autocmd
Veranstaltungsspezifikationen.
quelle
WinEnter
sagt "Vim führt die BufEnter-Autobefehle nach den WinEnter-Autobefehlen aus",TabEnter
sagt "Nach dem Auslösen des WinEnter und vor dem Auslösen des BufEnter-Ereignisses", ist alles so an vielen Stellen verteilt. Und manchmal ist es gar nicht (für zB erwähnt.BufRead
Nicht erwähnt , ob es nach BufEnter läuft oder vor - vielleicht ein Experte kann es aus einem anderen Stück Info dort schließen, aber ich kann nicht.autocmd
Veranstaltungsspezifikationen präziser zu sein .Antworten:
So vervollständigen Sie die @ Sundar-Antwort:
Sie können die Reihenfolge der Ereignisse einfach mit einer Protokollierungsfunktion protokollieren:
Die vollständige Datei finden Sie hier: https://gist.github.com/nobe4/aa8313fe98ca8821afad
Sie können dann
tail -f log
und Sie erhalten eine Echtzeit-Autocommand-Ereignisaktivität.quelle
Ich habe versucht, dies mit verschiedenen Schlüsselwörtern zu googeln, und habe bei einem solchen Versuch Gold getroffen: http://www.ibm.com/developerworks/library/l-vim-script-5/
Insbesondere ist dieser Teil für die aktuelle Frage relevant:
Es ist immer noch nicht ganz umfassend (zB keine Erwähnung von
BufRead
akaBufReadPost
, aber ich gehe davon aus, dass es danach kommen würdeBufReadCmd
), aber es ist ein ausgezeichneter Start.Eine wichtige fehlende Information ist jedoch, wie die Ereignisse
FileType
undSyntax
autocmd damit interagieren (vorausgesetztfiletype
undsyntax
bereits aktiviert, und eine neue Datei wird geöffnet, deren Dateityp und Syntax Vim bekannt sind).quelle
autocmd
s auf mehrere Dateien angewendet wird, nicht genau definiert. Und selbst mit einer einzelnen Datei hat sich die Reihenfolge mit der Version von Vim ein paar Mal geändert. Die Probleme, die dies für Plugins verursachen kann (und tut), wurden auf vim_dev zu Tode diskutiert, und das Gesamtdesign wird sich in absehbarer Zukunft nicht ändern. Um ein umfassendes Verständnis zuapply_autocmds
erlangen , gibt es 139 Vorkommen in den Quellen für Vim 7.4.827. Viel Glück damit.autocmd
s in Vim sind ein Durcheinander, ich glaube nicht, dass es tatsächlich möglich ist , eine endgültige Referenz zu schreiben, mit Ausnahme einiger einfacher Fälle. Ich nehme an, jeder begnügt sich nur mit "normalerweise funktioniert" und zuckt die Achseln, wenn dies nicht der Fall ist. Was neovim betrifft, habe ich persönlich gemischte Gefühle in Bezug auf das Projekt. Ich habe mir den Code in letzter Zeit nicht angesehen. Ich nehme an, Sie können eine Antwort auf ihren Issue Tracker bekommen.