2009-08-01 9 views
116

Ich habe beschlossen, Emacs zu überprüfen, und mir hat es sehr gut gefallen. Jetzt verwende ich die Emacs Starter Kit, die bessere Standardeinstellungen und einige nette Anpassungen zur Standardinstallation von Emacs bietet.Wie kann ich alles in meinem .emacs.d-Verzeichnis byte-compilieren?

Ich habe es ein wenig angepasst, fügte einige Sachen wie yasnippet, color-themes, unbound und andere Sachen hinzu. Ich habe ein github repository eingerichtet, wo ich alle Anpassungen behalte, damit ich von mehreren Orten auf sie zugreifen kann, oder für den Fall, dass etwas schief geht und ich mein .emacs.d-Verzeichnis verliere.

All dies ist sehr schön, aber es gibt ein Problem: Emacs dauert etwa 1-2 Sekunden zum Laden. AFAIK Ich kann einzelne .el-Dateien mit M-x Byte-Compile-Datei zu .elc kompilieren, und es funktioniert. Aber es gibt viele .EL-Dateien, und ich frage mich, ob es eine Möglichkeit gibt, sie alle mit einem einfachen Befehl oder etwas zu kompilieren, um das Laden von Emacs zu beschleunigen. Mein Emacs ist nicht immer geöffnet, und ich öffne und schließe ihn ziemlich häufig, besonders nachdem ich ihn als Standard-Editor für den Bearbeitungsbefehl in Total Commander eingerichtet habe, um mich daran schneller zu gewöhnen (yeah, windows xp hier).

Meine Emacs-Version ist 22.3. Und ja, die Standard-Emacs-Installation ohne Anpassungen wird sofort gestartet.

Ich bin nicht sicher, welche Version bevorzugt wird beim Laden, die .el oder kompiliert .elc man übrigens Oo

So gibt es einen elisp Befehl oder Emacs-Befehlszeilenoption, um Emacs alles-Byte-kompilieren im Verzeichnis .emacs.d?

Antwort

182

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

werden alle .el Dateien im Verzeichnis erstellen und in allen folgenden Unterverzeichnisse.

Der C-u 0 Teil ist, damit es nicht nach jeder .el-Datei fragt, die kein .elc-Gegenstück hat.

+8

und danach (jeweils einmal einmal kompiliert wurde), nur den gleichen Befehl verwenden, ohne das 'Cu 0' (aka' C-0', BTW). Dadurch werden nur die Quelldateien kompiliert, die aktueller sind als ihre Byte-kompilierten Versionen. – Drew

+1

Eine kleine Anmerkung: für mich hat das nicht funktioniert, bis ich alle entsprechenden «.elc» Dateien entfernt habe. Es sagte nur etwas wie «Fertig, 0 Dateien gepackt, α Dateien übersprungen». –

+1

@ Hi-Angel Ich habe das gleiche Problem. Hast du irgendeine Lösung gefunden? – zhanxw

15

Das ist ein bisschen von der Frage schwankend, aber das Problem der Belastung zu lösen langsam Sie den neuen Dämon-Funktion in Emacs 23.

„Wenn Sie haben eine Menge Support-Pakete verwenden können, Emacs Start kann ein wenig langsam sein. Allerdings Emacs 23 bringt Emacs --daemon, mit dem Sie Emacs im Hintergrund starten können (zum Beispiel , wenn Sie sich einloggen). Sie können sofort pop up neue Emacs Windows (Frames) mit emacsclient.Natürlich könnten Sie bereits einen Emacs 'Server' inhabenälteren Versionen, aber diese eine viel schönere Lösung macht in der Lage, es im Hintergrund starten“

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

+0

Ich werde es auf jeden Fall überprüfen. Vielen Dank! – Mikka

+2

Wenn Sie alias emacs = 'emacsclient -nw -a "-c" zu Ihrer .bashrc (oder Ihrer Shell-Version) hinzufügen, wird zuerst versucht, eine Verbindung zu einem laufenden Daemon herzustellen, falls vorhanden, andernfalls wird er gestartet eins und dich verbinden. – Frederick

41

automatisch auf das Byte alles zusammenstellen, die jedes Mal muss ich Emacs starten, Byte-Kompilierung I setzt die folgende nach meinen Änderungen load-path an der Spitze meiner .emacs Datei:

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

Überraschenderweise ist es nicht hinzufügen, viel zu meiner Startzeit (es sei denn somethi ng muss kompiliert werden).

Um meine Emacs zu beschleunigen, habe ich zuerst die langsamen Teile mit profile-dotemacs.el identifiziert und dann durch autoloads ersetzt.

20

Sie können das --batch Flag verwenden, um über die Befehlszeile neu zu kompilieren.

alle neu kompilieren, tun

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

oder eine einzelne Datei neu zu kompilieren, wie von einem Makefile,

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

verwenden Sie stattdessen [batch-byte-compile] (http://www.gnu.org/software/emacs/manual/html_node/elisp/Compilation-Functions.html#index-batch_002dbyte_002dcompile-909). – npostavs

+0

Könntest du es benutzen? – nacho4d

+4

@ nacho4d 'emacs -Q --batch -f Batch-Byte-Kompilieren * .el foo/*. El' - es rekursiert nicht wie ** byte-recompile-Verzeichnis ** tut aber. –