Jestem początkującym w Emacsie (używam go od około 2 tygodni i kocham). Gdy aktualizuję i rozszerzam mój ~/.emacs.d/init.el
plik, rzeczy, które tam piszę, zależą od niektórych pakietów, które zainstalowałem z MELPA M-x package-install
, od .el
plików, które sam napisałem itp.
Moje pytanie brzmi: czy powinienem w przyszłości na przykład przełączać komputery, jaki jest najlepszy sposób, aby bezproblemowo uzyskać takie samo dokładne środowisko Emacs na nowym komputerze, jak teraz?
init.el
(używając na przykład git), to podejście działa również (w oparciu ouse-package
): lunaryorn.com/posts/…~/.emacs.d
katalog, więc użyj dowolnej metody synchronizacji między komputerami. (np. repozytorium Github, folder Dropbox lub cokolwiek, co działa najlepiej dla Ciebie).Odpowiedzi:
Prawidłowym rozwiązaniem jest użycie
straight.el
menedżera pakietów, który napisałem w celu rozwiązania tego problemu. Więcej informacji na ten temat można znaleźć w innej odpowiedzi na to pytanie .Ta odpowiedź, napisana kilka miesięcy przed rozpoczęciem pracy
straight.el
, poprzednio opisywała zdecydowanie gorszy sposób osiągnięcia częściowego rozwiązania. Podejście to opisano krótko poniżej; Już go nie polecam.Nawet jeśli nie chcesz używać
straight.el
, powinieneś przynajmniej adoptowaćuse-package
. (Nie chodzi o to, że te dwa wykluczają się wzajemnie - uważam, że najczystsza konfiguracja pochodzi z użycia obu).Zacznij od zdefiniowania listy pakietów w pliku inicjującym:
Następnie zainstaluj je automatycznie:
Jeśli
init.el
plik będzie pod kontrolą wersji, synchronizacja go z innym komputerem spowoduje automatyczne zainstalowanie pakietów. Oczywiście zainstalowane wersje będą zupełnie inne i nie można oczekiwać, że konfiguracja będzie działać od razu po wyjęciu z pudełka. Jest to podstawowa wadapackage.el
i jeden z powodów, dla których takie podejście jest złe. Zobacz jeszcze razstraight.el
. Zauważ też, że powyższy kod oddziela listę pakietów od konfiguracji dla tych pakietów, co utrudnia śledzenie rzeczy w pliku inicjującym. To kolejna poważna wada. Zobacz jeszcze razuse-package
.źródło
package.el
do aktualizacji pakietów, będziesz mieć niestabilne zmiany w repozytorium i będziesz musiał dokonać zatwierdzenia, aby uwzględnić aktualizacje pakietów.M-x list-packages RET U
.straight.el
tylko do instalowania pakietów Emacsa. Nix jest świetnym pomysłem, ale o ile wiem, nie jest dobrze zoptymalizowany pod kątem tworzenia pakietów Emacsa (popraw mnie, jeśli się mylę) . Jeśli użyjesz menedżera pakietów systemowych do zainstalowania pakietów Emacsa, nie będziesz mógł po prostu edytować ich kodu źródłowego, a następnie zatwierdzić i pchnąć zmiany w górę. Ostatnim razem, gdy patrzyłem na konfigurację Nix dla pakietów Emacsa, wydawało się to zbyt skomplikowane i ogólnie gorsze odstraight.el
doświadczenia programistycznego. Ale cokolwiek płynie twoją łodzią.Jeśli używasz pakietu use , możesz przenosić ten plik z komputera na komputer, a gdy Emacs się uruchomi, dopóki masz dostęp do Internetu, pobierze pakiety i je skonfiguruje.
Najpierw skonfiguruj bibliotekę pakietów:
A następnie bootstrap
use-package
:Teraz zamiast konfigurować Emacsa i zakładać, że pakiety są instalowane, użyj
use-package
zarówno do ich instalacji, jak i konfiguracji. Na przykład dla niektórych ustawień mojego steru:źródło
init.el
, ale jest o wiele więcej. Na przykład nie spowoduje to przeniesienia plików dabbrev, niestandardowych fragmentów ani żadnej innej tony.:ensure t
douse-package
deklaracji lub ustawićuse-package-always-ensure
nat
. W przeciwnym razie nie byłoby automatycznie instalowane w innym systemie po skopiowaniu konfiguracji.Zarządzanie pakietami nowej generacji za pomocą
straight.el
Po długiej i frustrującej walce o użycie
package.el
+ Quelpa do zarządzania moimi pakietami, ugryzłem kulę i napisałem własnego menedżera pakietów . Jest on przeznaczony do całkowitego zastąpieniapackage.el
zapewniając doświadczenie zarządzania pakietami, który jest lepszy w prawie każdym względem.Możesz przeczytać bardzo obszerną dokumentację, aby dowiedzieć się o wszystkich jej funkcjach, ale najbardziej odpowiednia dla tego pytania jest
straight.el
koncentracja na doskonałej odtwarzalności . Oznacza to, że nie powinno mieć znaczenia, czy uruchamiasz Emacsa normalnie, czy uruchamiasz go na nowej maszynie, a wszelkie lokalne zmiany są kontrolowane przez wersję i można je przywrócić do stanu kanonicznego. W praktyce osiąga się to poprzez (1) klonowanie pakietów jako repozytoria Git oraz zapewnienie automatycznych narzędzi do zarządzania ich stanem; (2) wykorzystanie pliku init jako jedynego źródła prawdy dla stanu zarządzania pakietami, bez żadnych zmiennych danych przechowywanych gdzie indziej; oraz (3) użycie opcjonalnych plików blokujących wersji w celu określenia dokładnych wersji Git każdego pakietu, a także repozytoriów receptur istraight.el
samo.Aby rozpocząć, włóż fragment kodu ładującego , który zostanie zainstalowany i aktywowany
straight.el
. Następnie, aby upewnić się, że pakiet jest zainstalowany, po prostu umieść wywołaniestraight-use-package
w pliku init:Tak, to takie proste. Żadnego zajmowania się
package-refresh-contents
żadnym z tych śmieci. Jeśli usuniesz ten formularz ze swojego pliku inicjującego i zrestartujesz Emacsa, pocisk nie będzie już ładowany (w przeciwieństwie do inpackage.el
). Oznacza to, że nie musisz się martwić, że Twoja konfiguracja w jakiś sposób nie działa na nowym komputerze, ponieważ przypadkowo polegałeś na niezadeklarowanych pakietach.Możesz instalować pakiety gdziekolwiek i kiedykolwiek chcesz, w całym pliku init (nie musisz deklarować ich listy w jednym punkcie). Oczywiście, że możesz po prostu zrobić
jeśli wolisz listę. Polecam jednak użyć
use-package
do zarządzania konfiguracją pakietu. Najpierw musisz go zainstalować:Następnie, ponieważ
straight.el
ma wbudowaną integrację zuse-package
, następujące „po prostu działa”:Po napisaniu pliku init do zainstalowania potrzebnych pakietów, uruchom,
M-x straight-freeze-versions
aby zapisać plik blokady wersji~/.emacs.d/straight/versions/default.el
. Powinieneś zachować ten plik pod kontrolą wersji, ponieważ pozwolistraight.el
on sprawdzić poprawne wersje wszystkich twoich pakietów, kiedy po raz pierwszy uruchomisz Emacsa na nowej maszynie. (Można ręcznie przywrócić wersje określone w pliku blokującym za pomocąM-x straight-thaw-versions
.)Aby wesprzeć ideę lokalnych plików dotfile, o których wspomniałem w mojej innej odpowiedzi ,
straight.el
oferuje system profili . Nadal zalecam używanie dowiązań symbolicznych do plików dot (w tym przypadku,init.el
lokalnego pliku init, jeśli dotyczy, i pliku blokady wersji, jeśli chcesz go użyć).Jeśli zastanawiasz się, jak
straight.el
wypada w porównaniu z innymi menedżerami pakietów, sprawdź obszerną sekcję porównań . Ale jest też o wiele więcej dokumentacji na wszystko inne .źródło
Możesz użyć beczki do zarządzania swoimi paczkami. Użyj git / github do kontroli źródła i zsynchronizuj pliki dot emacsa.
źródło