我有一个文件夹/var/~/
。在config .emacs
中,我想从此文件夹中加载一些文件。
我尝试使用(load-file "/var/~/foobar.el")
,但是emacs提醒File error: Cannot open load file, ~/foobar.el
。
此外,我甚至无法使用c-x c-f
打开此文件夹下的文件。在迷你缓冲区中,路径将自动重定向到我的家。
我怎么能加载该文件夹中的文件?
答案 0 :(得分:6)
您需要重命名目录。
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。
答案 1 :(得分:1)
lunaryorn很好地解释了你的问题,我同意他的建议,即在文件路径中不使用~
是最好的解决方案。但是,如果您因任何原因无法重命名这些路径,我相信您可以substitute-in-file-name
load
处理here所记录的相对文件路径。
基本上,您需要将nil
添加到load-path
变量,然后将default-directory
变量设置为麻烦的路径,最后使用相对名称加载文件。 e.g:
; 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
的第一位。