Zdaję sobie sprawę, C-x C-e
która jest eval-last-sexp
i 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?
27
Odpowiedzi:
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-variables
formularza, 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-buffer
zapisywanie pliku init, aby pobrać jak najwięcej zmian. Oceń zmienione ustawienia indywidualnie za pomocą,eval-last-sexp
a 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.
źródło
Wywołanie
normal-mode
to 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łujenormal-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
ibuffer
wpisywania wielkich liter VPrzywracany wszystkie oznaczone bufory, podczas dużych liter Ei Wpozwalają ocenić arbitralnego Elisp dla wszystkich zaznaczonych buforów.źródło