Как перезагрузить основной режим 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.