注意事项
您的.emacs.d 只能在最后安全地出现在您的load-path 中。这将确保如果您的 .emacs.d 中的文件与库冲突,则该库将优先。使用add-to-list,您可以通过将第三个参数(APPEND)设置为t来做到这一点:
(add-to-list 'load-path (expand-file-name "~/.emacs.d") t)
禁用警告
将'initialization 添加到warning-suppress-types 或warning-suppress-log-types 将抑制警告,但如果您的init 文件出现问题,您也不会看到错误或警告。
我在my .emacs.d 中使用的解决方案是根据警告消息选择性地忽略此警告的建议:
(defadvice display-warning
(around no-warn-.emacs.d-in-load-path (type message &rest unused) activate)
"Ignore the warning about the `.emacs.d' directory being in `load-path'."
(unless (and (eq type 'initialization)
(string-prefix-p "Your `load-path' seems to contain\nyour `.emacs.d' directory"
message t))
ad-do-it))
如果警告消息发生变化,这将需要更新。
组织提示
如果您想将个人文件直接保存在您的.emacs.d 目录中,最好通过为各种包的保存文件创建一个专用目录来整理它,例如:
(defvar my-savefile-dir (expand-file-name "savefiles" "~/.emacs.d")
"The directory for automatically generated save/history/etc. files.")
然后,对于将文件放入 .emacs.d 的每个包,如下所示:
(setq tramp-persistency-file-name
(expand-file-name "tramp" my-savefile-dir))
组织提示更新
自从编写上述内容以来,我发现包通常使用locate-user-emacs-file 来获取它们存储数据的文件的路径。此函数返回user-emacs-directory 中文件的绝对路径。默认情况下,user-emacs-directory 包含您的.emacs.d 的路径,但您可以将其更改为您想要保存文件的目录(您可能还希望在某处保留旧值):
(defvar main-dir user-emacs-directory
"The root directory of my Emacs configuration.")
(setq user-emacs-directory (expand-file-name "savefiles/" main-dir))
;; The trailing slash is mandatory.
这将使大多数包将其文件存储在.emacs.d/savefiles。如果您想创建一个例外,以便给定包将其文件直接存储在 .emacs.d 中,请使用以下内容:
(setq package-user-dir (expand-file-name "elpa" main-dir))
您还必须更改在您的 init 文件之前加载的包的设置,因此使用 user-emacs-directory 的原始值:
(setq auto-save-list-file-prefix
(locate-user-emacs-file "auto-save-list/.saves-"))
此外,一些包使用硬编码路径而不是locate-user-emacs-file,但这也很容易修复:
(setq smex-save-file (locate-user-emacs-file "smex"))
尽管大多数包都使用locate-user-emacs-file,所以根据我的经验,这种组织保存文件的方法比原始“组织提示”中的代码需要更少的代码(在撰写本文时,上述代码片段是唯一的保存文件设置)我的 Emacs 配置,而原始方法需要每个包一行)。
我不知道这种方法是有意使用还是滥用user-emacs-directory 变量。我使用它,到目前为止它没有问题,但你的里程可能会有所不同。