Réponses:
Existe-t-il une règle permettant à l'utilisateur de déterminer si la configuration du package requiert
:init
ou:config
?
Il n'y a pas de règle générale qui s'applique à tous les paramètres et packages; il vous suffit de vous familiariser avec la signification de ces mots clés en lisant le fichier README de use-package
.
En résumé, le :init
bloc est exécuté au démarrage, comme si vous aviez placé ses formes constitutives au niveau supérieur (c'est-à-dire en dehors d'un appel typique à use-package
) de votre user-init-file
. Cela signifie qu'ils sont toujours exécutés, que le package correspondant ait été chargé ou non.
Le :config
bloc, en revanche, est exécuté après le chargement du package correspondant, via le eval-after-load
mécanisme.
En tant que tel, vous pouvez améliorer votre temps de démarrage en déplaçant les paramètres de longue durée applicables de :init
à :config
. Si vous devez modifier une variable qui n'est définie qu'après le chargement d'un package particulier, vous devez également le placer dans le :config
bloc. Certaines variables, telles que gnus-home-directory
, doivent être définies avant le chargement de leur package correspondant, elles doivent donc être placées dans :init
. Je conseille fortement de mettre tous les appels applicables add-hook
/ remove-hook
dans le :init
bloc, car les hooks peuvent être modifiés même lorsqu'ils ne sont pas liés, ce qui offre plus de modularité à votre configuration.
Vous pouvez souvent éviter d'avoir à déterminer où placer un paramètre particulier en utilisant le nouveau :custom
mot clé ou en utilisant directement l'interface de personnalisation facile .
Je ne sais pas s'il existe une règle générale (à part "utiliser :init
pour la préconfiguration avant le chargement réel du paquet et l'utiliser :config
pour une autre configuration)".
Mais j'utilise moi-même :init
quand, par exemple, je veux ajouter d'autres raccourcis clavier de mappage de mode pour utiliser les fonctions de "ce" package. Et je veux toujours que "ce" paquet soit chargé paresseusement.
Voici l'exemple de chargement paresseux de dired-ranger
:
(use-package dired-ranger
:commands (dired-ranger-copy dired-ranger-paste dired-ranger-move)
:init
(add-hook 'dired-mode-hook
(lambda ()
(define-key dired-mode-map (kbd "M-w") 'dired-ranger-copy)
(define-key dired-mode-map (kbd "C-y") 'dired-ranger-paste)
(define-key dired-mode-map (kbd "C-c C-y") 'dired-ranger-move))))
PS: S'il n'y a pas :defer
, :commands
, :mode
et d' autres qui facilite le chargement des paquets paresseux, alors :init
et :config
devrait être plus ou moins les mêmes (mais :init
sera évalué plus tôt :))
:config
c'est trop tard - le chargement paresseux n'appliquera pas mes liaisons. Et :bind
avec :map
ne le lie pas réellement.
:config
n'est pas trop tard - c'est exactement quand dired-mode-map
est défini pour la première fois. Vous le mettez probablement sous la mauvaise use-package
forme dired-ranger
au lieu de dired
, où dired-mode-map
est défini. Cela pourrait également expliquer pourquoi votre :bind
ne fonctionne pas. Fondamentalement, soit vous faites quelque chose de mal, soit vous avez use-package
un bug. Ne confondez pas les raccourcis clavier locaux et eval-after-load
les raccourcis clavier globaux des commandes / cartes de touches chargées automatiquement.
use-package-always-ensure
et lorsque j'essaie d'utiliser dir-package, il ne parvient pas à le récupérer sur elpa. Mais :ensure nil
y avoir résout le problème et je peux configurer le chargement de paquets chaînés dired
-> en dired-ranger
utilisant :after
.
:bind
mot - clé pour cela ou modifier les raccourcis clavier dans le:config
bloc.