emacs:加载路径和要求(无法打开加载文件)

emacs:加载路径和要求(无法打开加载文件),emacs,elisp,require,load-path,Emacs,Elisp,Require,Load Path,当加载路径变量似乎正常时,我在(require'org mime)处出现“无法打开加载文件”错误: load-path is a variable defined in `C source code'. Its value is ("/home/alexey/.emacs.d/elpa/bbdb-20130526.1945" "/home/alexey/.emacs.d/elpa/org-mime-20120112" "/home/alexey/.emacs.d/elpa/smex-201304

当加载路径变量似乎正常时,我在
(require'org mime)
处出现
“无法打开加载文件”
错误:

load-path is a variable defined in `C source code'.
Its value is
("/home/alexey/.emacs.d/elpa/bbdb-20130526.1945" "/home/alexey/.emacs.d/elpa/org-mime-20120112" "/home/alexey/.emacs.d/elpa/smex-20130421.2153" "/usr/share/emacs/24.3/site-lisp" "/usr/share/emacs/site-lisp" "/usr/share/emacs/24.3/lisp
...
奇怪的是,补救措施如下(.emacs):


它不仅仅是丑陋的:它是功能失调的,因为版本化的路径可能会发生变化。但是为什么会出现错误?

当您加载一个需要另一个文件的文件时,会出现一个有趣的问题——所需的文件必须按时间顺序加载,然后再加载下一个文件。例如,如果B需要A,则A必须按时间顺序放在更高的位置,以便当B加载时,A已经加载

我在这种类型的设置上真的很幸运。大多数文件都以el或elc结尾,因此我不确定为什么要加载具有不同扩展名或没有扩展名的文件,但如果需要,当然可以这样做

(let* ((root.d "~/") (sub-dir (concat root.d ".emacs.d/")))
    (load-file (concat sub-dir "init.el"))
    (setq load-path
(append `(,root.d ,sub-dir
    ,(concat sub-dir "elpa/yasnippet")
) load-path)))

我猜大概是这样。我不能理解你关于扩展的评论:到目前为止,所有的目标都是*.el.lawlist:如果B需要A(这样它调用
(require'A)
),并且A还没有加载,那么它将在那个时候加载(假设它在加载路径中,等等)。调用
require
可确保在需要之前加载所需的库。您不需要手动执行任何操作。(或者如果这不是你的意思,你可能希望澄清…)啊---谢谢你---我在尝试新事物时手动添加了很多
el
,我将尝试为我的测试设置一个临时加载路径,看看这是否有帮助---最近有一个循环a需要B,B需要a的例子,创建一个C产品,加载路径可能已经修复了它。学习新技巧总是一种乐趣…:)@Alexey Orlov--谢谢--看看数字,我只是假设它是一个文件而不是一个目录--我可以更正。如果您使用的是elpa系统,您需要首先执行(require'package)(package initialize),否则emacs甚至看不到加载路径。(我想)这可能是在.emacs中排序的问题,这会导致在正确设置
加载路径之前运行
(require'org mime)
(let* ((root.d "~/") (sub-dir (concat root.d ".emacs.d/")))
    (load-file (concat sub-dir "init.el"))
    (setq load-path
(append `(,root.d ,sub-dir
    ,(concat sub-dir "elpa/yasnippet")
) load-path)))