Они отличаются, если пакет откладывается, т.е. не загружается до тех пор, пока он не понадобится. В этом случае :init
он будет выполнен во время первого чтения вашего файла emacs, но :config
будет выполнен во время фактической загрузки пакета.
В вашем примере использование mode
неявно откладывает загрузку пакета. Вы настроили пакет для загрузки при первом посещении html-файла.
Вы можете использовать :demand
это, чтобы убедиться, что пакет всегда загружается при запуске, но более вероятно, что вы хотите сделать здесь, это вставить свой крючок :init
.
Из строки документации:
:init Code to run when `use-package' form evals.
Поскольку вы помещаете это в свой пользовательский файл инициализации, это в основном означает, что он будет запускаться при запуске.
:config Runs if and when package loads.
Так что не запускайте, пока пакет на самом деле не загружается ..
:defer Defer loading of package -- automatic if :commands, :bind, :bind*, :mode or :interpreter are used.
Обратите внимание на список вещей, которые автоматически делают пакет отложенным. В основном, если вы указываете use-package
условия, в которых вам нужен этот пакет, предполагается, что вы не хотите загружать его, пока эти условия не возникнут.
:demand Prevent deferred loading in all cases.
Убедитесь, что пакет загружается при запуске, независимо от того, какие другие опции вы указали.
Обновить
Возвращаясь к этому, основываясь на недавних комментариях ... Все, что я сказал выше, правда, но я не думаю, что это правильно отвечает на вопрос. Основная проблема здесь на самом деле в том, что html-mode
это не пакет, а режим, определенный пакетом sgml-mode
. Это работает, как и ожидалось для меня:
(use-package sgml-mode
:mode ("\\.html\\'" . html-mode)
:config (add-hook 'html-mode-hook 'turn-off-auto-fill))
В исходном примере :config
выражение никогда не оценивается, поскольку пакет с именем html-mode
никогда не загружается. Перемещение одного и того же выражения в :init
рабочее состояние, потому что код инициализации всегда вычисляется независимо от того, был ли загружен пакет.