Używam emacsa w różnych miejscach i chcę mieć wszędzie podobną konfigurację i pakiety. Chyba mogę użyć repozytorium kontroli wersji dla plików instalacyjnych. Skoro korzystam z Preludium , byłoby to możliwe ~/.emacs.d/personal/
.
Nie wiem jak zrobić z pakietami. Czy jest gdzieś plik .emacs.d/
z listą zainstalowanych pakietów, których mogę używać do tworzenia emacsa na innych komputerach i instalowania tam wymienionych?
init-file
package
version-control
El Diego Efe
źródło
źródło
Odpowiedzi:
Nie ma automatycznie generowanego pliku manifestu, który można zsynchronizować w celu osiągnięcia pożądanego efektu.
To powiedziawszy, możesz coś dodać do
package-install
samej konfiguracji emacsa.Chodzi o to, że
package-install
jest idempotentny, więc jeśli pakiet jest już obecny, nic się nie wydarzy. Zakładając, że masz takie wywołanie dla każdego używanego pakietu (lub przynajmniej liści na wykresie zależności), które skutecznie synchronizowałyby twoje pakiety na różnych komputerach.W przypadku wielu pakietów można użyć następujących opcji:
źródło
package-install
.package.el
Od tej połączonej odpowiedzi nastąpiły zmiany . Możliwe, że w tym czasiepackage-install
wykonywał operacje na istniejących pakietach, a nie tylko odinstalowanych.Trzymam mój katalog .emacs.d w kontroli wersji. Następnie w moim pliku init.el i kolejnych plikach używam use-package, aby zdefiniować konfigurację pakietu. Pakiet use nie tylko leniwie ładuje twoje pakiety, ale pobiera je na żądanie, jeśli nie istnieją one z repozytoriów pakietów, które skonfigurowałeś.
Na przykład używam trybu go, ale nie na każdym komputerze. W moim init.el mam:
Dodaje to tryb przechwytywania, ale co ważniejsze, podając,
:ensure t
że pobierze pakiet na żądanie.Aby zsynchronizować maszynę, możesz po prostu pobrać kasę lub pobrać repozytorium i uruchomić Emacsa. Wszelkie nowe pakiety zostaną pobrane i zainstalowane.
źródło
:ensure go-mode
powtarzać nazwę pakietu, możesz tylko określić:ensure t
:hook
słowa kluczowego, aby uprościć kod.W Emacs-25 jest zmienna
package-selected-packages
, więc możesz dostosować tę zmienną i użyć,package-install-selected-packages
aby upewnić się, że są one zainstalowane.źródło
To, czego chcesz użyć, to Cask , który pozwala utworzyć plik Cask, określający, na których pakietach zainstalować
cask install
. Może być używany do łatwego zarządzania zależnościami pakietu i „zależnościami” konfiguracji Emacsa. Umieść swój plik Cask pod kontrolą wersji i instaluj / aktualizuj pakiety dla poszczególnych komputerów.źródło
Alternatywnym rozwiązaniem byłoby następujące: ponieważ nie tylko chcesz synchronizować swoje pakiety Emacsa, ale również inne pliki (np
.emacs
,.bashrc
, ale również inne katalogi) między mój serwer i moim laptopie, zacząłem używaćunison
do synchronizacji plików i katalogi. Więc podczas pracy na moim laptopie po prostu biegamunison laptop
przed czymkolwiek innym. Mój~/.unison/laptop.prf
plik ma następującą sekcję dotyczącą plików powiązanych z Emacsem:Ponieważ moje pakiety Emacsa (a także kopie zapasowe i zakładki Emacsa) są w nim przechowywane,
~/.emacs.d
to upewnia się, że mam wszystko na wszystkich moich komputerach.Alternatywnym podejściem byłoby umieszczenie
.emacs.d
katalogu w katalogu zsynchronizowanym z OwnCloud, DropBox lub dowolną inną usługą synchronizacji plików, a następnie utworzenie dowiązań symbolicznych~/.emacs.d
do tego wspólnego katalogu.źródło
Chociaż
package.el
jest to standardowy sposób instalowania pakietów, możesz także spróbować wypróbowaćel-get
to, co jest bardzo przydatne do instalowania pakietów, które nie są (lub nie mogą być) na elpa. Ta odpowiedź dotyczy synchronizacji takich pakietów.Aby upewnić się, że podane pakiety są instalowane podczas korzystania z el-get, należy dodać do pliku init coś takiego jak poniżej
gdzie pakiety to lista pakietów, które chcesz zainstalować. Ta funkcja jest podobna do
package-install
instalowania pakietów tylko wtedy, gdy nie są jeszcze zainstalowane, w przeciwnym razie po prostu inicjuje pakiety.źródło
Używam małej sztuczki „skradzionej” z emacs-starter-kit (tak myślę):
Kiedy potrzebuję pakietu, po prostu używam:
Przy uruchamianiu emacsa, oceniając moją konfigurację,
package.el
zapewni zainstalowanie magit, jeśli nie zostanie zainstalowany.Możesz znaleźć moją konfigurację tutaj:
https://github.com/mdallastella/emacs-config/
źródło
Mam katalog ~ / emacs, który jest kontrolowany w wersji mercurial i zawiera wszystko, z czego składa się moja konfiguracja emacs (~ / emacs / site-lisp dla ręcznie pobranych bibliotek, ~ / emacs / elpa dla bibliotek zainstalowanych na elpa, ~ / emacs / etc / dla podzielonych plików .emacs, ~ / emacs / dot-emacs.el, które symbolizuję jako ~ / .emacs). Wymagało to drobnych poprawek niektórych pakietów, aby wszystkie ważne pliki znajdowały się w tym drzewie, ale działa dobrze. Tych kilka bitów specyficznych dla maszyny zaimplementowałem przez warunkowe nazwy systemu.
Więc po zainstalowaniu / ponownej konfiguracji / zmianie czegokolwiek, po prostu zatwierdzam wszystkie zmiany pomiędzy wszystkimi używanymi maszynami.
Dodatkową korzyścią jest to, że mam pełną historię konfiguracji i mogę wrócić / podzielić na dwie części / przywrócić, jeśli coś pójdzie nie tak.
PS mercurial wydaje się szczególnie odpowiedni, ponieważ ma naturalne dwustronne pull / push, ale podobna konfiguracja nie powinna być trudna do osiągnięcia w przypadku git lub jakiegokolwiek innego dvcs.
źródło
Mam to
setup-packages.el
w konfiguracji emacsa, która jest hybrydą kodu z Preludium i blogu Tomorokoshi na temat zarządzania pakietami .setup-packages.el
wykonuje następujące czynności:elpa
pakietów, jeśli taki nie istnieje i dodaj go wraz z podkatalogami doload-path
.package-archives
listę za pomocą Melpy.my-packages
zainstalowane wszystkie pakiety wymienione na liście. Jeśli pakiet nie jest zainstalowany, zainstaluj go.Jak wdrożyć
setup-packages.el
poniżej w swoim~/.emacs.d/
katalogu.user-emacs-directory
,setup-packages-file
amy-packages
zmienne w twojejinit.el
i zrobić(load setup-packages-file)
.Kiedy uruchomisz emacsa po raz pierwszy na maszynie, która nie ma zainstalowanych tych pakietów, wszystkie pakiety wymienione w
my-packages
zostaną automatycznie zainstalowane.setup-packages.el
init.el
Potrzebne będą następujące elementy
init.el
:źródło
Aby odzwierciedlić moją konfigurację, zdecydowałem się na inne podejście, używając Syncthing ; każda zmiana w dowolnym z moich plików konfiguracyjnych rozprzestrzenia się na dowolny inny komputer bez konieczności dbania o to, więc kiedy aktualizuję pakiety, muszę to zrobić tylko w jednym z komputerów.
źródło
RSYNC : Synchronizuj wybrane foldery / pliki za pomocą
rsync
albo w sieci domowej, albo za pośrednictwemssh
zdalnego serwera.rsync
to narzędzie do synchronizacji w jedną stronę, które jest w stanie usunąć pliki na obiekcie docelowym, dlatego należy wykonać kopię zapasową danych zarówno w lokalizacji źródłowej, jak i docelowej, i dokładnie przetestować przy użyciu tej--dry-run
opcji, zanim zrobisz to w rzeczywistości.Aby przeczytać o tym, jak poprawnie skonfigurować
.authinfo
plik, zobacz https://www.gnu.org/software/emacs/manual/auth.html Przykładowa.authinfo
zawartość pliku (która może zawierać wiele różnych wpisów):Skonfiguruj i użyj tej funkcji
rsync-remote
do synchronizacjissh
ze zdalnym serwerem. Lub użyj funkcjirsync-local
do synchronizacji na tym samym komputerze lub w zaufanej sieci domowej.źródło
https://github.com/redguardtoo/elpa-mirror tworzy lokalne repozytorium wszystkich zainstalowanych pakietów.
Użycie jest proste, wystarczy uruchomić
M-x elpamr-create-mirror-for-installed
.Na innych komputerach włóż
(setq package-archives '(("myelpa" . "~/myelpa/")))
do swojego.emacs
i uruchom ponownie Emacsa.Teraz na wszystkich komputerach otrzymujesz dokładnie taką samą wersję pakietów.
źródło