带有名为tilde(~)的文件夹的路径可以';emacs中的加载文件无法识别

带有名为tilde(~)的文件夹的路径可以';emacs中的加载文件无法识别,emacs,directory,tilde,Emacs,Directory,Tilde,我有一个文件夹/var/~/。在config.emacs中,我想从这个文件夹加载一些文件。 我尝试使用(加载文件“/var/~/foobar.el”),但emacs警告文件错误:无法打开加载文件,~/foobar.el。 此外,我甚至无法用c-x c-f打开此文件夹下的文件。在minibuffer中,路径将自动重定向到我家。 如何加载该文件夹中的文件?您需要重命名目录 load file是一个围绕load的简单包装器,它通过文件名中的替换传递给定的文件名。从文件名中的替换的文档字符串中(强调):

我有一个文件夹
/var/~/
。在config
.emacs
中,我想从这个文件夹加载一些文件。 我尝试使用
(加载文件“/var/~/foobar.el”)
,但emacs警告
文件错误:无法打开加载文件,~/foobar.el
。 此外,我甚至无法用
c-x c-f
打开此文件夹下的文件。在minibuffer中,路径将自动重定向到我家。
如何加载该文件夹中的文件?

您需要重命名目录

load file
是一个围绕
load
的简单包装器,它通过文件名中的
替换传递给定的文件名。从文件名中的
替换的文档字符串中(强调):

替换文件名中引用的环境变量`$FOO'其中FOO是环境变量名称,表示替换 该变量的值。变量名应该终止 使用非字母、数字或下划线的字符;否则,请附上 大括号中的整个变量名

如果出现“/~”,则通过该“/”的所有文件名都将被丢弃。如果出现“//”,则包括第一个“/”在内的所有文件名都将被丢弃

换句话说,
替换文件名
丢弃了
/~
之前的所有内容,将
/var/~/foo.el
转换为
~/foo.el

我完全看不出这种行为有什么原因,但事实就是如此,你无法(轻松地)解决它,因此重命名是摆脱这种困境的最佳方法


无论如何,这样做是合理的。一般来说,在Unix系统上使用
~
作为目录名是个坏主意,不仅仅是对于Emacs。

lunaryorn很好地解释了您的问题,我同意他的建议,即在文件路径中不使用
~
是最好的解决方案。但是,如果出于任何原因无法重命名这些路径,我相信您可以通过
load
加载文档中的相对文件路径来解决
substitute in file name

基本上,您需要将
nil
添加到
加载路径
变量中,然后将
默认目录
变量设置为故障路径,最后使用相对名称加载文件。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")
请注意,如果怀疑文件名可能存在于
加载路径的其他位置(从中加载),则需要确保所需文件位于
加载路径的第一位


请参阅。

该目录的字面名称是
~
?如果是这样的话,那就不是一个好主意,因为
~
往往会在各种上下文中扩展到主目录。Emacs开玩笑说,这是关于程序的使用,而不是制作程序。Paul R是正确的--将文件夹
~
重命名为其他文件夹,因为Emacs通常将该字符识别为主目录的路径。只是出于好奇:为什么要命名目录
~
?你怎么会想到那样做?我想知道是否某个地方的某个文档可能不清楚,并导致您这样做。出于好奇:)谢谢您的回复,也许重命名是最好的解决方案。我相信原因是作为一种快捷方式返回到
~
/
(根目录)。否则,唯一的方法就是从任意深度的目录退格到root,然后
/home/username/
返回
~