Emacs-需要目录中的所有文件
我熟悉Emacs-需要目录中的所有文件,emacs,directory,elisp,require,Emacs,Directory,Elisp,Require,我熟悉load path和require,但我想知道是否可以将init.el中的多个require语句合并到某种循环中,最终执行类似于require的操作,将给定目录中的所有文件合并 有没有办法做到这一点?或者我应该保持原样,使用多个require语句吗?您可以尝试以下方法: (mapc(lambda(名称)) (需要(实习生(文件名无扩展名))) (目录文件“.emacs.d”nil“\\.el$”) 说明: 使用目录文件 使用文件名无扩展名删除扩展名 使用intern和require获取与
load path
和require
,但我想知道是否可以将init.el中的多个require
语句合并到某种循环中,最终执行类似于require
的操作,将给定目录中的所有文件合并
有没有办法做到这一点?或者我应该保持原样,使用多个
require
语句吗?您可以尝试以下方法:
(mapc(lambda(名称))
(需要(实习生(文件名无扩展名)))
(目录文件“.emacs.d”nil“\\.el$”)
说明:
目录文件
intern
和require
获取与文件基名称关联的符号- 使用
,而不是load
,因为功能名称(来自require
)不一定与文件的基本名称相同。或者该文件甚至可能不提供功能provide
- 仅当文件尚未加载(或您已尝试加载)时才加载该文件
load
。此函数基于Drew的代码,并进行了一些调整,以避免在同时存在.el和.elc版本时重新加载库
(在目录(dir)中取消我的全部加载)
“`load'目录DIR中尚未加载的所有elisp库。”
(互动式“D”)
(让((已加载库)(mapcar#'文件名-sans扩展名
(delq nil(地图车#'车辆装载历史'))))
(文件(目录文件目录“+\\.elc?$”)
(let((库(文件名,无扩展名文件)))
(除非(已加载成员库)
(加载库nil t)
(推送已加载的库(()()())))
我会使用“load”,但这样做会使Emacs的启动与使用“require”不同。具体地说,不是一次应用所有自定义设置,而是在“加载”时会发生许多快速的视觉变化(如更改模型线颜色等),而在“需要”时则不会发生。有没有一个钩子可以让我把它放进去,这样就可以用更少的视觉惊喜来应用文件内容?require
只是load
的包装器。这两者之间应该没有区别,除非您两次加载库,并且此函数应该防止这种情况发生。这个问题唯一的不同点可能是加载目录文件的顺序。您可以尝试将(directory files dir t.+\\\.elc?$“t)
更改为(directory files dir t.+\\\.elc?$)
(即删除最后一个参数),这将为您提供与已接受答案相同的排序。我自己实际上发现了它看起来不同的原因。事实证明,加载消息使加载过程本身看起来是异步的,因此我将一个参数传递给load
禁用它。谢谢良好的定位require
的C代码确实调用了load
,而NOMESSAGE
设置为t
。我将相应地更新答案。感谢您提供上述功能——它非常有用。请您解释一下mapcar在(mapcar#'file-name-sans-extension(delq nil(mapcar#'car load history))中的用法,特别是“#”的意义。
(let ((loaded (mapcar #'car load-history)))
(dolist (file (directory-files "~/.emacs.d" t ".+\\.elc?$"))
(unless (catch 'foo
(dolist (done loaded)
(when (equal file done) (throw 'foo t)))
nil)
(load (file-name-sans-extension file))
(push file loaded))))