Jak mogę ponownie załadować .emacs po zmianie?

375

Jak mogę zmusić Emacsa do ponownego załadowania wszystkich moich definicji, które zaktualizowałem .emacsbez ponownego uruchamiania Emacsa?

Yazz.com
źródło
18
Wiem, że emacs jest często uważany za system operacyjny, ale ... s / reboot / restart /?
William Pursell
6
Nie jestem programistą, więc wiele odpowiedzi, które od razu mają sens dla programistów, niewiele dla mnie
znaczy
4
@MJB celem Przepełnienia stosu jest bycie repozytorium wiedzy dla nawet najbardziej podstawowych pytań. To pytanie idealnie pasuje do celu przepełnienia stosu. Proszę zobaczyć stackoverflow.com/faq
chollida
5
możliwy duplikat stackoverflow.com/questions/2281593/...
Trey Jackson
10
haha teraz pięć lat później prowadzi tutaj sugerowane „najpierw wyszukiwanie Google”! fajnie
JimLohse

Odpowiedzi:

350

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.

Bryan Oakley
źródło
22
Pamiętaj, że nie zawsze może to robić dokładnie to, co myślisz. Jeśli masz zmienne, których zawartość jest flopowana (tj. Ustawienie wartości logicznej na przeciwną), zachowanie nie będzie takie samo jak ładowanie pliku.
chollida
4
Wszelkie skutki uboczne mogą zepsuć pożądane zachowanie: ładowanie plików itp.
vemv
Gdy to robię, pojawia się komunikat: ładuj z konwersją kodu: Wartość symbolu jako zmienna jest nieważna: n
Chris Marie
2
Zamiast przesuwać punkt za defunlub defvar, możesz także pozostawić go w treści i typie deklaracji C-M-x. Bardzo przydatny.
Thomas
151

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 .emacsjest idempotentny.

Piotr
źródło
3
Kto powiedział, że .emacsjest (lub musi być) idempotentny?
Mike
@mike: nie ja. „Biorąc pod uwagę, że b jest prawdziwe” oznacza dla mnie „jeśli a, b jest prawdziwe”, ale rozumiem, co masz na myśli. Zmieniam dane na, jeśli dla większej przejrzystości.
Peter
7
@mike: Kiedy miałoby sens .emacsnie być idempotentnym?
Zaz
Myślałbym, że to pierwsza sugestia.
Stryker
1
Nie powiedziałbym, że to dobry styl, ale może się zdarzyć. Na przykład możesz zrezygnować z redefiniowania funkcji, jeśli jest już zdefiniowana (od pierwszego uruchomienia). Podczas oceny pliku init może nie być widoczna zmiana jego definicji.
Kaligule,
43

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.

Dale Hagglund
źródło
2
Ciekawy. Nie zastanawiałem się nad pomysłem pliku .emacs, który nie byłby idempotentny. Coś, na co trzeba uważać, gdy zaczynam od ELisp
Erik
2
Sądzę, że rzadko zdarza się znaleźć plik .emacs, który jest idempotentny, przynajmniej w silnym znaczeniu dwóch wykonań, których wynikiem jest dokładnie taki sam stan jak jedno wykonanie. Przynajmniej dołączanie do różnych list jest często dość powszechne, często w taki sposób, aby nie pomijać zduplikowanych wpisów przy drugim wykonywaniu.
Dale Hagglund,
1
Jeszcze jedna myśl: stosując podejście, które sugeruję powyżej, możliwe, że stan emacsa, który masz, nie jest tym, co faktycznie robi .emacs. To znaczy, ponieważ nie wykonałeś całego pliku .emacs z czystego konta, tak naprawdę nie wiesz, że robi to, co chcesz.
Dale Hagglund,
1
Biorąc to pod uwagę, czy nie byłoby możliwe napisanie .emacs w idempotentny sposób? Globalny stan jest niepewny.
Ehtesh Choudhury
39

Jeśli masz plik .emacs otwarty w aktualnie aktywnym buforze:

Bufor ewaluacyjny MX
Dominic Rodger
źródło
12
Jedną z rzeczy, o których należy pamiętać, jest to, że wykonanie tego może nie pozostawić cię w stanie identycznym z podejściem do ponownego uruchomienia. (Przemyślany przykład: jeśli miałeś efekt przełączania w swoich .emacs).
luapyad
28
M-x load-file
~/.emacs
digitaldreamer
źródło
1
W ten sposób dowiedziałem się, że w mojej instalacji systemu Windows 7 folder .emacs.d znajdował się w folderze% appdata% zamiast w folderze domowym użytkowników.
Bassdrop Cumberwubwubwub
14

Poniższe powinny to zrobić ...

M-x load-file
Tempo
źródło
13

rozwiązanie

M-: (load user-init-file)


notatki

  • wpiszesz go Eval:natychmiast (w tym nawiasy)
  • user-init-fileto zmienna ~/.emacsdomyś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 elisp

wniosek

M-: > M-x


źródło
to M-:> Ctrl Alt x? w oparciu o twoją logikę Wyobrażam sobie M-: <CMx, gdy zmienia się tylko jedna linia w pliku init? Może to tylko ==
Robert Houghton
12

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.

Bahbar
źródło
3
Zobacz także eval-lastsexp, coC-x C-e
Derek Slager
Dzięki C-M-xnie musisz być „na końcu seplenienia” - może myślisz o tym C-x C-e? Zaletą C-M-xjest to, że można je wywoływać nawet wtedy, gdy punkt znajduje się w środku deklaracji funkcji / zmiennej.
Thomas
Prawdopodobnie przyzwyczaiłem się do końca seplenienia, kiedy używałem tylko Cx Ce. Dzięki za haczyk!
Bahbar
9

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ę evaltylko 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.

Joe Casadonte
źródło
9

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
Matt Kneiser
źródło
znakomity! To jest bardzo dobre!
PinkCollins
7
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
WisdomFusion
źródło
4

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")))
AAAfarmclub
źródło
3

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))
jacekmigacz
źródło
2

Chociaż M-x eval-bufferzadział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.

użytkownik1026139
źródło
2

Oto szybki i łatwy sposób szybkiego przetestowania konfiguracji. Możesz także użyć C-x C-ena 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.

Lorem Ipsum Dolor
źródło
2

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/

Picaud Vincent
źródło
Pytanie dotyczy tego, jak to zrobić bez ponownego uruchamiania Emacsa. Uruchomienie nowej kopii, mimo że technicznie odpowiada na pytanie, wydaje się nie pasować do ducha pytania. 😄
chwarr
0

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!

Vinh Trieu
źródło
-2

Jeśli akurat masz otwartą powłokę w Emacsie, możesz także:

. ~/.emacs

Może zaoszczędzić kilka klawiszy.

Benjaminz
źródło