Je suis un débutant dans Emacs (je l'utilise depuis environ 2 semaines maintenant et je l'adore). Au fur et à mesure que je mets à jour et développe mon ~/.emacs.d/init.el
fichier, les choses que j'y écris dépendent de certains packages que j'ai installés à partir de MELPA M-x package-install
, de .el
fichiers que j'ai écrits moi-même, etc.
Ma question est la suivante: devrais-je à l'avenir changer d'ordinateurs par exemple, quelle est la meilleure façon d'obtenir de manière transparente le même environnement Emacs exact sur le nouvel ordinateur que je l'ai maintenant?
init.el
(en utilisant git par exemple), cette approche fonctionne également (basée suruse-package
): lunaryorn.com/posts/…~/.emacs.d
répertoire entier , utilisez donc la méthode que vous préférez pour synchroniser cela entre les machines. (par exemple, un référentiel Github, ou un dossier Dropbox, ou tout ce qui vous convient le mieux).Réponses:
La bonne solution consiste à utiliser
straight.el
un gestionnaire de packages que j'ai écrit pour résoudre ce problème. Vous pouvez trouver plus de détails à ce sujet dans une autre réponse à cette question .Cette réponse, qui a été écrite des mois avant le début de mon travail
straight.el
, décrivait précédemment une manière strictement inférieure de parvenir à une solution partielle. Cette approche est décrite brièvement ci-dessous; Je ne le recommande plus.Même si vous ne voulez pas utiliser
straight.el
, vous devez au moins adopteruse-package
. (Non pas que les deux s'excluent mutuellement - je pense que la configuration la plus propre vient de l'utilisation des deux.)Commencez par définir une liste de packages dans votre fichier init:
Installez-les ensuite automatiquement:
Si vous gardez votre
init.el
fichier sous contrôle de version, sa synchronisation avec une autre machine entraînera l'installation automatique de vos packages. Bien sûr, les versions installées seront complètement différentes, et votre configuration ne devrait pas fonctionner par défaut. Il s'agit d'un défaut fondamental depackage.el
, et c'est l'une des raisons pour lesquelles cette approche est mauvaise. À revoirstraight.el
. Notez également que le code décrit ci-dessus sépare votre liste de packages de votre configuration pour ces packages, ce qui rend plus difficile le suivi des éléments dans votre fichier init. Ceci est un autre inconvénient majeur. À revoiruse-package
.la source
package.el
pour mettre à jour des packages, vous aurez des modifications non programmées dans votre référentiel, et vous devrez faire un commit pour inclure les mises à jour des packages.M-x list-packages RET U
.straight.el
uniquement pour installer les packages Emacs. Nix est une excellente idée, mais il n'est pas bien optimisé pour le développement de paquets Emacs, pour autant que je sache (veuillez me corriger si je me trompe) . Si vous utilisez un gestionnaire de packages système pour installer les packages Emacs, vous ne pourrez pas simplement modifier leur code source, puis valider et pousser vos modifications en amont. La dernière fois que j'ai examiné une configuration Nix pour les packages Emacs, elle semblait trop complexe et généralement inférieure à l'straight.el
expérience de développement. Mais, quoi que flotte votre bateau.Si vous utilisez use-package , vous pouvez déplacer ce fichier d'un ordinateur à l'autre, et quand Emacs démarre, tant que vous avez accès à Internet, il récupérera les packages et les configurera.
Tout d'abord, configurez la bibliothèque de packages:
Et puis bootstrap
use-package
:Maintenant, au lieu de configurer Emacs et de supposer que les packages sont installés, utilisez-les
use-package
pour les installer et les configurer. Par exemple, pour certains de mes paramètres de barre:la source
init.el
), mais il y a beaucoup plus. Par exemple, cela ne portera pas les fichiers dabbrev, ni vos extraits de code personnalisés ou une tonne d'autres choses.:ensure t
à lause-package
déclaration ou définiruse-package-always-ensure
surt
. Sinon, il ne serait pas installé automatiquement sur un autre système lors de la copie de la configuration.Gestion des packages de nouvelle génération avec
straight.el
Après une longue et frustrante lutte pour utiliser
package.el
+ Quelpa pour gérer mes packages, j'ai mordu la balle et écrit mon propre gestionnaire de packages . Il est destiné à remplacer complètementpackage.el
en fournissant une expérience de gestion de package qui est supérieure à presque tous les égards.Vous pouvez lire la documentation très complète pour en savoir plus sur toutes ses fonctionnalités, mais la plus pertinente à cette question est celle qui
straight.el
se concentre sur une reproductibilité parfaite . Cela signifie que peu importe si vous démarrez Emacs normalement ou si vous le démarrez sur une nouvelle machine, et que toutes les modifications locales sont contrôlées par la version et peuvent être rétablies dans un état canonique. Concrètement, cela est réalisé en (1) clonant les packages en tant que référentiels Git et en fournissant des outils automatisés pour gérer leur état; (2) utiliser le fichier init comme seule source de vérité pour l'état de gestion des paquets, sans données mutables stockées ailleurs; et (3) en utilisant des fichiers de verrouillage de version facultatifs pour spécifier les révisions Git exactes de chaque paquet, ainsi que tous les référentiels de recettes etstraight.el
lui-même.Pour commencer, insérez l' extrait de démarrage , qui s'installera et s'activera
straight.el
. Ensuite, pour vous assurer qu'un package est installé, il vous suffit d'appelerstraight-use-package
dans votre fichier init:Oui, c'est aussi simple que cela. Aucun traitement
package-refresh-contents
ou aucune de ces ordures. Si vous supprimez ce formulaire de votre fichier init et redémarrez Emacs, Projectile ne sera plus chargé (contrairement àpackage.el
). Cela signifie que vous n'avez pas à vous soucier que votre configuration ne fonctionne pas sur une nouvelle machine, car vous dépendiez accidentellement de packages non déclarés.Vous pouvez installer des packages où et quand vous le souhaitez, tout au long de votre fichier init (pas besoin d'en déclarer la liste en un seul point). Bien sûr, vous pouvez aussi faire
si vous préférez la liste. Je vous recommande cependant d'utiliser
use-package
pour gérer la configuration de votre package. Vous devez d'abord l'installer:Puis, depuis qu'il
straight.el
a une intégration intégrée avecuse-package
, les éléments suivants "fonctionnent":Une fois que vous avez écrit votre fichier init pour installer les packages dont il a besoin, exécutez
M-x straight-freeze-versions
pour enregistrer un fichier de verrouillage de version dans~/.emacs.d/straight/versions/default.el
. Vous devez garder ce fichier sous contrôle de version, car il permettrastraight.el
de vérifier les versions correctes de tous vos packages, lorsque vous lancerez Emacs pour la première fois sur une nouvelle machine. (Vous pouvez revenir manuellement aux versions spécifiées dans le fichier de verrouillage à l'aide deM-x straight-thaw-versions
.)Pour soutenir l'idée des fichiers dot-machine locaux que j'ai mentionnés dans mon autre réponse ,
straight.el
propose un système de profil . Je recommande toujours d'utiliser des liens symboliques pour vos fichiers dot (dans ce cas,init.el
votre fichier init local si applicable et le fichier de verrouillage de version si vous souhaitez en utiliser un).Si vous vous demandez comment se
straight.el
compare aux autres gestionnaires de packages, consultez la section de comparaisons détaillées . Mais il y a aussi beaucoup plus de documentation sur tout le reste .la source
Vous pouvez utiliser cask pour gérer vos packages. Utilisez git / github pour contrôler les sources et synchroniser vos fichiers dot emacs.
la source