1

ELPA から、evil と rainbow-delimiters をいくつかインストールしました。

emacs が読み込まれるたびにそれらを実行するには、次のようにします。

(evil-mode)
(global-rainbow-delimiters-mode)

私のinit.elファイルで。

ただし、ELPA からインストールしたため、init.el が読み込まれるまで読み込まれず、両方のシンボルが未定義です。

私が理解している限り、これは私が次のようなことをすることも妨げます

(add-hook 'after-init-hook 'global-rainbow-delimiters-mode)

どうすればこれを回避できますか?

追記: この問題は実際に(package-initialize)は、init.el の開始時に呼び出さなかったために発生しました。これにより、パッケージを使用してインストールされたすべてのもの (evilmode と rainbow-delimiters はそのうちの 2 つだけです) が適切なタイミングでロードされます。

4

3 に答える 3

3

あなたのadd-hookソリューションはうまくいきます。

そこに'global-rainbow-delimiters-modeは名前だけがあり、後でadd-hook呼び出されたときに関数に解決され、その時までに関数が存在します。

ELPAのドキュメントにはこの方法について言及されていますが、最後の手段と見なされているようです。

于 2012-07-25T09:09:58.860 に答える
1

でパッケージを早期に初期化することもできます(package-initialize)。これにより、すべてのコードを 1 つのフックに入れる必要がなくなります。

于 2012-07-25T18:57:44.743 に答える
1

AFAIUがinitファイルをコンパイルするのは良い考えではありませんが、これまでのところ関係ありません。

フックは init を読み取った後、ただしロードされる前に実行されるため、失敗します。ELPA からのロード後に実行する関数が必要です。

eval-after-load を試す

于 2012-07-25T18:52:42.933 に答える