webdevqa.jp.net

.emacs.dディレクトリ内のすべてをバイトコンパイルするにはどうすればよいですか?

Emacsをチェックアウトすることにしましたが、とても気に入っています。現在、私は Emacs Starter Kit を使用しています。これは、Emacsのデフォルトのインストールに対して、より良いデフォルトとニースのカスタマイズを提供します。

私はそれを少しカスタマイズし、 yasnippetcolor-themesnbound などのようなものを追加しました。 github repository を設定しました。ここで、すべてのカスタマイズを保持して、複数の場所からアクセスできるようにします。

これらはすべて非常に優れていますが、問題があります。Emacsのロードには約1〜2秒かかります。私の知る限り、M-x byte-compile-fileを使用して個々の.elファイルを.elcにコンパイルできます。しかし、多くの.elファイルがあり、Emacsの読み込みを高速化するために、単純なコマンドなどを使用してすべてをコンパイルする方法があるのだろうか。私のEmacsは常に開いているわけではなく、特にTotal Commanderの編集コマンドのデフォルトエディターとして設定してから、より早く慣れるために(頻繁にWindows XPを使用しています)、頻繁に開いたり閉じたりしています。

私のEmacsバージョンは22.3です。そして、はい、カスタマイズなしのデフォルトのEmacsインストールは即座に起動します。

ロード時にどのバージョンが優先されるのかわかりません..elまたはコンパイルされた.elcの方法O.o

だから、Emacsに.emacs.dディレクトリ内のすべてをバイトコンパイルさせるためのelispコマンドまたはEmacsコマンドラインスイッチはありますか?

129
Mikka

C-u 0 M-x byte-recompile-directory

ディレクトリ内および以下のすべてのサブディレクトリ内のすべての.elファイルをコンパイルします。

C-u 0パートは、対応する.elcがないすべての.elファイルについて尋ねないようにすることです。

201

Emacsを起動するたびにバイトコンパイルが必要なすべてを自動的にバイトコンパイルするには、load-pathの変更後に.emacsファイルの先頭に次のコードを追加します。

(byte-recompile-directory (expand-file-name "~/.emacs.d") 0)

驚いたことに、それは私のスタートアップ時間にあまり追加しません(何かをコンパイルする必要がない限り)。

Emacsを高速化するために、まず profile-dotemacs.el を使用して低速部分を特定し、次に autoloads に置き換えました。

44
Richard Hansen

--batchフラグを使用して、コマンドラインから再コンパイルできます。

すべてを再コンパイルするには、次のようにします

emacs --batch --eval '(byte-recompile-directory "~/.emacs.d")'

または、Makefileのように単一のファイルを再コンパイルするには、

emacs --batch --eval '(byte-compile-file "your-elisp-file.el")'
25
Mike Samuel

これは質問から少し揺れていますが、読み込みが遅いという問題を解決するには、Emacs 23の新しいデーモン機能を使用できます。

「多くのサポートパッケージがある場合、emacsの起動は少し遅くなる可能性があります。ただし、emacs 23はemacs --daemonを提供します。これにより、バックグラウンドでemacsを起動できます(ログイン時など)。 emacsclientを使用して新しいemacsウィンドウ(フレーム)をセットアップします。もちろん、以前のバージョンではすでにemacs 'サーバー'を使用できましたが、バックグラウンドでemacs 'server'を起動できるため、これは非常に優れたソリューションになります。

から http://emacs-fu.blogspot.com/2009/07/emacs-23-is-very-near.html

17
mwilliams

私がspacemacsを使用している場合、コマンドはspacemacs/recompile-elpa。コマンド byte-recompile-directoryはファイルをコンパイルしません。

2
Yu Shen