Respostas:
Existe alguma regra pela qual o usuário possa determinar se a configuração do pacote exige
:initou:config?
Não há regra geral que se aplique a todas as configurações e pacotes; você só precisa se familiarizar com o significado dessas palavras-chave lendo o arquivo README de use-package.
Em resumo, o :initbloco é executado na inicialização, como se você tivesse colocado seus formulários constituintes no nível superior (isto é, fora de uma chamada típica para use-package) do seu user-init-file. Isso significa que eles sempre são executados, independentemente de o pacote correspondente ter sido carregado ou não.
O :configbloco, por outro lado, é executado após o carregamento do pacote correspondente, por meio do eval-after-loadmecanismo.
Dessa forma, você pode melhorar o tempo de inicialização movendo as configurações de execução longa aplicáveis de :initpara :config. Se você precisar modificar uma variável que é definida apenas após o carregamento de um pacote específico, da mesma forma, será necessário colocá-la no :configbloco. Algumas variáveis, como gnus-home-directory, precisam ser definidas antes do carregamento do pacote correspondente, para que sejam colocadas :init. Eu recomendo fortemente colocar todas as chamadas add-hook/ aplicáveis remove-hookno :initbloco, pois os ganchos podem ser modificados mesmo quando desconectados, e isso oferece mais modularidade à sua configuração.
Muitas vezes, você pode evitar ter que descobrir onde colocar uma configuração específica usando a nova :custompalavra-chave ou a interface de Personalização Fácil diretamente.
Não tenho certeza se existe uma regra geral (além de "usar :initpara pré-configuração antes do carregamento real do pacote e usar :configpara outras configurações bem").
Mas eu mesmo uso :initquando, por exemplo, quero adicionar outras combinações de teclas de mapa de modo para usar funções do pacote "this". E ainda deseja que "este" pacote seja carregado preguiçosamente.
Aqui está o exemplo do carregamento lento 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: Se não houver :defer, :commands, :modee outros que faz pacote de carregamento lento, em seguida, :inite :configdeve ser mais ou menos o mesmo (mas :initserá avaliado antes :))
:configé tarde demais - o carregamento lento não aplicará minhas ligações. E :bindcom :mapnão liga realmente.
:confignão é tarde demais - é exatamente quando dired-mode-mapé definido pela primeira vez. Você provavelmente está apenas colocando-o na use-packageforma errada de em dired-rangervez de dired, onde dired-mode-mapé definido. Isso também pode explicar por que o seu :bindnão funciona. Basicamente, você está fazendo algo errado ou use-packagetem um bug. Não confunda as combinações de teclas locais e eval-after-loadas combinações globais de comandos / mapas de teclas carregados automaticamente.
use-package-always-ensuree quando tento usar o pacote dired ele falha ao buscá-lo no elpa. Mas ter :ensure nillá resolve o problema e posso configurar o carregamento de pacotes encadeados dired-> dired-rangerusando :after.
:bindpalavra - chave para isso ou modificar as combinações de teclas no:configbloco.