让.emacs.d的行为就像.d文件夹一样

让.emacs.d的行为就像.d文件夹一样,emacs,configuration,configuration-files,Emacs,Configuration,Configuration Files,我想解决我的“”问题,我经历了 我还不清楚.emacs.d文件夹是否是解决方案。也就是说,它是否会像一个普通的.d文件夹一样工作,例如,/etc/profile.d/,在这里您可以放下脚本,然后系统会自动神奇地拾取它们。请确认 如果没有,有人能给我一个脚本,这样做,或给我一个解决方案,请 谢谢这是我的~/.emacs: ;; base dirs (defvar dropbox.d "~/Dropbox/") (defvar emacs.d (concat dropbox.d "sourc

我想解决我的“”问题,我经历了




我还不清楚
.emacs.d
文件夹是否是解决方案。也就是说,它是否会像一个普通的.d文件夹一样工作,例如,
/etc/profile.d/
,在这里您可以放下脚本,然后系统会自动神奇地拾取它们。请确认

如果没有,有人能给我一个脚本,这样做,或给我一个解决方案,请


谢谢

这是我的
~/.emacs

;; base dirs
(defvar dropbox.d "~/Dropbox/")
(defvar emacs.d (concat dropbox.d "source/site-lisp/"))
;; load path
(add-to-list 'load-path emacs.d)
(defun add-subdirs-to-load-path (dir)
    (let ((default-directory dir))
      (normal-top-level-add-subdirs-to-load-path)))
(add-subdirs-to-load-path emacs.d)
(load "init")
我的所有其他脚本都由
~/Dropbox/source/site lisp/init.el加载
和自身位于
~/Dropbox/source/site lisp
中。 这就是为什么我在多台机器上有相同的配置。 下面是如何从
init.el
加载
../site lisp/hooks.el

(load "hooks")
(add-to-list 'load-path (locate-user-emacs-file "lisp"))
(load "foo" nil 'no-message)
我的
init.el
大约有100行,
.emacs
大约有20行。
其余8000行脚本被分为大约20个文件

我的
~/.emacs
文件的基本内容是:

(需要“cl”)
(目录文件“~/.emacs.d”'完整路径“[0-9].\\\\.el$”)中的src循环
(let((字节(concat src“c”))
(当(file-newer-than-file-p src字节)
(字节编译文件src))
(消息“正在加载%s.elc”字节)
(加载文件字节)))

它从
~/.emacs.d
加载以数字开头的配置文件。如果源文件(扩展名
.el
)比字节编译版本(扩展名
.elc
)新,则它将字节编译源文件。之后,它加载字节编译文件。

~/.emacs.d/
不会像
/etc/profile.d/
/etc/modules load.d/
或类似目录那样工作,即emacs不会自动加载此目录中的任何emacs Lisp文件

事实上,Emacs明确建议不要将Emacs Lisp库放置在
~/.Emacs.d/
中。如果将
~/.emacs.d/
添加到
加载路径
,字节编译器将发出警告

而是创建一个新的子目录,例如
~/.emacs.d/lisp
。使用
init.el
中的以下代码,显式地将此目录添加到您的
加载路径中:

(load "hooks")
(add-to-list 'load-path (locate-user-emacs-file "lisp"))
(load "foo" nil 'no-message)
然后,将Emacs Lisp文件放置在此目录中,例如
~/.Emacs.d/Lisp/foo.el
,并将其加载到
init.el

(load "hooks")
(add-to-list 'load-path (locate-user-emacs-file "lisp"))
(load "foo" nil 'no-message)

避免可怕的.emacs破产的最佳方法是避免大规模定制!最值得注意的是,尽量避免使用任何自定义函数和命令

相反,试着找到一个最接近你想要的ELPA包,或者试着习惯它,或者根据你的需要定制它。如果你找不到,首先试着写你自己的,并在Github、Marmalade或MELPA上分发

不要害怕在公共场合维护一个包。不管您是否在
init.el
中,您都必须维护您的定制,因此您也可以让其他Emacs用户帮助您完成这项工作


将代码添加到
init.el
应该是您的最后的选择

请注意,这是“编译/加载最新版本”方法的一个(极好的)推广,它负责Emacs加载的所有库,而不仅仅是自定义库。强烈推荐。谢谢大家。因此,将托比亚斯、菲尔斯和卢纳约恩的答案结合起来就是答案。因此,我将勾选这一条,“尽量避免任何自定义函数和命令”,这在Emacs中几乎是不可避免的,因为Emacs人似乎生活在一个完全不同的世界。例如,对于我使用的所有编辑器,按下<代码>删除< /Cord>键将删除文本选择,但Emacs人坚持不同,删除现有的特征()。@ XPT是可以避免的。要么适应Emacs中的变化(这种变化很少无缘无故发生),要么尝试找到(或维护自己)一个重新引入所需功能的包。因此,
add subdirs to load path
会处理大约20个文件,或者后面有更多的魔法?是的,它会处理目录结构。我可以创建一个新的目录在基地和任何文件也将看到。