如何在Windows 7上为点emacs .emacs文件设置其他位置?


16

我使用的是Windows 7计算机,没有管理员访问权限。因此,我无法在根目录中放置点emacs文件。有没有办法为点emacs文件指定其他位置?


如果您可以控制自己的Emacs安装位置(例如,将其放置在所需的位置,或者至少具有对该安装的写入权限),则可以通过使用类似的方法site-start.el来完全控制自己的安装,init.el而不再需要一个.emacs。在此示例中,您无需摆弄主目录(除非计算机上的其他人在其中放置会影响您所做工作的内容)。换句话说,它可以为空白,而您无需触摸它。
法律学家

Answers:


4

手册所述,Emacs在多个地方查找init文件。如果要自定义Emacs,则必须从这些文件之一开始。

一种常见的方法是使用文件init.el在你的user-emacs-directory,而不是有.emacs你的home目录。

user-emacs-directory默认~/.emacs.d,所以它仍然是相对于你的家,但这种方法的好处是你可以保持在一个地方关系到你的Emacs配置应有尽有。该目录可以在版本控制下,备份,在多台计算机之间共享等。您可以使用符号链接(mklink在Windows上)将文件保留在其他位置。

例如,经常看到人们在Github上维护其Emacs配置。通过在Github中搜索带有init.el文件的elisp项目,您可以找到很多示例。


我喜欢这个解决方案,并且想使用它,但是它仍然没有告诉我如何更改我的user-emacs-directory
Startec 2015年

我的建议是确实使用符号链接。如其他答案所示,您需要将某些东西放在Emacs在初始化过程中读取的标准位置之一,即使它所做的只是从其他位置加载您的配置。
glucas 2015年

手动链接已断开。
corvus_192'9

17

在使用Emacs的每个Windows安装上,我.emacs在列出的位置的文件中都有以下代码:

;; Place this file in C:\Users\Username\AppData\Roaming and point to the appropriate files
(setq user-init-file "C:/path/to/.emacs")
(setq user-emacs-directory "C:/path/to/.emacs.d/")
(setq default-directory "C:/whatever/you/want/to/start/in")
(setenv "HOME" "D:/my/home/directory")
(load user-init-file)

这样我可以把我.emacs.emacs.d/任何地方我想要的。


谢谢,几乎就是我所需要的。我放弃了默认目录,并删除了sendenv HOME,否则需要设置setq!
格兰特·鲍曼

我尝试了瑞安的答案。但是,现在我无法从AppData \ Roaming文件夹的emacs中打开此文件。请原谅,我无法添加评论,因为我还没有得到50分。
Sreekumar R

@SreekumarR您应该提出一个新问题,链接到这个问题,而不是发布“答案”
Andrew Swann

@SreekumarR如果您有新问题,请单击“ 提问”按钮提问。如果它有助于提供上下文,请包括此问题的链接。- 评分
斯特凡

5

您的.emacs文件位于HOME目录中。从Emacs手册中:

Windows的HOME等效项是用户特定的应用程序数据目录。实际位置取决于Windows版本...

您可以通过显式设置环境变量HOME指向系统上的任何目录来覆盖HOME的默认值。可以从命令外壳提示符或“我的电脑”的“属性”对话框中设置HOME。也可以在系统注册表中设置HOME,请参阅MS-Windows注册表。


1
是的,我知道如何设置主目录,但是出于版本控制的原因,我希望能够将emacs设置为从其他目录读取(以便我可以拥有特定于emacs的目录)
Startec

3
请注意,此黑客使Emacs将其他东西视为主目录。
wasamasa 2015年

@wasamasa-我不会称其为“ hack”。在我的Emacs 25构建中,如果未使用环境变量设置“ HOME”,则默认情况下它是Emacs安装目录,这显然是错误的。应该将“ HOME”设置为用户认为自己的主目录的内容,并且设置环境变量是实现此目的的标准方法。在Unix系统上,通常已经在登录过程中为用户完成了此操作,但是在Windows上,您必须手动执行此操作。
TED

这样做的目的是将您通常认为的HOME目录更改为完全不同的目录。因此,为什么我称其为hack。将其设置为适当的值显然可以。
wasamasa

2

你说:

我知道如何设置主目录,但是出于版本控制的原因,我希望能够将emacs设置为从其他目录读取(这样我就可以拥有一个特定于emacs的目录)

您的init文件位于您的主目录中,您可以将其放在任何位置。显然,您想为Emacs加载的内容提供一个不同的目录。那不是问题。将您的init文件放在主目录中,并让该文件将另一个目录添加到variable的值中load-path,然后需要您要使用的任何其他Emacs库。将那些库放在另一个目录中。

IOW,您的初始化文件除了保留要加载的Emacs库的目录的设置外,不需要包含任何内容。



0

认为您可以将(setq user-init-file "C:/path/to/.emacs")@ryan建议的其他内容和其他内容放到site-start.el中

您的站点可能还具有站点启动文件;如果存在,则将其命名为site-start.el。像default.el一样,Emacs通过Lisp库的标准搜索路径找到该文件。Emacs会先加载该库,然后再加载您的init文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.