Ich bin ein Anfänger in Emacs (benutze es seit ungefähr 2 Wochen und liebe es). Während ich meine ~/.emacs.d/init.el
Datei aktualisiere und erweitere , hängen die Dinge, die ich dort schreibe, von bestimmten Paketen ab, die ich mit MELPA installiert habe M-x package-install
, von .el
Dateien, die ich selbst geschrieben habe usw.
Meine Frage ist, sollte ich in Zukunft zum Beispiel auf andere Computer umsteigen, wie lässt sich auf dem neuen Computer am besten die gleiche Emacs-Umgebung wie jetzt nahtlos erreichen?
init.el
(zum Beispiel mit git), funktioniert dieser Ansatz auch (basierend aufuse-package
): lunaryorn.com/posts/…~/.emacs.d
Verzeichnis. Verwenden Sie also eine beliebige Methode, um diese zwischen Computern zu synchronisieren. (zB ein Github-Repository oder ein Dropbox-Ordner oder was auch immer für Sie am besten funktioniert).Antworten:
Die richtige Lösung ist
straight.el
, einen Paketmanager zu verwenden , den ich geschrieben habe, um dieses Problem zu lösen. Weitere Informationen hierzu finden Sie in einer anderen Antwort auf diese Frage .Diese Antwort, die Monate vor Beginn meiner Arbeit verfasst wurde
straight.el
, beschrieb zuvor einen streng minderwertigen Weg, um eine Teillösung zu erreichen. Dieser Ansatz wird im Folgenden kurz beschrieben. Ich kann es nicht mehr empfehlen.Auch wenn Sie nicht verwenden möchten
straight.el
, sollten Sie sich zumindest verabschiedenuse-package
. (Nicht, dass sich die beiden gegenseitig ausschließen - ich glaube, das sauberste Setup ergibt sich aus der Verwendung von beiden.)Beginnen Sie mit der Definition einer Liste von Paketen in Ihrer Init-Datei:
Dann installiere sie automatisch:
Wenn Sie Ihre
init.el
Datei unter Versionskontrolle halten, führt die Synchronisierung mit einem anderen Computer dazu, dass Ihre Pakete automatisch installiert werden. Natürlich sind die installierten Versionen völlig anders und es ist nicht zu erwarten, dass Ihre Konfiguration sofort funktioniert. Dies ist ein grundlegender Mangel vonpackage.el
und einer der Gründe, warum dieser Ansatz schlecht ist. Sehen Sie noch einmalstraight.el
. Beachten Sie auch, dass der oben beschriebene Code Ihre Paketliste von Ihrer Konfiguration für diese Pakete trennt, was es schwieriger macht, die Dinge in Ihrer Init-Datei im Auge zu behalten. Dies ist ein weiterer großer Nachteil. Sehen Sie noch einmaluse-package
.quelle
package.el
zum Aktualisieren von Paketen verwenden, werden Sie nicht bereitgestellte Änderungen in Ihrem Repository haben, und Sie müssen ein Commit durchführen, um die Paketaktualisierungen aufzunehmen.M-x list-packages RET U
.straight.el
nur Emacs - Pakete zu installieren. Nix ist eine großartige Idee, aber meines Wissens nach nicht optimal für die Entwicklung von Emacs-Paketen (bitte korrigieren Sie mich, wenn ich mich irre) . Wenn Sie zur Installation von Emacs-Paketen einen Systempaket-Manager verwenden, können Sie deren Quellcode nicht einfach bearbeiten und die Änderungen anschließend festschreiben und in den Upstream übertragen. Als ich mir das letzte Mal eine Nix-Konfiguration für Emacs-Pakete angesehen habe, schien sie übermäßig komplex und derstraight.el
Entwicklungserfahrung generell unterlegen zu sein . Aber was auch immer Ihr Boot schwimmt.Wenn Sie use -package verwenden , können Sie diese Datei von Computer zu Computer verschieben. Wenn Emacs gestartet wird, werden die Pakete abgerufen und konfiguriert, sofern Sie über einen Internetzugang verfügen.
Richten Sie zuerst die Paketbibliothek ein:
Und dann Bootstrap
use-package
:Anstatt Emacs zu konfigurieren und davon auszugehen, dass Pakete installiert sind, können Sie sie jetzt
use-package
sowohl installieren als auch konfigurieren. Zum Beispiel für einige meiner Helmeinstellungen:quelle
init.el
) rüber, aber es steckt noch viel mehr dahinter. Zum Beispiel werden die Dabbrev-Dateien, Ihre benutzerdefinierten Snippets oder jede Menge andere Dinge nicht portiert.:ensure t
auf dieuse-package
Erklärung oder Satzuse-package-always-ensure
zut
. Andernfalls würde es nicht automatisch auf einem anderen System installiert, wenn die Konfiguration kopiert wird.Paketverwaltung der nächsten Generation mit
straight.el
Nach einem langen und frustrierenden Kampf
package.el
, meine Pakete mit + Quelpa zu verwalten, habe ich mich aufgeregt und meinen eigenen Paketmanager geschrieben . Es soll vollständig ersetztpackage.el
werden, indem eine Paketverwaltungserfahrung bereitgestellt wird, die in fast jeder Hinsicht überlegen ist .Sie können die sehr umfangreiche Dokumentation lesen , um mehr über alle Funktionen zu erfahren. Die relevanteste für diese Frage ist jedoch, dass
straight.el
die perfekte Reproduzierbarkeit im Vordergrund steht . Dies bedeutet, dass es keine Rolle spielt, ob Sie Emacs normal oder auf einem neuen Computer starten. Alle lokalen Änderungen sind versionskontrolliert und können in einen kanonischen Zustand zurückgesetzt werden. In der Praxis wird dies erreicht, indem (1) Pakete als Git-Repositorys geklont werden und automatisierte Tools zum Verwalten ihres Zustands bereitgestellt werden; (2) Verwenden der Init-Datei als einzige Wahrheitsquelle für den Paketverwaltungsstatus, wobei keine veränderlichen Daten an anderer Stelle gespeichert werden; und (3) Verwenden optionaler Versionssperrdateien, um genaue Git-Revisionen jedes Pakets sowie aller Rezept-Repositorys und zu spezifizierenstraight.el
selbst.Fügen Sie zunächst das Bootstrap-Snippet ein , das installiert und aktiviert wird
straight.el
. Um sicherzustellen, dass ein Paket installiert ist, rufenstraight-use-package
Sie einfach in Ihrer init-Datei auf:Ja, so einfach ist das. Kein Umgang mit
package-refresh-contents
oder irgendetwas davon. Wenn Sie dieses Formular aus Ihrer Init-Datei entfernen und Emacs neu starten, wird Projectile (anders als in ) nicht mehr geladenpackage.el
. Dies bedeutet, dass Sie sich keine Gedanken darüber machen müssen, ob Ihre Konfiguration auf einem neuen Computer nicht funktioniert, da Sie versehentlich von nicht deklarierten Paketen abhängig waren.Sie können Pakete in Ihrer gesamten Init-Datei installieren, wann und wo immer Sie möchten (es ist nicht erforderlich, eine Liste von Paketen an einem einzelnen Punkt zu deklarieren). Natürlich kannst du das auch einfach machen
wenn Sie die Liste bevorzugen. Ich empfehle jedoch, dass Sie verwenden
use-package
, um Ihre Paketkonfiguration zu verwalten. Zuerst musst du es installieren:Dann, da
straight.el
die Integration mit eingebaut wurdeuse-package
, "funktioniert" folgendes:Sobald Sie Ihre Init-Datei geschrieben haben, um die benötigten Pakete zu installieren, führen Sie sie aus
M-x straight-freeze-versions
, um eine Versionssperrdatei zu speichern~/.emacs.d/straight/versions/default.el
. Sie sollten diese Datei unter Versionskontrolle halten, da Siestraight.el
beim ersten Start von Emacs auf einem neuen Computer die korrekten Versionen aller Ihrer Pakete überprüfen können. (Sie können mit manuell zu den in der Sperrdatei angegebenen Versionen zurückkehrenM-x straight-thaw-versions
.)Um die Idee von maschinenlokalen Punktdateien zu unterstützen, die ich in meiner anderen Antwort erwähnt habe ,
straight.el
bietet sich ein Profilsystem an . Ich empfehle weiterhin die Verwendung von Symlinks für Ihre Punktedateien (in diesem Fallinit.el
Ihre lokale Init-Datei, falls zutreffend, und die Versionssperrdatei, falls Sie eine verwenden möchten).Wenn Sie sich fragen, wie sich der
straight.el
Vergleich mit anderen Paketmanagern gestaltet, lesen Sie den Abschnitt mit den ausführlichen Vergleichen . Aber auch zu allem anderen gibt es viel mehr Dokumentation .quelle
Sie können cask verwenden , um Ihre Pakete zu verwalten. Verwende git / github, um deine Emacs-Dotfiles zu verwalten und zu synchronisieren.
quelle