Как перезагрузить основной режим emacs?
У меня есть буфер в каком-то основном режиме, а в другом буфере - сам файл режима (*.el). После того, как я отредактирую файл *.el, я хочу увидеть изменения, отраженные в первом буфере, без перезапуска emacs. Я попытался запустить функцию -mode, но не изменил буфер.
Благодаря
Ответы
Ответ 1
Если ваш режим предоставляет функцию (как и должно быть!) с помощью (provide 'foo-mode)
, вы можете
M-x unload-feature RET foo-mode RET
а затем снова загрузите режим как обычно (используя foo-mode
, если у вас есть соответствующая автозагрузка, или используйте load-library
или load-file
в противном случае).
Ответ 2
M-x load-file your-mode.el
или
M-x eval-buffer
Затем включите и выключите поведение в буфере, предположительно, сделав
M-x your-mode
M-x your-mode
Или, если ваш режим распознает префиксный аргумент
C-u 1 M-x your-mode
Примечание. Когда вы загружаете файл, defvar
не переопределяет существующие значения, поэтому, если вы измените значения в вызове на defvar
, вам нужно будет оценить их конкретно, выполнив C-M-x, когда ваш курсор находится в выражении devfar
или с помощью M-x : и введите текст в выражении. См. эту страницу для документации по оценке lisp в Emacs.
Ответ 3
Когда вы редактируете источник режима, вы должны убедиться, что вы оцениваете функции, которые вы меняете, - сохранить их в одном файле недостаточно, потому что внутри Emacs все равно будет использовать старый код.
Например, вы можете перейти к концу определения функции, с которой работаете с M-C-e, и оценить функцию с помощью C-x C-e. С этого момента Emacs будет использовать текущее определение.
Это тоже работает для определения режима, но часто при вызове режима с именем M-x mode используется как переключатель: вы вызываете его один раз, он активирует режим, вы вызываете его снова, он дезактивирует режим. Таким образом, вам может потребоваться дважды ввести имя режима M-x.