我有一个文件夹/var/~/
。在配置中.emacs
,我想从这个文件夹中加载一些文件。我尝试使用(load-file "/var/~/foobar.el")
,但emacs警报File error: Cannot open load file, ~/foobar.el
。此外,我什至无法使用c-x c-f
. 在 minibuffer 中,路径将自动重定向到我的家。我怎样才能在该文件夹中加载文件?
2 回答
您需要重命名您的目录。
load-file
是一个简单的包装器load
,它将给定的文件名传递给substitute-in-file-name
. 从substitute-in-file-name
(强调我的)的文档字符串中:
替换 FILENAME 中引用的环境变量。`$FOO' 其中 FOO 是一个环境变量名,意思是替换那个变量的值。变量名应以字符结尾,而不是字母、数字或下划线;否则,将整个变量名括在大括号中。
如果 `/~' 出现,通过那个 `/' 的所有 FILENAME 将被丢弃。如果 `//' 出现,那么直到并包括第一个 `/' 的所有内容都将被丢弃。
也就是说,substitute-in-file-name
把之前的一切都扔掉/~
,变成/var/~/foo.el
了~/foo.el
。
我完全看不出这种行为有任何原因,但它就是这样,你不能(容易)解决它,所以重命名是你摆脱这种困境的最好方法。
无论如何,这是一件合理的事情。通常在 Unix 系统上使用~
目录名是个坏主意,而不仅仅是 Emacs。
lunaryorn 很好地解释了你的问题,我同意他的建议,即不在~
文件路径中使用是最好的解决方案。但是,如果您出于某种原因无法重命名这些路径,我相信您可以substitute-in-file-name
通过此处load
记录的相对文件路径来解决问题。
基本上,您需要添加nil
到load-path
变量中,然后将default-directory
变量设置为麻烦的路径,最后使用相对名称加载文件。例如:
; adding nil causes load to also search your 'default-directory'
(setq load-path (append '(nil) load-path))
(setq default-directory "/tmp/~/")
(load "foobar.el")
请注意,如果您怀疑文件名可能存在于您的其他地方(从中加载),您load-path
需要确保您想要的文件位于load-path
.
请参阅程序如何加载。