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?


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


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.


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.


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.


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

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

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


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


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.


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.


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

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

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")))

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))

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.


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.



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!


-2

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

. ~/.emacs

Może zaoszczędzić kilka klawiszy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.