Comment puis-je demander à Emacs de recharger toutes mes définitions que j'ai mises à jour .emacs
sans redémarrer Emacs?
Comment puis-je demander à Emacs de recharger toutes mes définitions que j'ai mises à jour .emacs
sans redémarrer Emacs?
Réponses:
Vous pouvez utiliser la commande load-file ( M-x load-file
, puis appuyez deux fois sur retour pour accepter le nom de fichier par défaut, qui est le fichier en cours de modification).
Vous pouvez également déplacer le point à la fin de n'importe quel sexp et appuyer sur C-xC-epour exécuter uniquement ce sexp. Habituellement, il n'est pas nécessaire de recharger le fichier entier si vous changez simplement une ligne ou deux.
defun
ou defvar
, vous pouvez également le laisser à l'intérieur du corps et du type de déclaration C-M-x
. Très utile.
Très étrange que le très pratique
M-x eval-buffer
n'est pas mentionné ici.
Il évalue immédiatement tout le code dans le tampon, c'est la méthode la plus rapide, si votre .emacs
est idempotent.
.emacs
c'était (ou devait être) idempotent?
.emacs
ne pas être idempotent?
Vous pouvez généralement simplement réévaluer la région modifiée. Marquez la région de ~ / .emacs que vous avez modifiée, puis utilisezM-x eval-region RET
. C'est souvent plus sûr que de réévaluer le fichier entier car il est facile d'écrire un fichier .emacs qui ne fonctionne pas tout à fait après avoir été chargé deux fois.
Si vous avez ouvert votre fichier .emacs dans le tampon actuellement actif:
Mx eval-buffer
M-x load-file
~/.emacs
M-: (load user-init-file)
Eval:
invite (y compris les parenthèses)user-init-file
est une variable contenant la ~/.emacs
valeur (pointant vers le chemin du fichier de configuration) par défaut(load)
est une version plus courte, plus ancienne et non interactive de (load-file)
; ce n'est pas une commande emacs (à taper M-x) mais une simple fonction elispM-:
> M-x
D'autres ont déjà répondu à votre question comme indiqué, mais je trouve que je veux généralement exécuter les lignes que je viens d'écrire. pour cela, CtrlAltxdans le lisp fonctionne très bien.
eval-lastsexp
, àC-x C-e
C-M-x
, vous n'avez pas besoin d'être "à la fin du lisp" - pensez-vous C-x C-e
peut-être? Ce qui est bien, C-M-x
c'est que vous pouvez l'invoquer même lorsque le point est au milieu d'une déclaration de fonction / variable.
Je suggère que vous ne fassiez pas cela au départ. Au lieu de cela, démarrez une nouvelle session emacs et testez toutes les modifications que vous avez apportées pour voir si elles fonctionnent correctement. La raison pour procéder de cette manière est d'éviter de vous laisser dans un état où vous avez un fichier .emacs inutilisable, qui ne se charge pas ou ne se charge pas proprement. Si vous effectuez toutes vos modifications dans la session d'origine et tous vos tests dans une nouvelle session, vous aurez toujours quelque chose de fiable pour commenter le code incriminé.
Lorsque vous êtes enfin satisfait de vos modifications, allez-y et utilisez l'une des autres réponses pour recharger. Personnellement, je préfère eval
simplement la section que vous avez ajoutée / modifiée, et pour ce faire, mettez simplement en évidence la région du code ajouté / modifié et appelez M-x eval-region
. Faire cela minimise le code évalué, minimisant tout effet secondaire involontaire, comme le souligne luapyad.
Raccourci clavier:
(defun reload-init-file ()
(interactive)
(load-file user-init-file))
(global-set-key (kbd "C-c C-l") 'reload-init-file) ; Reload .emacs file
C-x C-e ;; current line
M-x eval-region ;; region
M-x eval-buffer ;; whole buffer
M-x load-file ~/.emacs.d/init.el
Je suis actuellement sur Ubuntu 15.04; J'aime définir une clé pour cela.
[M-insert] se traduit par alt-insert sur mon clavier.
Mettez ceci dans votre fichier .emacs:
(global-set-key [M-insert] '(lambda() (interactive) (load-file "~/.emacs")))
Définissez-le dans votre fichier init et appelez par Mx reload-user-init-file
(defun reload-user-init-file()
(interactive)
(load-file user-init-file))
Bien que M-x eval-buffer
cela fonctionne, vous pouvez rencontrer des problèmes avec les bascules et autres choses similaires. Une meilleure approche pourrait être de "marquer" ou de mettre en évidence ce qui est nouveau dans votre .emacs (ou même un tampon de travail si vous ne faites que jouer), puis M-x eval-region
. J'espère que cela t'aides.
Voici un moyen rapide et facile de tester rapidement votre configuration. Vous pouvez également utiliser C-x C-e
à la fin du lisp spécifique pour exécuter certaines fonctions individuellement.
Cx Ce exécute la commande eval-last-sexp (trouvée dans global-map), qui est une fonction Lisp interactive compilée.
Il est lié à Cx Ce.
(eval-last-sexp EVAL-LAST-SEXP-ARG-INTERNAL)
Évaluer sexp avant le point; valeur d'impression dans la zone d'écho. De manière interactive, avec l'argument préfixe, imprimer la sortie dans le tampon actuel.
Normalement, cette fonction tronque la sortie longue en fonction de la valeur des variables «eval-expression-print-length» et «eval-expression-print-level». Avec un argument de préfixe de zéro, cependant, il n'y a pas une telle troncature. Un tel argument de préfixe entraîne également l'impression d'entiers dans plusieurs formats supplémentaires (octal, hexadécimal et caractère).
Si «eval-expression-debug-on-error» n'est pas nul, ce qui est la valeur par défaut, cette commande organise toutes les erreurs pour entrer dans le débogueur.
À côté des commandes comme Mx eval-buffer ou Mx load-file, vous pouvez redémarrer un nouveau emacs à partir de la ligne de commande:
emacs -q --load "init.el"
Exemple d'utilisation stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/
Vous pouvez définir une liaison de clé pour emacs comme celui-ci
;; reload emacs configuration
(defun reload-init-file ()
(interactive)
(load-file "~/.emacs"))
(global-set-key (kbd "C-c r") 'reload-init-file)
J'espère que cela vous aidera!