Sie unterscheiden sich, wenn das Paket zurückgestellt wird, dh erst geladen wird, wenn es benötigt wird. In diesem Fall :init
wird sie zum Zeitpunkt des ersten Lesens Ihrer emacs-Datei :config
ausgeführt , jedoch zum Zeitpunkt des tatsächlichen Ladens des Pakets.
In Ihrem Beispiel mode
verzögert die Verwendung von implizit das Laden des Pakets. Sie haben das Paket so konfiguriert, dass es beim ersten Aufrufen einer HTML-Datei geladen wird.
Sie könnten :demand
sicherstellen, dass das Paket immer beim Start geladen wird, aber mit größerer Wahrscheinlichkeit setzen Sie Ihren Haken in das, was Sie hier tun möchten :init
.
Aus dem Dokumentationsstring:
:init Code to run when `use-package' form evals.
Da Sie dies in Ihre Benutzer-Init-Datei einfügen, bedeutet dies im Grunde, dass es beim Start ausgeführt wird.
:config Runs if and when package loads.
Also nicht ausführen, bis das Paket tatsächlich geladen wird.
:defer Defer loading of package -- automatic if :commands, :bind, :bind*, :mode or :interpreter are used.
Beachten Sie die Liste der Dinge, die ein Paket automatisch zurückstellen. Wenn Sie use-package
die Bedingungen angeben, unter denen Sie dieses Paket benötigen, wird davon ausgegangen, dass Sie es erst laden möchten, wenn diese Bedingungen vorliegen.
:demand Prevent deferred loading in all cases.
Stellen Sie sicher, dass das Paket beim Start geladen wird, unabhängig von den anderen von Ihnen angegebenen Optionen.
Aktualisieren
Dies basierend auf den jüngsten Kommentaren noch einmal zu überprüfen ... Was ich oben gesagt habe, ist alles wahr, aber ich denke nicht, dass es die Frage richtig beantwortet. Das eigentliche Problem hierbei ist, dass html-mode
es sich nicht um ein Paket handelt, sondern um einen vom Paket definierten Modus sgml-mode
. Das funktioniert bei mir wie erwartet:
(use-package sgml-mode
:mode ("\\.html\\'" . html-mode)
:config (add-hook 'html-mode-hook 'turn-off-auto-fill))
Im ursprünglichen Beispiel wird der :config
Ausdruck nie ausgewertet, da ein Paket mit dem Namen html-mode
nie geladen wird. Das Verschieben desselben Ausdrucks :init
funktioniert, da der Init-Code immer ausgewertet wird, unabhängig davon, ob das Paket jemals geladen wird.