use-package-:initまたは:config


13

パッケージ構成が必要かどうかをユーザーが決定できるルールはあります:init:config

回答:


13

パッケージ構成が必要かどうかをユーザーが決定できるルールはあります: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キーワードを使用するか、簡単なカスタマイズインターフェイスを直接使用することにより、特定の設定を配置する場所を把握する必要がなくなります。


2

一般的なルールがあるかどうかはわかりません(「: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:)先に評価されます)


4
モードフックでキーバインディングを変更すると、そのモードでバッファを開くたびに実行されます。パッケージをロードした後、キーバインディングを一度変更するだけです。このために:bindキーワードを使用するか、:configブロック内のキーバインディングを変更できます。
バジル

確かに、それについて考えたことはありません。しかし:config、手遅れです。遅延読み込みではバインドが適用されません。そして:bind:map実際にはそれをバインドしません。
マキシムキム

3
:config手遅れではありません-それdired-mode-mapはまさに最初に定義されたときです。あなたはおそらく、定義されているuse-packagedired-ranger代わりにの間違った形でそれを置いているだけでしょう。また、これはあなたが動作しない理由を説明するかもしれません。基本的に、何か間違ったことをしているか、バグがあります。ローカルのキーバインドと自動ロードされたコマンド/キーマップのグローバルなキーバインドを混同しないでください。direddired-mode-map:binduse-packageeval-after-load
バジル

@バジル、THX、あなたは正しい。私の問題は、私が設定use-package-always-ensureしたことであり、use-package diredを使おうとすると、elpaから取得できません。しかし、:ensure nilそこにあることで問題は解決し、チェーンパッケージの読み込みdired-> dired-rangerを使用してセットアップできます:after
マキシムキム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.