Как я могу заставить Emacs перезагрузить все мои определения, которые я обновил, .emacs
без перезапуска Emacs?
Как я могу заставить Emacs перезагрузить все мои определения, которые я обновил, .emacs
без перезапуска Emacs?
Ответы:
Вы можете использовать команду load-file ( M-x load-file
, затем дважды нажать return, чтобы принять имя файла по умолчанию, которое является текущим редактируемым файлом).
Вы также можете просто переместить точку в конец любого sexp и нажать, C-xC-eчтобы выполнить только этот sexp. Обычно нет необходимости перезагружать весь файл, если вы просто меняете одну или две строки.
defun
или defvar
вы также можете оставить ее внутри тела и типа объявления C-M-x
. Очень кстати.
Очень странно что очень удобно
M-x eval-buffer
здесь не упоминается
Он сразу оценивает весь код в буфере, это самый быстрый метод, если ваш .emacs
идемпотент.
.emacs
это (или должно быть) идемпотент?
.emacs
не быть идемпотентом?
Обычно вы можете просто переоценить измененный регион. Отметьте область ~ / .emacs, которую вы изменили, и затем используйте M-x eval-region RET
. Это часто безопаснее, чем переоценка всего файла, поскольку легко написать файл .emacs, который не работает сразу после двойной загрузки.
Если у вас есть файл .emacs, открытый в текущем активном буфере:
Mx eval-buffer
M-x load-file
~/.emacs
M-: (load user-init-file)
Eval:
быстро (включая скобки)user-init-file
переменная, содержащая ~/.emacs
значение (указывающее на путь к файлу конфигурации) по умолчанию(load)
это более короткая, старая и неинтерактивная версия (load-file)
; это не команда emacs (для M-xввода), а простая функция elispM-:
> M-x
Другие уже ответили на ваш вопрос, как указано, но я нахожу, что я обычно хочу выполнить строки, которые я только что написал. для этого CtrlAltxв lisp работает просто отлично.
eval-lastsexp
, вC-x C-e
C-M-x
, вам не нужно быть "в конце" - вы думаете о чем-то C-x C-e
? Приятно то, C-M-x
что вы можете вызывать его, даже когда точка находится в середине объявления функции / переменной.
Я предлагаю, чтобы вы не делали этого изначально. Вместо этого, запустите новый сеанс emacs и проверьте все внесенные вами изменения, чтобы убедиться, что они работают правильно. Причина сделать это таким образом, чтобы не оставлять вас в состоянии, когда у вас есть неработоспособный файл .emacs, который не загружается или не загружается чисто. Если вы выполняете все свои редактирования в исходном сеансе и все тесты в новом сеансе, у вас всегда будет что-то надежное, чтобы закомментировать некорректный код.
Когда вы, наконец, довольны своими изменениями, продолжайте и используйте один из других ответов для повторной загрузки. Я лично предпочитаю eval
только тот раздел, который вы добавили / изменили, и для этого просто выделите область добавленного / измененного кода и вызова M-x eval-region
. Это минимизирует оцениваемый код, сводя к минимуму любые непреднамеренные побочные эффекты, как указывает luapyad.
Сочетание клавиш:
(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
Я в настоящее время на Ubuntu 15.04; Мне нравится определять ключ для этого.
[M-insert] переводится как alt-insert на моей клавиатуре.
Поместите это в ваш файл .emacs:
(global-set-key [M-insert] '(lambda() (interactive) (load-file "~/.emacs")))
Определите его в вашем файле инициализации и вызовите через Mx reload-user-init-file
(defun reload-user-init-file()
(interactive)
(load-file user-init-file))
Хотя M-x eval-buffer
сработает, у вас могут возникнуть проблемы с переключателями и другими подобными вещами. Лучшим подходом может быть «пометить» или выделить что-то новое в вашем .emacs (или даже в чистом буфере, если вы просто возитесь), а затем M-x eval-region
. Надеюсь это поможет.
Вот быстрый и простой способ быстро проверить вашу конфигурацию. Вы также можете использовать C-x C-e
в конце определенного lisp, чтобы выполнить определенную функцию индивидуально.
Cx Ce запускает команду eval-last-sexp (находится в global-map), которая является интерактивной скомпилированной функцией Lisp.
Это связано с Cx Ce.
(eval-last-sexp EVAL-LAST-SEXP-ARG-INTERNAL)
Оцените sexp до точки; вывести значение в области эха. Интерактивно, с префиксным аргументом, выведите выходные данные в текущий буфер.
Обычно эта функция усекает длинный вывод в соответствии со значением переменных «eval-expression-print-length» и «eval-expression-print-level». Однако с нулевым аргументом префикса такого усечения нет. Такой префиксный аргумент также заставляет целые числа печататься в нескольких дополнительных форматах (восьмеричный, шестнадцатеричный и символьный).
Если 'eval-expression-debug-on-error' не равно nil, что является значением по умолчанию, эта команда организует все ошибки для входа в отладчик.
Помимо команд, таких как Mx eval-buffer или Mx load-file, вы можете перезапустить свежий emacs из командной строки:
emacs -q --load "init.el"
Пример использования stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/