Я использую emacs в разных местах, и я хочу, чтобы аналогичные настройки и пакеты были установлены везде. Я думаю, что я могу использовать хранилище контроля версий для установочных файлов. Так как я использую Prelude , это было бы ~/.emacs.d/personal/
.
Я не знаю, как делать с пакетами. Есть ли где-нибудь файл .emacs.d/
со списком установленных пакетов, которые я могу использовать для создания emacs на других машинах, чтобы также установить перечисленные там?
init-file
package
version-control
Эль Диего Эфе
источник
источник
Ответы:
Там нет автоматически сгенерированного файла манифеста, который вы можете синхронизировать для достижения желаемого эффекта.
Тем не менее, вы можете добавить вызовы
package-install
в свою конфигурацию emacs.Идея в том, что
package-install
он идемпотентен, поэтому, если пакет уже присутствует, на самом деле ничего не произойдет. Предполагая, что у вас есть такой вызов для каждого пакета, который вы используете (или, по крайней мере, листьев в графе зависимостей), это будет эффективно синхронизировать ваши пакеты между компьютерами.Для нескольких пакетов вы можете использовать следующее:
источник
package-install
.package.el
этого связанного ответа произошли изменения . Возможно, что в данный моментpackage-install
выполняются операции с существующими пакетами, а не только с неустановленными.Я держу свой каталог .emacs.d в управлении версиями. Затем в моем файле init.el и последующих файлах я использую use-package для определения настроек пакета. Программа use-package не только лениво загружает ваши пакеты, но и загружает их по требованию, если они не существуют в каких-либо репозиториях пакетов, которые вы настроили.
Например, я использую go-mode, но не на каждой машине. В моем init.el у меня есть следующее:
Это добавляет ловушку режима, но что более важно, указав, что
:ensure t
она будет загружать пакет по требованию.Чтобы синхронизировать машину, вы можете просто оформить заказ или вытащить из репозитория и запустить Emacs. Любые новые пакеты будут загружены и установлены.
источник
:ensure go-mode
чтобы повторять имя пакета, вы можете просто указать:ensure t
:hook
ключевое слово, чтобы упростить ваш код.В Emacs-25 есть переменная
package-selected-packages
, так что вы можете настроить эту переменную и использовать ее,package-install-selected-packages
чтобы убедиться, что они установлены.источник
То, что вы хотите использовать, - это Cask , который позволяет вам создать файл Cask, указывающий, на какие пакеты устанавливать
cask install
. С его помощью можно легко управлять зависимостями пакета и «зависимостями» вашей конфигурации Emacs. Поместите свой файл Cask в систему контроля версий и устанавливайте / обновляйте пакеты для каждого компьютера отдельно.источник
Альтернативный подход был бы следующее: так как я не только хочу , чтобы синхронизировать свои пакеты Emacs, но и другие файлы (например
.emacs
,.bashrc
, но и другие каталоги) между моим сервером и моим ноутбуком, я начал использоватьunison
, чтобы синхронизировать файлы и каталоги. Поэтому, работая на своем ноутбуке, я просто бегаюunison laptop
раньше всего. В моем~/.unison/laptop.prf
файле есть следующий раздел для файлов, связанных с Emacs:Поскольку мои пакеты Emacs (а также мои резервные копии и закладки Emacs) хранятся в
~/.emacs.d
этом, это гарантирует, что у меня есть все на всех моих машинах.Альтернативный подход - поместить
.emacs.d
каталог в каталог, который синхронизируется с OwnCloud, DropBox или любым другим сервисом синхронизации файлов, а затем создать символические ссылки~/.emacs.d
на этот общий каталог.источник
Хотя
package.el
это стандартный способ установки пакетов, вы также можете попробовать,el-get
что очень полезно для установки пакетов, которых нет (или не может быть) в elpa. Этот ответ касается синхронизации таких пакетов.Вы гарантируете, что указанные пакеты установлены при использовании el-get, добавив в файл инициализации что-то вроде следующего
где пакеты - это список пакетов, которые вы хотите установить. Эта функция аналогична
package-install
установке пакетов только в том случае, если они еще не установлены, в противном случае она просто инициализирует пакеты.источник
Я использую маленький трюк, «украденный» из emacs-starter-kit (я думаю):
Поэтому, когда мне требуется пакет, я просто использую:
На emacs стартапы, оценивая мой конфиг,
package.el
предоставят установить magit, если он не установлен.Вы можете найти мою конфигурацию здесь:
https://github.com/mdallastella/emacs-config/
источник
У меня есть каталог ~ / emacs, который управляется версией mercurial и содержит все, из чего состоит моя установка emacs (~ / emacs / site-lisp для загружаемых вручную библиотек, ~ / emacs / elpa для библиотек, установленных elpa, ~ / emacs / etc / для разделенных .emacs, ~ / emacs / dot-emacs.el, которые я символически обозначаю как ~ / .emacs). Требовалась некоторая настройка некоторых пакетов, чтобы все важные файлы были внутри этого дерева, но это работает хорошо. Те несколько битов, которые являются машинно-специфичными, я реализовал условно по имени системы.
Поэтому после того, как я что-то установил / переконфигурировал / изменил, я просто фиксирую изменения / подталкивание всех изменений между всеми машинами, которые я использую.
Дополнительным преимуществом является то, что у меня есть полная история моей конфигурации и я могу вернуться / bisect / revert, если что-то пойдет не так.
PS Mercurial кажется особенно подходящим, так как он имеет естественное двухстороннее натяжение / нажатие, но подобную настройку не должно быть трудно осуществить с помощью git или любого другого dvcs.
источник
У меня это есть
setup-packages.el
в моей настройке emacs, которая представляет собой гибрид кода из Prelude и блога Tomorokoshi по управлению пакетами .setup-packages.el
делает следующее:elpa
пакетов, если он не существует, и добавьте его и его подкаталоги вload-path
.package-archives
список с помощью Melpa.my-packages
списке. Если пакет не установлен, установите его.Как реализовать
setup-packages.el
ниже в свой~/.emacs.d/
каталог.user-emacs-directory
,setup-packages-file
иmy-packages
переменные вinit.el
и делать(load setup-packages-file)
.Когда вы впервые запустите emacs на машине, на которой не установлены эти пакеты, все пакеты, перечисленные в,
my-packages
будут автоматически установлены.Настройка-packages.el
init.el
Вам понадобится следующее в вашем
init.el
:источник
Чтобы отразить мой конфиг, я решил использовать другой подход, используя Syncthing ; каждое изменение в любом из моих конфигурационных файлов распространяется на любые другие мои ПК, не заботясь об этом, поэтому, когда я обновляю пакеты, мне нужно сделать это только в одном из ПК.
источник
RSYNC : синхронизировать выбранные папки / файлы с использованием
rsync
либо по домашней сети, либо черезssh
удаленный сервер.rsync
является утилитой односторонней синхронизации, которая может удалять файлы на целевом объекте, поэтому обязательно сделайте резервную копию ваших данных как в исходном, так и в целевом расположениях, и тщательно протестируйте эту--dry-run
опцию, прежде чем приступить к реальной работе.Чтобы прочитать о том, как правильно настроить
.authinfo
файл, см. Https://www.gnu.org/software/emacs/manual/auth.html Пример.authinfo
файла (который может содержать несколько разных записей):Сконфигурируйте и используйте функцию
rsync-remote
для синхронизацииssh
с удаленным сервером. Или используйте функциюrsync-local
для синхронизации на том же компьютере или через доверенную домашнюю сеть.источник
https://github.com/redguardtoo/elpa-mirror создает локальный репозиторий всех установленных пакетов.
Использование простое, просто запустить
M-x elpamr-create-mirror-for-installed
.На других машинах, вставьте
(setq package-archives '(("myelpa" . "~/myelpa/")))
в ваш.emacs
и перезапустить Emacs.Теперь на всех машинах вы получаете абсолютно одинаковую версию пакетов.
источник