Вони різні, якщо пакет відкладений, тобто не завантажений, поки це не потрібно. У цьому випадку :initвін буде виконаний під час першого читання файлу emacs, але :configвін буде виконуватися під час фактичного завантаження пакета.
У вашому прикладі використання modeнеявно відкладає завантаження пакету. Ви налаштували пакет для завантаження при першому відвідуванні HTML-файлу.
Ви можете використати :demandдля того, щоб переконатися, що пакет завжди завантажений під час запуску, але більш імовірно, що ви хочете тут зробити, це надіти свій гачок :init.
З докстрингу:
:init Code to run when `use-package' form evals.
Оскільки ви поміщаєте це у свій файл-init, це в основному означає, що воно запуститься при запуску.
: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роботу, тому що код init завжди оцінюється, незалежно від того, чи завантажується пакет.