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
haha teraz pięć lat później prowadzi tutaj sugerowane „najpierw wyszukiwanie Google”! fajnie
JimLohse
Odpowiedzi:
350
Możesz użyć polecenia load-file ( M-xload-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.
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-xeval-buffer
nie jest tu wymienione.
Natychmiast ocenia cały kod w buforze, jest to najszybsza metoda, jeśli twój .emacsjest idempotentny.
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.
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:
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).
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.
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.
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.
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:
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.
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.
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
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.
źródło
defun
lubdefvar
, możesz także pozostawić go w treści i typie deklaracjiC-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.źródło
.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.źródło
Jeśli masz plik .emacs otwarty w aktualnie aktywnym buforze:
źródło
źródło
Poniższe powinny to zrobić ...
źródło
rozwiązanie
M-:
(load user-init-file)
notatki
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 elispwniosek
M-:
>M-x
źródło
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.
źródło
eval-lastsexp
, coC-x C-e
C-M-x
nie musisz być „na końcu seplenienia” - może myślisz o tymC-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łaniaM-x eval-region
. Takie działanie minimalizuje oceniany kod, minimalizując wszelkie niezamierzone skutki uboczne, jak wskazuje luapyad.źródło
Skrót klawiszowy:
źródło
źródło
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:
źródło
Zdefiniuj go w pliku init i wywołaj przez Mx reload-user-init-file
źródło
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ępnieM-x eval-region
. Mam nadzieję że to pomoże.źródło
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.źródło
Oprócz poleceń, takich jak bufor ewaluacyjny Mx lub plik ładujący Mx , możesz ponownie uruchomić świeżego emacsa z wiersza poleceń:
Przykład użycia stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/
źródło
Możesz ustawić przypisywanie klawiszy dla takich emaców jak ten
Mam nadzieję, że to pomoże!
źródło
Jeśli akurat masz otwartą powłokę w Emacsie, możesz także:
Może zaoszczędzić kilka klawiszy.
źródło