回答:
パッケージ構成が必要かどうかをユーザーが決定できるルールはあります
: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
代わりにの間違った形でそれを置いているだけでしょう。また、これはあなたが動作しない理由を説明するかもしれません。基本的に、何か間違ったことをしているか、バグがあります。ローカルのキーバインドと自動ロードされたコマンド/キーマップのグローバルなキーバインドを混同しないでください。dired
dired-mode-map
:bind
use-package
eval-after-load
use-package-always-ensure
したことであり、use-package diredを使おうとすると、elpaから取得できません。しかし、:ensure nil
そこにあることで問題は解決し、チェーンパッケージの読み込みdired
-> dired-ranger
を使用してセットアップできます:after
。
:bind
キーワードを使用するか、:config
ブロック内のキーバインディングを変更できます。