Какой самый быстрый способ перезагрузить мой файл .emacs, когда я внесу изменения, чтобы все затронутые буферы восприняли эти изменения?

27

Я знаю, C-x C-eчто eval-last-sexpи есть M-x eval-buffer, но этого не всегда достаточно, чтобы забрать все изменения. Иногда вам нужно на самом деле закрыть буферы, которые находятся в режимах с измененной конфигурацией, а в других случаях вам необходимо полностью перезапустить emacs. Есть ли более общий способ решения этой проблемы? В качестве альтернативы, есть ли способ перезапустить Emacs без потери существующих открытых буферов и интерактивной истории?

b4hand
источник
Подобно тому, как @ b4hand первоначально заявил, что это по сути вопрос, основанный на одном из вопросов предложения: area51.stackexchange.com/proposals/76571/emacs/76588#76588
tarsius

Ответы:

16

Нет, невозможно перезагрузить измененную конфигурацию и заставить Emacs вести себя так, как если бы эти изменения уже были на момент загрузки Emacs. Короче говоря, пакеты Emacs имеют слишком много свободы, чтобы это было осуществимо.

Вы упоминаете, что некоторые основные режимы не принимают изменения конфигурации. Вероятная причина этого заключается в том, что включение режима устанавливает некоторые локальные переменные буфера на основе текущих значений определенных параметров. Без повторного включения такого режима в каждом буфере, который его использует, не все изменения будут приняты. И даже тогда вполне возможно, что некоторые вещи останутся неизменными. Шансы этой работы выше, когда параметры настраиваются с помощью custom-set-variablesформы, но это должно быть реализовано явно для каждого параметра. И пока мы говорили только о главных режимах и их вариантах ...

Вы можете попытаться реализовать команду для повторного включения основного режима каждого буфера. Но маловероятно, что это полностью активирует все изменения, и что еще хуже, отключит все второстепенные режимы, которые вы включили вручную, и потеряет все виды других состояний.

По этой причине я бы даже рекомендовал вообще не использовать eval-bufferваш файл инициализации, чтобы получить как можно больше изменений. Оцените измененные настройки индивидуально, используя, eval-last-sexpи если это не сработает, тогда вам нужно перезапустить Emacs.

Как сохранить состояние, когда Emacs закрыт, - это другой вопрос, который следует задавать отдельно.

Tarsius
источник
Я задал вопрос о перезапуске здесь: emacs.stackexchange.com/questions/639/…
b4hand
3

Иногда вам нужно фактически закрыть буферы, которые находятся в режимах, у которых изменилась конфигурация

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

Вы также можете использовать revert-buffer(который вызывает normal-mode), что похоже на перезагрузку файла без удаления истории отмен.

(Вы также можете перезагрузить файл C-xC-v, но это приведет к удалению вашей истории отмены.)

При M-x ibufferвводе заглавных Vбукв все отмеченные буферы возвращаются, тогда как прописные Eи Wпозволяют оценить произвольный elisp для всех отмеченных буферов.

Phils
источник