回答:
パッケージ構成が必要かどうかをユーザーが決定できるルールはあります
:initか:config?
すべての設定とパッケージに適用される一般的なルールはありません。のREADMEファイルを読んで、これらのキーワードの意味を理解する必要がありますuse-package。
要約すると、:initブロックは、その構成要素フォームをの最上位(つまり、への通常の呼び出しの外側use-package)に配置したかのように、起動時に実行されますuser-init-file。これは、対応するパッケージがロードされているかどうかに関係なく、常に実行されることを意味します。
:config対応するパッケージがロードされた後のブロックは、一方の方法により、実行されるeval-after-load仕組み。
そのため、適用可能な長期実行設定をから:initに変更することにより、起動時間を改善できます:config。特定のパッケージをロードした後にのみ定義される変数を変更する必要がある場合、同様に:configブロックに配置する必要があります。などの一部の変数は、gnus-home-directory対応するパッケージをロードする前に設定する必要があるため、に配置する必要があります:init。私は強く、適用されるすべての入れ助言add-hook/のremove-hook中に呼び出しを:initフックにしても結合していない変更することができるよう、ブロック、およびセットアップには、このもたらすよりモジュール性。
多くの場合、新しい:customキーワードを使用するか、簡単なカスタマイズインターフェイスを直接使用することにより、特定の設定を配置する場所を把握する必要がなくなります。
一般的なルールがあるかどうかはわかりません(「:init実際のパッケージを読み込む前に事前設定に使用し:config、他の設定に使用する」以外)。
しかし、私は:init、たとえば、「this」パッケージの機能を使用するために、他のモードマップキーバインドを追加する場合に使用します。そして、「この」パッケージを遅延ロードしたいのです。
の遅延読み込みの例を次に示し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:何も存在しない場合は:defer、:commands、:modeおよび他の人が、その後、パッケージのロードが怠惰になり、その:initと:config(しかし、多かれ少なかれ同じでなければなりません:init:)先に評価されます)
:config、手遅れです。遅延読み込みではバインドが適用されません。そして:bind、:map実際にはそれをバインドしません。
:config手遅れではありません-それdired-mode-mapはまさに最初に定義されたときです。あなたはおそらく、定義されているuse-packageのdired-ranger代わりにの間違った形でそれを置いているだけでしょう。また、これはあなたが動作しない理由を説明するかもしれません。基本的に、何か間違ったことをしているか、バグがあります。ローカルのキーバインドと自動ロードされたコマンド/キーマップのグローバルなキーバインドを混同しないでください。direddired-mode-map:binduse-packageeval-after-load
use-package-always-ensureしたことであり、use-package diredを使おうとすると、elpaから取得できません。しかし、:ensure nilそこにあることで問題は解決し、チェーンパッケージの読み込みdired-> dired-rangerを使用してセットアップできます:after。
:bindキーワードを使用するか、:configブロック内のキーバインディングを変更できます。