72 votes

Comment puis-je accélérer le démarrage d'Emacs?

J'utilise Emacs v. 22 (la version de la console, soit à distance à l'aide de Mastic ou localement avec Konsole) comme mon principal éditeur de texte sous Linux. Il prend un certain temps à charger à chaque fois que je le démarre, bien que, probablement près d'une seconde, bien que je n'ai jamais chronométré. J'ai tendance à ouvrir et à fermer Emacs beaucoup, parce que je suis plus à l'aise avec le Bash de ligne de commande pour le fichier/répertoire de la manipulation et de la compilation.

Comment puis-je accélérer les temps de démarrage?

60voto

Trey Jackson Points 49816

D'autres, ont assuré à l'aide de gnuserve et emacsclient, et je vous suggère de le compiler dans emacs (être capable de sauter à des erreurs de compilation est une victoire).

Mais, plus précisément l'accélération de la .emacs peut être fait par:

  1. Octet de la compilation de l' .emacs fichier, vous pouvez le faire automatiquement à l'aide de cet extrait de code

  2. Remplacer autant de l' (require 'package) états avec autoloaded fonctionnalité. Cela va retarder le chargement de lisp jusqu'à ce qu'il est réellement nécessaire. En utilisant cette technique m'a permis d'augmenter la vitesse de démarrage de >6 secondes à <1. Cela prend un peu de travail, car pas toutes les bibliothèques viennent correctement marqués autoload.

  3. La suppression du code/les fonctionnalités que vous n'utilisez plus.

  4. Essayez de lancer emacs avec l'option --no-site-file afin d'éviter le chargement des paquets inutiles dans le site d'installation site-start.el.

  5. Si vous êtes vraiment sérieux, vous pouvez rouler vos propres emacs avec votre favori fonctionnalités déjà chargé. Ceci, bien sûr, signifie qu'il est plus impliqués pour apporter des modifications à ce que vous avez dans votre .emacs parce que c'est une partie de la binaire. Suivez le lien pour plus d'informations sur la façon d'utiliser dump-emacs.

  6. Acheter un ordinateur plus rapide et/ou plus rapide du disque.

Comment déterminer ce que votre .emacs charges

Maintenant, comment voulez-vous savoir ce que votre .emacs charges? Avec l'objectif de supprimer la fonctionnalité, ou de la retarder? Vérifiez votre *Messages* de la mémoire tampon, qui contient des lignes comme:

Chargement /home/tjackson/.emacs.tjackson.el (source)...
Chargement /home/tjackson/installé/emacs/lisp/loaddefs.el (source)...fait
Chargement /utilisateur/tjackson/.elisp/source/loaddefs.el (source)...fait
Chargement autorevert fait...
Chargement /home/tjackson/.emacs.tjackson.el (source)...fait

Si vous remarquerez que le Loading états nid: la première .emacs.tjackson.el se termine avec ... et la dernière ligne indique le .emacs.tjackson.el charge ...done. Tous les autres fichiers sont chargés de l'intérieur de mon .emacs.tjackson.el le fichier. Toutes les autres charges sont atomiques.

Remarque: Si vous avez une grande .emacs, il est possible que l' *Messages* tampon allez perdre certains des messages, car il ne conserve qu'un montant fixe de l'information. Vous pouvez ajouter ce paramètre tôt à votre .emacs pour conserver tous les messages autour de:

(setq message-log-max t)

Remarque: Il l' 'load commande va supprimer les messages si sa quatrième argument nomessage est non-nul, de sorte que de supprimer des invocations (ou, conseille 'load et de la force de la quatrième argument nil).

41voto

Török Gábor Points 13913

En plus de Adam Rosenfield la solution, je vous recommande d'utiliser Emacs en mode serveur. Vous pouvez ajouter (server-start) de votre dotemacs, et exécutez emacsclient au lieu de emacs chaque fois que vous voulez ouvrir le fichier dans Emacs. De cette façon, vous avez à payer le coût de chargement d'Emacs qu'une seule fois, d'après les clients de pop up immédiatement.

Modifier

Vous avez raison, v22 ne pas créer une nouvelle image. Créer un script shell qui faire l'affaire:

#!/bin/bash
# Argument: filename to open in new Emacs frame
/usr/bin/emacsclient -e '(let ((default-directory "`pwd`/")) (select-frame (make-frame)) (find-file "'$1'"))'

30voto

hiena Points 780

Ne fermez pas Emacs à chaque fois que vous voulez utiliser le shell. Utilisez Ctrl-Z pour déplacer Emacs en arrière-plan et la commande fg dans Bash pour le ramener au premier plan.

21voto

stsquad Points 2893

Quelques conseils:

  1. Utiliser la charge automatiquement quand

    À l'aide de chargement automatique vous permet d'économiser de chargement des librairies jusqu'à ce que vous les utilisez. Par exemple:

    (if (locate-library "ediff-trees")
        (autoload 'ediff-trees "ediff-trees" "Start an tree ediff" t))
    
  2. Compiler votre .emacs

    Vous donne une légère augmentation de la vitesse même si il y a des pièges, si vous travail avec le contrôle de version et votre .emacs est plus récente que .emacs.elc. Un truc commun est:

    (defun autocompile nil
      "compile itself if ~/.emacs"
      (interactive)
      (require 'bytecomp)
      (let ((dotemacs (expand-file-name "~/.emacs")))
        (if (string= (buffer-file-name) (file-chase-links dotemacs))
          (byte-compile-file dotemacs))))
    
    
    (add-hook 'after-save-hook 'autocompile)
    
  3. Apprendre à aimer emacs serveur.

    L'exécution de emacs comme un serveur signifie ne jamais avoir à le fermer. Cependant Je note ta toujours à l'aide de emacs22. emacs23 supporte le multi-ats qui rend il est beaucoup plus facile à exécuter emacs dans un écran de session, puis de mettre en place de nouvelles fenêtres dans un autre terminal. J'utilise emacs pour éditer mail pour mon mail client (mutt) et emacsclient est fantastique pour ces sortes de modifications rapides.

19voto

Chris Conway Points 24671

Un des

 M-x shell
M-x eshell
M-x term
M-x ansi-term
 

devrait répondre à vos besoins en ligne de commande depuis Emacs.

Vous pouvez également utiliser M-! (alias M-x shell-command ) pour exécuter un one-liner sans tomber dans le shell.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X