yazz.com
yazz.com

Reputation: 58826

How can I reload .emacs after changing it?

How can I get Emacs to reload all my definitions that I have updated in .emacs without restarting Emacs?

Upvotes: 447

Views: 179871

Answers (18)

user4104817
user4104817

Reputation:

Solution

M-: (load user-init-file)


Notes

  • you type it in Eval: prompt (including the parentheses)
  • user-init-file is a variable holding the ~/.emacs value (pointing to the configuration file path) by default
  • (load) is shorter, older, and non-interactive version of (load-file); it is not an Emacs command (to be typed in M-x), but a mere Elisp function

Conclusion

M-: > M-x

Upvotes: 32

Picaud Vincent
Picaud Vincent

Reputation: 10982

Besides commands like M-x eval-buffer or M-x load-file, you can restart a fresh Emacs instance from the command line:

emacs -q --load "init.el"

Usage example: Company backends in GNU Emacs

Upvotes: 3

Vinh Trieu
Vinh Trieu

Reputation: 1083

You can set a key binding for Emacs like this:

;; Reload Emacs configuration
(defun reload-init-file ()
  (interactive)
  (load-file "~/.emacs"))

(global-set-key (kbd "C-c r") 'reload-init-file)

Upvotes: 0

benjaminz
benjaminz

Reputation: 3238

If you happen to have a shell opened inside Emacs, you can also do:

. ~/.emacs

It may save a few key strokes.

Upvotes: -2

AAAfarmclub
AAAfarmclub

Reputation: 2390

I'm currently on Ubuntu 15.04 (Vivid Vervet); I like to define a key for this.

[M-insert] translates to Alt + Ins on my keyboard.

Put this in your .emacs file:

(global-set-key [M-insert] '(lambda() (interactive) (load-file "~/.emacs")))

Upvotes: 4

Peter
Peter

Reputation: 49008

There is the very convenient

M-x eval-buffer

It immediately evaluates all code in the buffer. It's the quickest method if your .emacs file is idempotent.

Upvotes: 184

user1026139
user1026139

Reputation: 21

Although M-x eval-buffer will work, you may run into problems with toggles and other similar things. A better approach might be to "mark" or highlight what’s new in your .emacs file (or even scratch buffer if you're just messing around) and then M-x eval-region.

Upvotes: 2

Bryan Oakley
Bryan Oakley

Reputation: 386362

You can use the command load-file (M-x load-file, and then press Return twice to accept the default filename, which is the current file being edited).

You can also just move the point to the end of any sexp and press C-x, C-e to execute just that sexp. Usually it's not necessary to reload the whole file if you're just changing a line or two.

Upvotes: 422

Joe Casadonte
Joe Casadonte

Reputation: 16889

I suggest that you don't do this, initially. Instead, start a new Emacs session and test whatever changes you made to see if they work correctly. The reason to do it this way is to avoid leaving you in a state where you have an inoperable .emacs file, which fails to load or fails to load cleanly. If you do all of your editing in the original session, and all of your testing in a new session, you'll always have something reliable to comment out offending code.

When you are finally happy with your changes, then go ahead and use one of the other answers to reload. My personal preference is to eval just the section you've added/changed, and to do that just highlight the region of added/changed code and call M-x eval-region. Doing that minimizes the code that's evaluated, minimizing any unintentional side-effects, as luapyad points out.

Upvotes: 13

Bahbar
Bahbar

Reputation: 18015

Others already answered your question as stated, but I find that I usually want to execute the lines that I just wrote.

For that, Ctrl + Alt + X in the Elisp part works just fine.

Upvotes: 16

Matt Kneiser
Matt Kneiser

Reputation: 2156

Keyboard shortcut:

(defun reload-init-file ()
  (interactive)
  (load-file user-init-file))

(global-set-key (kbd "C-c C-l") 'reload-init-file)    ; Reload .emacs file

Upvotes: 10

XYZ
XYZ

Reputation: 27437

Here is a quick and easy way to quick test your config. You can also use C-x C-e at the end of specific lisp to execute certain function individually.

C-x C-e runs the command eval-last-sexp (found in global-map), which is an interactive compiled Lisp function.

It is bound to C-x C-e.

(eval-last-sexp EVAL-LAST-SEXP-ARG-INTERNAL)

Evaluate sexp before point; print value in the echo area. Interactively, with prefix argument, print output into current buffer.

Normally, this function truncates long output according to the value of the variables ‘eval-expression-print-length’ and ‘eval-expression-print-level’. With a prefix argument of zero, however, there is no such truncation. Such a prefix argument also causes integers to be printed in several additional formats (octal, hexadecimal, and character).

If ‘eval-expression-debug-on-error’ is non-nil, which is the default, this command arranges for all errors to enter the debugger.

Upvotes: 2

jacekmigacz
jacekmigacz

Reputation: 789

Define it in your init file and call by M-x reload-user-init-file

(defun reload-user-init-file()
  (interactive)
  (load-file user-init-file))

Upvotes: 5

WisdomFusion
WisdomFusion

Reputation: 510

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

Upvotes: 9

Dale Hagglund
Dale Hagglund

Reputation: 16480

You can usually just re-evaluate the changed region. Mark the region of ~/.emacs that you've changed, and then use M-x eval-region RET. This is often safer than re-evaluating the entire file since it's easy to write a .emacs file that doesn't work quite right after being loaded twice.

Upvotes: 50

digitaldreamer
digitaldreamer

Reputation: 55552

M-x load-file
~/.emacs

Upvotes: 31

Dominic Rodger
Dominic Rodger

Reputation: 99841

If you've got your .emacs file open in the currently active buffer:

M-x eval-buffer

Upvotes: 48

Pace
Pace

Reputation: 43957

The following should do it...

M-x load-file

Upvotes: 13

Related Questions