Я знаю, C-x C-e
что eval-last-sexp
и есть M-x eval-buffer
, но этого не всегда достаточно, чтобы забрать все изменения. Иногда вам нужно на самом деле закрыть буферы, которые находятся в режимах с измененной конфигурацией, а в других случаях вам необходимо полностью перезапустить emacs. Есть ли более общий способ решения этой проблемы? В качестве альтернативы, есть ли способ перезапустить Emacs без потери существующих открытых буферов и интерактивной истории?
27
Ответы:
Нет, невозможно перезагрузить измененную конфигурацию и заставить Emacs вести себя так, как если бы эти изменения уже были на момент загрузки Emacs. Короче говоря, пакеты Emacs имеют слишком много свободы, чтобы это было осуществимо.
Вы упоминаете, что некоторые основные режимы не принимают изменения конфигурации. Вероятная причина этого заключается в том, что включение режима устанавливает некоторые локальные переменные буфера на основе текущих значений определенных параметров. Без повторного включения такого режима в каждом буфере, который его использует, не все изменения будут приняты. И даже тогда вполне возможно, что некоторые вещи останутся неизменными. Шансы этой работы выше, когда параметры настраиваются с помощью
custom-set-variables
формы, но это должно быть реализовано явно для каждого параметра. И пока мы говорили только о главных режимах и их вариантах ...Вы можете попытаться реализовать команду для повторного включения основного режима каждого буфера. Но маловероятно, что это полностью активирует все изменения, и что еще хуже, отключит все второстепенные режимы, которые вы включили вручную, и потеряет все виды других состояний.
По этой причине я бы даже рекомендовал вообще не использовать
eval-buffer
ваш файл инициализации, чтобы получить как можно больше изменений. Оцените измененные настройки индивидуально, используя,eval-last-sexp
и если это не сработает, тогда вам нужно перезапустить Emacs.Как сохранить состояние, когда Emacs закрыт, - это другой вопрос, который следует задавать отдельно.
источник
Вызов
normal-mode
- это полезный способ повторно запустить все режимы для данного буфера, если вы внесли изменения в эти или связанные с ними перехватчики.Вы также можете использовать
revert-buffer
(который вызываетnormal-mode
), что похоже на перезагрузку файла без удаления истории отмен.(Вы также можете перезагрузить файл C-xC-v, но это приведет к удалению вашей истории отмены.)
При M-x
ibuffer
вводе заглавных Vбукв все отмеченные буферы возвращаются, тогда как прописные Eи Wпозволяют оценить произвольный elisp для всех отмеченных буферов.источник