el进入便携式emacs配置解决方案

el进入便携式emacs配置解决方案,emacs,Emacs,el-get在帮助实现便携式emacs配置设置方面有很大的帮助。其思想是在emacs配置文件中声明所需的包,将该文件推送到repo,并在所有需要相同emacs配置的计算机上使用它。这是代码在elisp中的外观: (setq my-packages (append '(el-get switch-window yasnippet ...) (mapcar 'el-get-source-name el-get-sources))) (el-get 'syn

el-get
在帮助实现便携式emacs配置设置方面有很大的帮助。其思想是在emacs配置文件中声明所需的包,将该文件推送到repo,并在所有需要相同emacs配置的计算机上使用它。这是代码在
elisp
中的外观:

(setq my-packages (append '(el-get switch-window yasnippet ...)
    (mapcar 'el-get-source-name el-get-sources)))                  
(el-get 'sync my-packages)                                                

el get
将确保软件包自动安装并正确初始化。然而,我的理解是,当您取消引用一个包时,它不会被卸载。如果你手动卸载它,你将不得不在所有的计算机上手动卸载。换句话说,el-get在实现真正的可移植解决方案方面只做了一半。我的问题是,是否有人编写了elisp代码,只需在init.el中取消引用即可卸载这些包?或者我是否应该在别处寻找一个用于emacs的完全可移植的声明性依赖关系管理解决方案?

您应该将el get与某种形式的版本控制结合使用。这提供了可移植性,因此当您删除一个包并将结果提交到存储库时,一旦其他实例拉取了这些更改,该包也将被卸载

如果您将包文件留给el get管理,那么在从一个实例中删除包后,这些文件可能仍然存在于其他副本上,但是,如果el get的状态和自动加载文件在您的repo中,我认为每个包的状态应该是正确的

就个人而言,我建议在安装包后将所有文件提交到存储库。这样,当您删除包、提交更改并从另一个实例中提取这些更改时,两个副本都处于相同的状态

此外,在设置Emacs配置的新实例时,我决不会相信远程源的可用性、一致性或永久性——克隆我的存储库是获得工作系统所需的全部


因此:使用el get安装和更新软件包,并使用版本控制使其可移植。

我在这里回答自己的问题,因为最后我选择了另一种解决方案

phils的答案仍然有效,但我发现将.emacs.d目录置于版本控制之下很麻烦,而且公平地说,我不想为伪子模块而烦恼

我所做的是:我联系了el-get的维护人员Dimitri,并向他提出了问题

迪米特里说:

我可以看到我们添加了一个el-get-cleanup函数,您必须使用当前的包列表调用该函数,该函数将删除本地已安装但不在提供的列表中的任何包

(el获取清理我的包)
然后,如果愿意,您可以从用户init文件中使用它,或者 这是时不时的例行公事

在他的指导下,我写了这个函数

(defun el get cleanup(包)
“删除未明确声明的包”
(let*((要保留的包(el-get依赖项(mapcar'el-get-as-symbol包)))
(要移除的包(设置差异(mapcar'el get为符号
(el获取具有状态的包名称列表)
“已安装”))要保留的软件包)
(mapc'el get remove packages to remove)))
啊,开源的乐趣


(另请参见我的博客)

回答得好。我将尝试建议的方法。我将把整个.emacs.d置于版本控制(git)之下,而不是init.el。对本身就是git回购的远程源有什么特别的考虑吗?是的,有一个技巧你可以使用,叫做。如果您在
el-get/foo
中有一个源于git的包,那么您可以说
git add el-get/foo/
(后面的斜杠很关键)将foo的所有内容添加到外部存储库中。记住,这有一个缺点——当您克隆存储库时,el-get不知道如何更新特定的包,因为包自己的存储库将不存在。我不确定你是否能把假子模块和真子模块结合起来,从而两全其美?我从来没有被这个问题困扰过去发现。好的,非常感谢你的见解。这肯定会让我开始。谢谢!我使用git和el-get使我的设置便携。我不确定如何声明el-get应该在新系统上安装的包,但您的解决方案不仅涵盖了这一点,还包括删除您不再需要的包。明亮的顺便说一下,这个
el get cleanup
函数已经添加到代码库中:@Daniel Szmulewicz:您的代码在别处可用吗?如果是,请修复链接。