这是从.Emacs加载用户.el文件的正确Emacs(24.3.2)lisp样式吗?

这是从.Emacs加载用户.el文件的正确Emacs(24.3.2)lisp样式吗?,emacs,elisp,Emacs,Elisp,我在“~/.emacs.d”目录中有几个.el文件,我在.emacs文件中添加了以下行,以便在启动时加载它们: (let ((base "~/.emacs.d/") (files '("user.el" "erlang.el" "sbcl-slime.el")) (bfload (lambda (file) (load (expand-file-name (concat base file)))))) (mapcar bfload files)) 它可以工作,但这

我在“~/.emacs.d”目录中有几个.el文件,我在.emacs文件中添加了以下行,以便在启动时加载它们:

(let ((base "~/.emacs.d/")
      (files '("user.el" "erlang.el" "sbcl-slime.el"))
      (bfload (lambda (file) (load (expand-file-name (concat base file))))))
   (mapcar bfload files))

它可以工作,但这是正确的Emacs Lisp样式吗?请如何改进这一点?

首先,不要将.el文件直接放入~/.emacs.d中(emacs会将各种文件放入其中,它们不应是Elisp包)。例如,您可以将它们放入
~/.emacs.d/pkgs

那么:

(dolist (file '("user.el" "erlang.el" "sbcl-slime.el"))
  (load (expand-file-name file "~/.emacs.d/pkgs"))

您可以将Stefan关于将这些文件移动到单独目录的出色建议与init loader混合使用


您将有一些额外的特权(自动字节编译文件),并且不需要维护文件列表(只需在该目录中移动/创建一个文件)。

基于Stefan的示例,我只添加了一个
file-exists-p

(dolist (file '("user.el" "erlang.el" "sbcl-slime.el"))
  (let ((f (expand-file-name file "~/.emacs.d/pkgs")))
    (if (file-exists-p f)
      (load f))))

我想,这是我将使用的版本。

通常,您会将它们添加到
加载路径
,然后
要求
(这意味着您正在加载的文件提供了一些东西。)有些人宁愿在加载相应的模式之前不需要这些文件:@wvxvw实际上那些
*.el
文件只是提供程序的包装(只为它们设置正确的路径),我只是不想把
.emacs
文件弄得乱七八糟。
init loader
是一个非常有趣的项目,但只是有点膨胀到我的想法。但是谢谢你的指点
file-exists-p
是个好主意。您还可以使用
load
noerror
参数来获得相同的结果。