Ich verwende Emacs an verschiedenen Orten und möchte, dass überall ein ähnliches Setup und ähnliche Pakete installiert werden. Ich denke, ich kann ein Versionskontroll-Repository für die Setup-Dateien verwenden. Da ich Prelude benutze , wäre das ~/.emacs.d/personal/
.
Ich weiß nicht, wie ich mit Paketen umgehen soll. Gibt es irgendwo eine Datei .emacs.d/
mit der Liste der installierten Pakete, mit denen ich Emacs auf anderen Computern erstellen kann, um auch die dort aufgelisteten zu installieren?
init-file
package
version-control
El Diego Efe
quelle
quelle
Antworten:
Es gibt keine automatisch generierte Manifestdatei, die Sie synchronisieren können, um den gewünschten Effekt zu erzielen.
Sie können jedoch Anrufe zu
package-install
Ihrer emacs-Konfiguration hinzufügen .Die Idee ist, dass dies
package-install
idempotent ist. Wenn das Paket also bereits vorhanden ist, passiert eigentlich nichts. Angenommen, Sie haben einen solchen Aufruf für jedes von Ihnen verwendete Paket (oder zumindest für die Blätter im Abhängigkeitsdiagramm), der Ihre Pakete effektiv maschinenübergreifend synchronisiert.Für mehrere Pakete können Sie Folgendes verwenden:
quelle
package-install
.package.el
Seit dieser verknüpften Antwort wurden Änderungen vorgenommen . Es ist möglich, dass zu diesem Zeitpunktpackage-install
Vorgänge an vorhandenen Paketen durchgeführt wurden, nicht nur an deinstallierten Paketen.Ich behalte mein .emacs.d-Verzeichnis in der Versionskontrolle. Dann benutze ich in meinem init.el und nachfolgenden Dateien use-package , um das Paket-Setup zu definieren. Use-package lädt Ihre Pakete nicht nur träge, sondern lädt sie auch bei Bedarf herunter, wenn sie nicht aus den von Ihnen eingerichteten Paket-Repos stammen.
Zum Beispiel verwende ich den Go-Modus, aber nicht auf jedem Computer. In meinem Init.el habe ich folgendes:
Dies fügt einen Modus-Hook hinzu, aber was noch wichtiger ist: Durch Angabe
:ensure t
dieses Hooks wird das Paket bei Bedarf heruntergeladen.Um eine Maschine synchron zu halten, können Sie einfach aus dem Repo auschecken oder ziehen und Emacs starten. Alle neuen Pakete werden heruntergeladen und installiert.
quelle
:ensure go-mode
den Paketnamen zu wiederholen, können Sie einfach angeben:ensure t
:hook
Schlüsselwort verwenden, um den Code zu vereinfachen.In Emacs-25 gibt es die Variable
package-selected-packages
, sodass Sie diese Variable anpassen und verwenden könnenpackage-install-selected-packages
, um sicherzustellen, dass sie installiert ist.quelle
Was Sie verwenden möchten, ist Cask , mit dem Sie eine Cask-Datei erstellen können, die angibt, auf welchen Paketen installiert werden soll
cask install
. Es kann verwendet werden, um Abhängigkeiten eines Pakets und "Abhängigkeiten" Ihrer Emacs-Konfiguration mühelos zu verwalten. Versetzen Sie Ihre Cask-Datei in den Versionskontrollmodus und installieren / aktualisieren Sie die Pakete pro Computer.quelle
Ein alternativer Ansatz wäre die folgend sein: da ich nur will nicht , dass meine Emacs - Pakete synchronisieren, sondern auch andere Dateien (zB
.emacs
,.bashrc
aber auch andere Verzeichnisse) zwischen meinem Server und meinem Laptop, ich begann zu verwendenunison
, um die Dateien zu synchronisieren und verzeichnisse. Wenn ich also an meinem Laptop arbeite, starte ich einfachunison laptop
vor allem anderen. Meine~/.unison/laptop.prf
Datei enthält den folgenden Abschnitt für Emacs-bezogene Dateien:Da meine Emacs-Pakete (und auch meine Emacs-Backups und -Lesezeichen) in
~/.emacs.d
diesem Ordner gespeichert sind, ist sichergestellt, dass auf allen meinen Computern alles vorhanden ist.Ein alternativer Ansatz wäre, das
.emacs.d
Verzeichnis in ein Verzeichnis zu legen, das mit OwnCloud, DropBox oder einem anderen Dateisynchronisierungsdienst synchronisiert ist, und dann Symlinks von~/.emacs.d
diesem freigegebenen Verzeichnis zu erstellen .quelle
Während dies
package.el
die Standardmethode zum Installieren von Paketen ist, möchten Sie möglicherweise auch versuchen,el-get
welche sehr nützlich ist , um Pakete zu installieren, die nicht auf elpa sind (oder nicht sein können). Diese Antwort behandelt das Synchronisieren solcher Pakete.Wenn Sie mit el-get sicherstellen, dass bestimmte Pakete installiert sind, müssen Sie Ihrer init-Datei Folgendes hinzufügen
Dabei sind Pakete die Liste der Pakete, die installiert werden sollen. Diese Funktion ähnelt der
package-install
Installation von Paketen nur, wenn diese noch nicht installiert sind. Andernfalls werden die Pakete lediglich initialisiert.quelle
Ich benutze einen kleinen Trick, der aus dem Emacs-Starter-Kit "gestohlen" wurde (glaube ich):
Wenn ich also ein Paket benötige, benutze ich einfach:
Bei Emacs-Starts, die meine Konfiguration auswerten,
package.el
wird Magit installiert, wenn es nicht installiert ist.Meine Konfiguration finden Sie hier:
https://github.com/mdallastella/emacs-config/
quelle
Ich habe das ~ / emacs-Verzeichnis, das von der Mercurial-Version gesteuert wird und alles enthält, woraus mein Emacs-Setup besteht (~ / emacs / site-lisp für manuell heruntergeladene Bibliotheken, ~ / emacs / elpa für von elpa installierte Bibliotheken, ~ / emacs / etc / für geteilte .emacs ~ / emacs / dot-emacs.el die ich als ~ / .emacs symlinke). Es erforderte einige Anpassungen an einigen Paketen, um alle wichtigen Dateien in diesem Baum zu haben, aber es funktioniert gut. Die wenigen Bits, die maschinenspezifisch sind, habe ich durch Bedingungen für den Systemnamen implementiert.
Nachdem ich etwas installiert / neu konfiguriert / geändert habe, lege ich einfach fest, dass alle Änderungen zwischen allen von mir verwendeten Computern gezogen / verschoben werden sollen.
Ein zusätzlicher Vorteil ist, dass ich eine vollständige Historie meiner Konfiguration habe und zurück / halbieren / zurücksetzen kann, falls etwas schief geht.
PS mercurial scheint besonders geeignet zu sein, da es ein natürliches zweiseitiges Ziehen / Drücken hat, aber ein ähnliches Setup sollte mit Git oder anderen DVDs nicht schwer zu erreichen sein.
quelle
Ich habe dies
setup-packages.el
in meinem Emacs-Setup, das eine Mischung aus Code aus Prelude und Tomorokoshis Blog über Paketverwaltung ist .setup-packages.el
macht folgendes:elpa
Pakete, falls noch keines vorhanden ist, und fügen Sie es und seine Unterverzeichnisse dem hinzuload-path
.package-archives
Liste mit Melpa.my-packages
Liste aufgeführten Pakete installiert sind. Wenn ein Paket nicht installiert ist, installieren Sie es.Wie implementieren
setup-packages.el
Folgende in Ihrem~/.emacs.d/
Verzeichnis.user-emacs-directory
,setup-packages-file
undmy-packages
Variablen in Ihreminit.el
und tun(load setup-packages-file)
.Wenn Sie emacs zum ersten Mal auf einem Computer starten, auf dem diese Pakete nicht installiert sind, werden alle in aufgeführten Pakete
my-packages
automatisch installiert.setup-packages.el
init.el
Sie benötigen Folgendes in Ihrem
init.el
:quelle
Um meine Konfiguration zu spiegeln, entschied ich mich für einen anderen Ansatz mit Syncthing . Jede Änderung in einer meiner Konfigurationsdateien wird auf einen anderen PC übertragen, ohne dass ich mich darum kümmern muss. Wenn ich also Pakete aktualisiere, muss ich dies nur auf einem der PCs tun.
quelle
RSYNC : Synchronisieren Sie ausgewählte Ordner / Dateien
rsync
entweder über ein Heimnetzwerk oder überssh
einen Remote-Server.rsync
ist eine Synchronisation Utility Einweg , die in der Lage ist zu löschen Dateien auf dem Ziel, so seien Sie sicher Backup- Daten auf den Quell- und Zielpositionen, und gründlich mit der Test ---dry-run
Option, bevor die reale Sache zu tun.Informationen zum ordnungsgemäßen Konfigurieren der
.authinfo
Datei finden Sie unter https://www.gnu.org/software/emacs/manual/auth.html. Ein Beispiel für den.authinfo
Dateiinhalt (der mehrere unterschiedliche Einträge enthalten kann) lautet wie folgt:Konfigurieren und verwenden Sie die Funktion,
rsync-remote
um eine Synchronisierungssh
mit einem Remoteserver durchzuführen. Oder verwenden Sie die Funktionrsync-local
, um auf demselben Computer oder über ein vertrauenswürdiges Heimnetzwerk zu synchronisieren.quelle
https://github.com/redguardtoo/elpa-mirror erstellt ein lokales Repository aller installierten Pakete.
Die Bedienung ist einfach, einfach ausführen
M-x elpamr-create-mirror-for-installed
.Fügen Sie auf anderen Computern
(setq package-archives '(("myelpa" . "~/myelpa/")))
in Ihren.emacs
Emacs ein und starten Sie ihn neu.Jetzt erhalten Sie auf allen Maschinen genau dieselbe Version von Paketen.
quelle