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


138

私はEmacsをチェックすることにしましたが、とても気に入りました。今、私はEmacsスターターキットを使用しています。

少しカスタマイズして、yasnippetcolor-themesunboundなどの要素を追加しました。すべてのカスタマイズを保持するgithubリポジトリをセットアップしました。これにより、複数の場所からカスタマイズにアクセスできるようになり、何かがうまくいかず、.emacs.dディレクトリが失われた場合に備えています。

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

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

.elまたはコンパイルされた.elcをロードするときにどちらのバージョンが好ましいかわかりません

それで、Emacsが.emacs.dディレクトリのすべてをバイトコンパイルするようにするelispコマンドまたはEmacsコマンドラインスイッチはありますか?

回答:


208

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

ディレクトリとその下のすべてのサブディレクトリにあるすべての.elファイルをコンパイルします。

C-u 0一部はそれが.elc対応するものがないすべての.elファイルについて質問しないようにすることです。


9
その後(それぞれが1回コンパイルされたら)、同じコマンドをC-u 0(別名C-0、BTW)なしで使用します。これにより、バイトコンパイルされたバージョンよりも新しいソースファイルのみがバイトコンパイルされます。
ドリュー

1
ちなみに、私にとっては、すべての«.elc»ファイルを削除するまで機能しませんでした。«完了、0個のファイルがコンパイルされ、α個のファイルがスキップされました»のようなメッセージが表示されました。
Hi-Angel

1
@ Hi-Angel同じ問題があります。何か解決策を見つけましたか?
zhanxw 2015

@zhanxwうん。残念ながらこのコマンドは、変更されたファイル、または対応する«.elc»がないファイルのみをコンパイルします。したがって、最初にディレクトリ内のすべてを再コンパイルするには、すべての«.elc»ファイルを削除する必要があります。
Hi-Angel、

2
対話型のコマンド残念ながら、それを公開していませんが、関数を呼び出す場合は、直接オプションの引数を使用することができFORCE、すでに彼らは、ソースファイルよりも古いでない方にも関連する「.elc」を持って再コンパイルファイルに:M-: (byte-recompile-directory "/the/directory/" 0 t)
JBM

44

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

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

驚いたことに、(何かをコンパイルする必要がある場合を除いて)起動時間はそれほど長くなりません。

emacsを高速化するために、最初にprofile-dotemacs.elを使用して遅いパーツを特定し、次にそれらをautoloadsに置き換えました。


autoloadsのドキュメントが移動しました。これとprofile-dotemacs.elリファレンスは、このページに出くわしたときにまさに必要だったものです。
Digicrat

24

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

すべてを再コンパイルするには、

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

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

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


1
あなたはそれをどのように使うべきですか?
nacho4d 2014

8
@ nacho4d emacs -Q --batch -f batch-byte-compile *.el foo/*.el- byte-recompile-directoryのように再帰しません。
Brian Burns

3
おそらく、再コンパイルを強制する引数を追加する必要があります。emacs --batch --eval '(byte-recompile-directory "〜/ .emacs.d" 0)'
Ibrahim

17

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

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

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


私は間違いなくこれをチェックするつもりです。ありがとうございました!
ミッカ

2
エイリアスemacs = 'emacsclient -nw -a "" -c'を.bashrc(またはシェルのバージョン)に追加すると、実行中のデーモンが存在する場合は、最初に接続を試み、存在しない場合はデーモンを起動して接続します。君は。
フレデリック14

2

私の使用してspacemacsために、コマンドがありますspacemacs/recompile-elpa。コマンドbyte-recompile-directoryはファイルをコンパイルしません。


2
異なるもの。ELPA / MELPAのものは、独自のアーカイブ階層でビルドメソッドを定義しています。byte-recompile-directoryは、ユーザー定義のディレクトリにあるすべての.elファイルをコンパイルしようとします。
RichieHH
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.