Mereka berbeda jika paket ditangguhkan, yaitu tidak dimuat sampai diperlukan. Dalam hal ini :initakan dieksekusi pada saat file emacs Anda pertama kali dibaca, tetapi :configakan dieksekusi pada saat paket itu sebenarnya dimuat.
Dalam contoh Anda, penggunaan modesecara implisit mencegah pemuatan paket. Anda telah mengonfigurasi paket untuk dimuat saat pertama kali file html dikunjungi.
Anda bisa menggunakan :demanduntuk memastikan paket selalu dimuat saat startup, tetapi lebih mungkin apa yang ingin Anda lakukan di sini adalah memasukkan kait Anda :init.
Dari docstring:
:init Code to run when `use-package' form evals.
Karena Anda meletakkan ini di file user-init Anda, itu pada dasarnya berarti akan berjalan saat startup.
:config Runs if and when package loads.
Jadi, jangan dijalankan sampai paket benar-benar dimuat ..
:defer Defer loading of package -- automatic if :commands, :bind, :bind*, :mode or :interpreter are used.
Perhatikan daftar hal-hal yang secara otomatis membuat paket ditangguhkan. Pada dasarnya jika Anda memberi tahu use-packagekondisi di mana Anda membutuhkan paket ini, ia menganggap Anda tidak ingin memuatnya sampai persyaratan itu muncul.
:demand Prevent deferred loading in all cases.
Pastikan paket dimuat saat startup, terlepas dari opsi apa yang telah Anda tentukan.
Memperbarui
Meninjau kembali ini berdasarkan pada komentar baru-baru ini ... Apa yang saya katakan di atas adalah benar, tetapi saya tidak berpikir dengan benar menjawab pertanyaan. Masalah root di sini sebenarnya html-modebukan paket, melainkan mode yang ditentukan oleh paket sgml-mode. Ini berfungsi seperti yang diharapkan untuk saya:
(use-package sgml-mode
:mode ("\\.html\\'" . html-mode)
:config (add-hook 'html-mode-hook 'turn-off-auto-fill))
Dalam contoh asli, :configekspresi tidak pernah dievaluasi karena paket bernama html-modetidak pernah dimuat. Memindahkan ekspresi yang sama menjadi :initberfungsi karena kode init selalu dievaluasi, terlepas dari apakah paket tersebut pernah dimuat.