遅延initは良いinitです。
(IMO)
使用する場合 with-eval-after-load
with-eval-after-load特定の機能またはファイルが最初にロードされるときに1回ロードされるため、キーマップの変更は明らかにこれらの1つに含まれます。なく、少なくともキーマップが初期化時に知られていない可能性があるため、[のような何かしてみてくださいで]を。フックは、フックが開始されるたびに関数をキーにバインドするため、ここでは良い解決策ではありません。以下のようメガネザルのノート、あなたがすることができます続きを読む理由についてではないにフックでを。(define-key message-mode-map (kbd "C-c f") 'Footnote-add-footnote)emacs -qlocal-set-key
最後に、ノートそのwith-eval-after-loadGNU Emacsの24.4は約2ラインラッパーであるの引用符で囲む必要はありません。eval-after-loadbody
フックを使用する場合
フックは、特定のモードが開始されるなど、基準が満たされるたびにロードされる関数のリストです。フックの一般的な用途は、以下のようなマイナーモード、ロードすることであるflyspell-modeかをhl-line-mode。例(add-hook 'org-agenda-mode-hook 'hl-line-mode)。以下のようレミは指摘し、add-hooksスマートで、フック変数がまだには、ロードされている場合でも、正しいことを行います。それにもかかわらず、私は次のような多くの節を持っています。これらは速度向上にとっては無視できるかもしれませんが、組織と依存関係構造の感覚を与えます:
(with-eval-after-load 'org-agenda
(add-hook 'org-agenda-mode-hook 'hl-line-mode))
後にフックに追加するのはなぜorg-agendaですか?いつものように、C-h v org-agenda-mode-hook C-j配信します。フックはにorg-agenda.el示すように定義されています*help*。
追加機能の読み込み with-eval-after-load
with-eval-after-load追加の機能をロードするためにも重要です。おそらく(with-eval-after-load 'org (require 'org-inlinetask))組織のインラインタスクをロードするようなものが必要でしょう。理由を見るために(find-library "org-inlinetask")。以来org-inlinetasks.el、直接(require 'org)、素敵なすべてのautoloadあなたのやさしいEmacsのメンテナを提供するために、細心の注意を取ったことは、「無視」され、すべてのorg.el(c)ロードされます。
しかし、(個人的な)defun複数の場所が必要な場合はどうでしょうか?あなたが本当にうるさいなら、defunsをあなたの別のファイルに入れてcookie load-pathを追加するautoloadか、Emacsに関数で関数を見つける場所を伝えることができautoloadます。次に、このような何かが動作します:
(autoload 'org-cdlatex-mode "org" "cdlatex mode from org.")
(with-eval-after-load "latex"
(add-hook 'TeX-mode-hook 'org-cdlatex-mode))
またはrequire org、順番に引っ張るのと同じようにできますcdlatex
そして、正直なところ、個人的なdefunは、ほとんどの場合、初期化時間にとっては重要ではありません。私の1150行の個人的なdefuns(84 defuns)は、init.elバニラEmacsに対して0.02秒追加されています。
初期化時間の測定
初期化時間を概算する簡単な方法は
time emacs --eval "(kill-emacs)"
(に対するベンチマークemacs -q。
しかし、初期化のボトルネックがどこにあるかについて、より詳細な概算を得るには、Joe Schaferのをご覧くださいesup。
最後に、ロード時間は魔法のように消えません。プッシュするだけです(各セッションですべての機能を使用する範囲まで)。
with-eval-after-loadが一度ロードされると、キーマップの変更がそこに行きます。フックは、モードが実行されるたびにロードされます。たとえば、モードに関連付けられた新しいファイルのロード時、またはフックが定義されているときです。あなたは、例えばロードでしょうflyspell-modeかhl-line-modeフックインチ 私init.elではwith-eval-after-load約160回とadd-hook110回使用しています。遅延initは良いinit(IMO)です。