TL; DR:
initファイルの先頭(.emacs.d/init.el
または.emacs
)に次の行を追加します。
(package-initialize)
説明
Emacsが使用する可能性のあるファイルをさらに作成することは、user-init-file
間違いなく正しいアプローチではありません。マニュアルには、少なくとも引用した部分ではなく、競合がある場合にどちらが好ましいかが示されていないため、これは混乱を追加することです-実際にどれがuser-init-file
(あなたが望むかもしれない値調べるために検査する)。
だから~/.emacs.d/init.el
、それは不浄な混乱には寄与せず$HOME
、最も重要なものを含むすべてのEmacs構成ファイルを、リポジトリを使用してバージョン管理下に保つことができるため、一般に(ユーザーが)好むものを除くすべての候補を削除することから始めますEmacs。
デフォルトでは、Emacsはユーザーの初期化ファイルがロードされたpackage-initialize
後に呼び出します。それはそう、すべてで、今日ので、ほとんどのユーザーが使用してパッケージをインストールしpackage.el
、彼らはこれらのパッケージが利用できるようにするために何もする必要はありませんので- 。
一方、誰もがそうするわけではないので、を呼び出さないことも可能package-initialize
です。その関数が呼び出されないようにする(setq package-enable-at-startup nil)
には、ユーザーの初期化ファイルに追加します(他の場所に配置できますか?)。
package-initialize
ユーザーがEmacsに変更しないように変更する前に呼び出すことはできないため、initファイルをロードした後に実行する必要があります。ユーザーがパッケージのみをインストールしてからそのまま使用するか、正常に機能するカスタムインターフェイスを使用してカスタマイズする限り。ただし、elispを使用してパッケージをカスタマイズする場合はload-path
、定義する関数を使用する前に、パッケージが実際に有効になっていることを確認する必要があります。
それは非常に簡単で適切に文書化されています(最初に調べていれば、上記のほとんどを書く必要はありませんでした:-/
initファイルのロード後にパッケージの自動ロードが発生する理由は、パッケージングシステムに影響するユーザーオプションを含め、ユーザーオプションがinitファイルのロード後にカスタマイズされた値のみを受け取るためです。状況によっては、initファイルにパッケージを明示的にロードする必要がある場合があります(通常、initファイル内の他のコードはパッケージに依存しているため)。その場合、initファイルは関数を呼び出す必要がありますpackage-initialize
。package-load-list
(以下を参照)などの関連するユーザーオプションがpackage-initialize
通話の前に設定されるようにするのは、ユーザー次第です。また、設定する必要があります
package-enable-at-startup
にnil
、初期化ファイルの処理後にパッケージが再度ロードされるのを防ぐため。または、起動時にパッケージの読み込みを完全に禁止し、コマンド `Mx package-initialize 'を呼び出してパッケージを手動で読み込むこともできます。
そう:
;;; .emacs.d/init.el -- the `user-init-file'
(package-initialize)
(setq package-enable-at-startup nil)
(require 'use-package)
(use-package some-package
:init (setq some-package-variable "foobar")
...
;;; .emacs.d/init.el ends here
もちろん、問題(または追加の問題)は、入力ミスがSymbol's function definition is void: use-packge
initファイルにあり、emacs.seに入力するまで発生しなかった可能性もあります。