Який найшвидший спосіб завантажити мій файл .emacs, коли я вношу зміни, щоб усі мої впливові буфери сприйняли ці зміни?


27

Я в курсі C-x C-eщо eval-last-sexpі M-x eval-buffer, але це не завжди достатньо , щоб забрати всі зміни. Іноді вам потрібно фактично закрити буфери, які перебувають у режимах, які змінили їх конфігурацію, а інший раз вам потрібно повністю перезапустити emacs. Чи існує більш загальний спосіб вирішення цієї проблеми? Як варіант, чи є спосіб перезапустити emacs, не втрачаючи існуючих відкритих буферів та інтерактивної історії?


Як і @ b4hand, спочатку було сказано, що це, по суті, питання, засноване на одному з питань пропозиції: area51.stackexchange.com/proposals/76571/emacs/76588#76588
tarsius

Відповіді:


16

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

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

Ви можете спробувати реалізувати команду для повторного включення основного режиму кожного буфера. Але навряд чи це повністю б увімкнуло всі зміни, і що ще гірше, вимкнуть усі незначні режими, які ви ввімкнули вручну, і втратить всі види іншого стану.

З цієї причини я навіть рекомендую взагалі не використовувати eval-bufferваш файл init, щоб зібрати якомога більше змін. Оцінюйте змінені налаштування індивідуально, використовуючи, eval-last-sexpі якщо це не працює, тоді вам доведеться перезапустити Emacs.

Як зберегти стан, коли Emacs закритий - це інше питання, яке слід задавати окремо.


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

3

Іноді потрібно фактично закрити буфери, які перебувають у режимах, які змінили їх конфігурацію

Виклик normal-modeє корисним способом повторного запуску всіх режимів для даного буфера, якщо ви внесли зміни в ці або пов'язані з ними гачки.

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

(Ви також можете перезавантажити файл з C-xC-v, але це буде відкидати історію скасування.)

У M-x ibufferдрукуючи верхнього регістру VСкасовує всі відмічені буфера, а прописні Eі Wдозволяють оцінити довільну Elisp для всіх зазначених буферів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.