什么是打包我的Emacs安装(包和配置)的最佳方式,以便可以快速安装到任何地方?

Nik*_*hil 11 emacs

我通常通过登录到远程计算机(通常是AWS)来编写代码.我有一个相当大的包列表,我使用的和一个相当大的.emacs.el.虽然我可以在nay远程计算机上快速安装emacs,但我正在寻找一种方法来"打包"我的emacs并将其存放在某处,以便我可以在我登录的任何计算机上快速安装它.什么是最好的方法呢?

Ehv*_*nce 7

首先,您显然会将所有内容捆绑到源代码控制中(私有文件除外).Bitbucket和Gitlab提供私人回购.

您可以看到此wiki,以便列出init文件中所有需要的包.(这实际上是Prelude使用的)

然后我看到了一些选择.

使用Cask

有些人使用Cask来管理包依赖,有些则不然

Cask文件列出了所有依赖项:

(depends-on "cask")
(depends-on "dash")
(depends-on "evil")
Run Code Online (Sandbox Code Playgroud)

使用组织模式

有些人在org-mode中编写配置并通过调用org-babel来加载它,这在以下一行中是可行的~/.emacs.d/init.el:

(require 'org)
(require 'ob-tangle)
(org-babel-load-file (expand-file-name "~/.emacs.d/myemacs.org"))
Run Code Online (Sandbox Code Playgroud)

将配置拆分为多个文件

有些人将它分成多个elisp文件.

这里有一些很好的配置值得灵感来自:

init-elpa.el,他定义了一个函数,该函数在参数中包含一个包,如果它不存在则安装它:

 (defun require-package (package &optional min-version no-refresh)
    "Install given PACKAGE, optionally requiring MIN-VERSION.
    If NO-REFRESH is non-nil, the available package lists will not be
     re-downloaded in order to locate PACKAGE."
  (if (package-installed-p package min-version)
  t
  (if (or (assoc package package-archive-contents) no-refresh)
  (package-install package)
  (progn
  (package-refresh-contents)
  (require-package package min-version t)))))
Run Code Online (Sandbox Code Playgroud)

在每个文件中,他使用:

(require-package 'dired+)
Run Code Online (Sandbox Code Playgroud)

还提交已安装的软件包

为了使您的配置更快安装,您也可以将已安装的软件包添加到源代码管理中.这样,您还可以确保拥有相同的环境.


phi*_*ils 5

我总是建议使用整个 ~/.emacs.d版本控制,包括所有包和其他库.

这有点麻烦,也许有点麻烦,但如果你想保证配置的状态,每次你在新的地方安装它,你需要有一个完整的副本.

使用版本控制是我的公司偏好,因为这使得恢复包等更改变得微不足道.因此,如果升级包并且Emacs中断,那么将它们放回原处是一个单一的步骤(并且这样做不会要求你记住他们是怎么回事.

使用这种方法,克隆单个存储库的行为就是获得已知状态的工作系统所需的全部操作; 它限制了你在可用性,一致性,以及远程数据源持久只是一个存储库(如果你有在本地,甚至随身携带一个副本,你,你都没有远程依赖性)的依赖性.

也就是说,很多人不打扰也不会遇到任何问题,所以对大多数人来说这不是一个关键点.