2010-12-05 3 views
16

У меня есть буфер в каком-то основном режиме, а в другом буфере - сам файл режима (* .el). После того, как я отредактирую файл * .el, я хочу увидеть изменения, отраженные в первом буфере, без перезапуска emacs. Я попытался запустить функцию -mode, но не изменил буфер. СпасибоКак перезагрузить основной режим emacs?

ответ

0

Когда вы редактируете источник режима, вы должны убедиться, что вы оцениваете функции, которые вы меняете, - сохранить их в одном файле недостаточно, потому что внутри Emacs все равно будет использовать старый код.

Например, вы можете перейти к концу определения функции, с которой работаете с M-C-e, и оценить функцию с помощью C-x C-e. С этого момента Emacs будет использовать текущее определение.

Это также относится к определению режима, но часто при вызове режима с Mx-именем режима реализовано в виде переключателя: вы вызываете его один раз, он активирует режим, вы вызываете его снова, он деактивирует режим , Поэтому вам, возможно, придется дважды нажать M-x mode-name.

+0

Для всех различных способов (повторной) оценки elisp см. Http://www.masteringemacs.org/articles/2010/11/29/evaluating-elisp-emacs/ – phils 2010-12-06 03:01:38

14
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 

Примечание: Когда вы l опускание файла, defvar не отменяет существующие значения, поэтому, если вы измените значения в вызове на defvar, вам нужно будет их оценить конкретно, выполнив CMx, когда ваш курсор находится в выражении devfar, или используя Mx: и набрав в выражении. См. this page для документации по оценке lisp в Emacs.

+1

Вместо переключения режима вы также можете do `Mx normal-mode` – scottfrazer 2010-12-06 02:15:46

26

Если режим обеспечивает функцию (как это необходимо!) С помощью (provide 'foo-mode), то вы можете

M-x unload-feature RET foo-mode RET

, а затем загрузить режим снова в обычном режиме (с помощью foo-mode, если у вас есть соответствующая автозагрузка, или с помощью load-library или load-file).

+3

Я этого раньше не видел. В документации отмечается, что это вызовет ошибку, если есть другой загруженный код, который требует этой функции, но вы можете принудительно выгрузить с помощью префикса arg. – phils 2010-12-06 02:58:47

Смежные вопросы