Jaki jest najszybszy sposób na ponowne załadowanie pliku .emacs, gdy dokonam zmian, aby wszystkie bufory, których dotyczy problem, wykryły te zmiany?

27

Zdaję sobie sprawę, C-x C-ektóra jest eval-last-sexpi M-x eval-buffer, ale nie zawsze są one wystarczające, aby wychwycić wszystkie zmiany. Czasami musisz faktycznie zamknąć bufory w trybach, których konfiguracja została zmieniona, a innym razem musisz całkowicie zrestartować emacsa. Czy istnieje bardziej ogólny sposób rozwiązania tego problemu? Alternatywnie, czy istnieje sposób na ponowne uruchomienie emacsa bez utraty istniejących otwartych buforów i interaktywnej historii?

b4hand
źródło
Jak pierwotnie stwierdził @ b4hand, jest to zasadniczo pytanie oparte na jednym z pytań propozycji: area51.stackexchange.com/propozycje/76571/emacs/76588#76588
tarsius

Odpowiedzi:

16

Nie, nie można ponownie załadować zmodyfikowanej konfiguracji i Emacs zachowuje się tak, jakby te modyfikacje były już na miejscu, gdy Emacs został załadowany. Krótko mówiąc, pakiety Emacsa mają zbyt dużą swobodę, aby było to możliwe.

Wspominasz, że niektóre główne tryby nie wychwytują zmian konfiguracji. Prawdopodobnym powodem jest to, że włączenie trybu ustawia niektóre lokalne zmienne buforowe na podstawie bieżących wartości niektórych opcji. Bez ponownego włączenia takiego trybu w każdym buforze, który go używa, nie wszystkie zmiany zostaną wykryte. I nawet wtedy jest całkiem możliwe, że niektóre rzeczy pozostają niezmienione. Szanse na to są większe, gdy opcje są dostosowywane za pomocą custom-set-variablesformularza, ale musi to zostać wyraźnie zaimplementowane dla każdej opcji. Do tej pory rozmawialiśmy tylko o głównych trybach i ich opcjach ...

Możesz spróbować zaimplementować polecenie, aby ponownie włączyć tryb główny każdego bufora. Ale jest mało prawdopodobne, aby w pełni umożliwiłoby wszystkie zmiany, a co gorsza, wyłączyłby wszystkie drobne tryby, które ręcznie włączyłeś, i utraciłby wszelkiego rodzaju inne stany.

Z tego powodu odradzałbym nawet w ogóle eval-bufferzapisywanie pliku init, aby pobrać jak najwięcej zmian. Oceń zmienione ustawienia indywidualnie za pomocą, eval-last-sexpa jeśli to nie zadziała, dobrze, musisz ponownie uruchomić Emacsa.

Jak można zachować stan, gdy Emacs jest zamknięty, to inne pytanie, które należy zadać osobno.

Tarsjusz
źródło
Zadałem pytanie o ponowne uruchomienie tutaj: emacs.stackexchange.com/questions/639/…
b4hand
3

Czasami trzeba faktycznie zamknąć bufory w trybach, których konfiguracja została zmieniona

Wywołanie normal-modeto przydatny sposób na ponowne uruchomienie wszystkich trybów dla danego bufora, jeśli dokonałeś zmian w tych lub powiązanych z nimi hookach.

Możesz także użyć revert-buffer(które wywołuje normal-mode), co przypomina przeładowanie pliku bez odrzucania historii cofania.

(Możesz także ponownie załadować plik C-xC-v, ale spowoduje to usunięcie historii cofnięć).

W M-x ibufferwpisywania wielkich liter VPrzywracany wszystkie oznaczone bufory, podczas dużych liter Ei Wpozwalają ocenić arbitralnego Elisp dla wszystkich zaznaczonych buforów.

phils
źródło