具有名为tilde(〜)的文件夹的路径无法被emacs中的load-file识别

时间:2014-09-30 16:54:41

标签: emacs directory tilde

我有一个文件夹/var/~/。在config .emacs中,我想从此文件夹中加载一些文件。 我尝试使用(load-file "/var/~/foobar.el"),但是emacs提醒File error: Cannot open load file, ~/foobar.el。 此外,我甚至无法使用c-x c-f打开此文件夹下的文件。在迷你缓冲区中,路径将自动重定向到我的家。 我怎么能加载该文件夹中的文件?

2 个答案:

答案 0 :(得分:6)

您需要重命名目录。

load-fileload的简单包装器,它通过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的第一位。

请参阅How programs do loading