使用〜/ .emacs.d / init.el代替〜/ .emacs有什么好处吗?


108

我通常将其~/.emacs用于配置文件,但我注意到其他人正在使用~/.emacs.d/init.el。这个init.el位置有优势吗?有什么缺点吗?


4
Emacs(或至少某些emacs版本)自动在.emacs上编写内容。
薇薇

4
@Vivi除非您谈论的是非常旧的版本,否则Emacs会将内容写入user-init-file.emacs如果您已经有一个.emacs,并且init.el使用了它,它将成为。
Radon Rosborough

人们专注于优势,而~/.emacs.d/init.el忽略劣势。我会回答这一部分:它根本没有缺点!
奥马尔

四角切圆,从发行版本27.1开始的Emacs会喜欢XDG配置路径~/.config/emacs/~/.emacs.d/。IIUC,如果前者存在,则不会考虑后者。
菲尔

Answers:


103

是的,有。在Reddit上引用lunaryorn

  • $HOME因为Emacs的所有文件都整齐地包含在单个目录中,所以它使目录整洁。出于同样的原因,所有现代Emacs软件包都将其缓存,历史记录等写入~/.emacs.d/

  • 它使版本控制更加容易,尤其是如果您将init.el拆分为中的不同文件时,尤其如此~/.emacs.d。您可以init.el像提交其他文件一样进行提交,并且git clone /my/emacs/config.git ~/.emacs.d在新系统上,您可以进行所有Emacs配置,而无需将文件链接到$HOME


3
它如何使版本控制更容易?您无需使用即可分割init文件.emacs.d
吉尔斯2014年

3
如果仅具有.emacs文件,它不会使版本控制更容易,但是如果.emacs.d中具有其他emacs文件,它就会使版本控制变得容易。例如,custom将文件保存到.emacs.d中,如果将init.el保留在它们中,则所有受版本控制的emacs文件都位于一个目录中。
Ted Roden 2014年

4
通过对.emacs.d /目录进行完全版本控制,您还可以对通过packages.el(ELPA,MELPA…)安装的软件包进行版本控制。这样可以更轻松地在多台计算机之间共享您的配置,以及查找配置中引入了回归的位置(您可以跟踪依赖关系)。不利的一面是它使存储库非常繁重。
tuxella 2014年

11
版本控制系统不只对一个文件进行版本控制,而是要对文件夹进行版本控制。因此,您进行版本控制~/,并仅添加您的.emacs。但是现在,您必须确保您不提交任何其他文件,因此您可以.hgignore或.gitignore删除~/。中的所有其他文件。但是现在您无法跟踪中的任何其他文件~/,例如~/.bashrc~/.bash_aliases
zck


37

另一个优点是:如果一切都在中.emacs.d,则可以将Emacs配置保留在Dropbox(或替代方法)上,并将整个配置符号链接到主目录。这使得在计算机之间进行同步变得微不足道。


25

如果您想要以自己喜欢的方式设置Emacs的全部内容是一个初始化文件,则无论是~/.emacs还是,它都没有关系~/.emacs.d/init.el。但是在您开始分割初始化文件或添加与Emacs相关的配置(例如,Cask文件)时创建目录是有意义的。同样,在这里您将保存带有缩写定义的文件,用于自定义选项的文件(M-x customize)等。

将所有东西整齐地塞进去~/.emacs.d


6

Emacs的27日将推出一个新的初始化文件early-init-fileuser-emacs-directory,即在~/.emacs.d/early-init.el。因此,使用~/.emacs.d/init.el而不是~/.emacsfor 的另一个好处user-init-file是,前者会将两个初始化文件放在同一屋顶下,以保持一致性。

在发布Emacs 27之前,您可以在Emacs源代码树的以下文件中找到此新功能的文档:


2

不知道这是否真的在速度方面有所不同,但是如果您的配置在其中(即create ),则可以更轻松地字节编译您的设置。.emacs.d/init.el.emacs.d/init.elc


1
请注意,这~/.emacs.el也是一个有效的初始化文件名​​。
phils

1

您可以使用~/.emacs.d/init.el该文件并将其符号链接到该文件~/.emacs,以防万一其他程序/插件希望找到.emacs。

在macOS或GNU / Linux系统上,命令为:

ln -s ~/.emacs.d/init.el ~/.emacs

这样,您可以获得~/emacs.d目录结构VC的所有好处,并且在需要通过编辑init.el文件~/.emacs而不用键入~/emacs.d/init.el👍 时可以使用较短的名称。


这些“期望找到.emacs”的神秘“其他程序/插件”是什么?我认为这不是真正的问题。
菲尔

1
一个示例可能是Quicklisp,如果您执行(ql:add-to-init-file),则默认为〜/ .emacs
cseder

真好奇 我要说的是,任何此类情况都将产生错误报告-Emacs在很长的时间内一直支持各种init文件名,并且优先级序列已明确记录在案,因此没有充分的理由使其他程序不正确。不过,我根本没有期待一个实际的例子:)干杯。
菲尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.