Jak mogę zmusić Emacsa do ponownego załadowania wszystkich moich definicji, które zaktualizowałem .emacs
bez ponownego uruchamiania Emacsa?
Jak mogę zmusić Emacsa do ponownego załadowania wszystkich moich definicji, które zaktualizowałem .emacs
bez ponownego uruchamiania Emacsa?
Odpowiedzi:
Możesz użyć polecenia load-file ( M-x load-file
, a następnie dwukrotnie naciśnij klawisz Return, aby zaakceptować domyślną nazwę pliku, czyli edytowany plik bieżący).
Możesz także przesunąć punkt na koniec dowolnego seksu i nacisnąć, C-xC-eaby wykonać tylko tę sekcję. Zwykle nie trzeba ponownie ładować całego pliku, jeśli zmieniasz tylko jedną lub dwie linie.
defun
lub defvar
, możesz także pozostawić go w treści i typie deklaracji C-M-x
. Bardzo przydatny.
Bardzo dziwne, że bardzo wygodne
M-x eval-buffer
nie jest tu wymienione.
Natychmiast ocenia cały kod w buforze, jest to najszybsza metoda, jeśli twój .emacs
jest idempotentny.
.emacs
jest (lub musi być) idempotentny?
.emacs
nie być idempotentnym?
Zwykle możesz po prostu ponownie ocenić zmieniony region. Zaznacz region ~ / .emacs, który zmieniłeś, a następnie użyj M-x eval-region RET
. Jest to często bezpieczniejsze niż ponowna ocena całego pliku, ponieważ łatwo jest napisać plik .emacs, który nie działa całkiem zaraz po dwukrotnym załadowaniu.
Jeśli masz plik .emacs otwarty w aktualnie aktywnym buforze:
Bufor ewaluacyjny MX
M-x load-file
~/.emacs
M-: (load user-init-file)
Eval:
natychmiast (w tym nawiasy)user-init-file
to zmienna ~/.emacs
domyślnie przechowująca wartość (wskazującą ścieżkę pliku konfiguracyjnego)(load)
jest krótszą, starszą i nieinteraktywną wersją (load-file)
; nie jest to polecenie emacsa (do wpisania M-x), ale zwykła funkcja elispM-:
> M-x
Inni już odpowiedzieli na twoje pytanie, jak stwierdzono, ale uważam, że zwykle chcę wykonać wiersze, które właśnie napisałem. do tego CtrlAltxw seplenienie działa dobrze.
eval-lastsexp
, coC-x C-e
C-M-x
nie musisz być „na końcu seplenienia” - może myślisz o tym C-x C-e
? Zaletą C-M-x
jest to, że można je wywoływać nawet wtedy, gdy punkt znajduje się w środku deklaracji funkcji / zmiennej.
Sugeruję, aby początkowo tego nie robić. Zamiast tego rozpocznij nową sesję emacsa i przetestuj wprowadzone zmiany, aby sprawdzić, czy działają poprawnie. Powodem tego jest uniknięcie pozostawiania cię w stanie, w którym masz niedziałający plik .emacs, który nie ładuje się lub ładuje się czysto. Jeśli wykonasz całą edycję w oryginalnej sesji, a wszystkie testy w nowej sesji, zawsze będziesz mieć coś niezawodnego do skomentowania obrażającego kodu.
Gdy w końcu będziesz zadowolony ze swoich zmian, skorzystaj z jednej z pozostałych odpowiedzi, aby ponownie załadować. Osobiście wolę eval
tylko sekcję, którą dodałeś / zmieniłeś, i aby to zrobić, po prostu zaznacz region dodanego / zmienionego kodu i wywołania M-x eval-region
. Takie działanie minimalizuje oceniany kod, minimalizując wszelkie niezamierzone skutki uboczne, jak wskazuje luapyad.
Skrót klawiszowy:
(defun reload-init-file ()
(interactive)
(load-file user-init-file))
(global-set-key (kbd "C-c C-l") 'reload-init-file) ; Reload .emacs file
C-x C-e ;; current line
M-x eval-region ;; region
M-x eval-buffer ;; whole buffer
M-x load-file ~/.emacs.d/init.el
Jestem obecnie na Ubuntu 15.04; Lubię zdefiniować klucz do tego.
[M-insert] przekłada się na alt-insert na mojej klawiaturze.
Umieść to w swoim pliku .emacs:
(global-set-key [M-insert] '(lambda() (interactive) (load-file "~/.emacs")))
Zdefiniuj go w pliku init i wywołaj przez Mx reload-user-init-file
(defun reload-user-init-file()
(interactive)
(load-file user-init-file))
Chociaż M-x eval-buffer
zadziała, możesz napotkać problemy z przełącznikami i innymi podobnymi rzeczami. Lepszym rozwiązaniem może być „zaznaczenie” lub podkreślenie, co nowego w .emacs (lub nawet buforowanie scratch, jeśli po prostu się bałaganisz), a następnie M-x eval-region
. Mam nadzieję że to pomoże.
Oto szybki i łatwy sposób szybkiego przetestowania konfiguracji. Możesz także użyć C-x C-e
na końcu określonego seplenia, aby wykonać określoną funkcję indywidualnie.
Cx Ce uruchamia polecenie eval-last-sexp (znalezione w global-map), która jest interaktywną skompilowaną funkcją Lisp.
Jest związany z Cx Ce.
(eval-last-sexp EVAL-LAST-SEXP-ARG-INTERNAL)
Oceń sexp przed punktem; wypisz wartość w obszarze echa. Interaktywnie, z argumentem przedrostka, wypisuje dane wyjściowe do bieżącego bufora.
Zwykle funkcja ta obcina długie dane wyjściowe zgodnie z wartością zmiennych „eval-expression-print-length” i „eval-expression-print-level”. Jednak z argumentem prefiksu równym zero nie ma takiego obcięcia. Taki argument przedrostka powoduje również drukowanie liczb całkowitych w kilku dodatkowych formatach (ósemkowym, szesnastkowym i znakowym).
Jeśli „eval-expression-debug-on-error” jest inne niż zero, co jest ustawieniem domyślnym, to polecenie organizuje, aby wszystkie błędy wchodziły do debuggera.
Oprócz poleceń, takich jak bufor ewaluacyjny Mx lub plik ładujący Mx , możesz ponownie uruchomić świeżego emacsa z wiersza poleceń:
emacs -q --load "init.el"
Przykład użycia stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/
Możesz ustawić przypisywanie klawiszy dla takich emaców jak ten
;; reload emacs configuration
(defun reload-init-file ()
(interactive)
(load-file "~/.emacs"))
(global-set-key (kbd "C-c r") 'reload-init-file)
Mam nadzieję, że to pomoże!