27

我试过runemacs --user d:\path\to\init\.emacs了,但它给了

Error (initialization): Invalid user name d:\path\to\init\.emacs

我的意思是自定义位置的自定义文件,比如我的 pendrive 等,而不是我在用户文件夹中的默认位置。我尝试为不同的配置创建一个带有相应初始化的 cmd 文件。

4

2 回答 2

38

我猜你的最终目标是从你可以随身携带的 USB 驱动器上运行 Emacs。有两种方法可以让 Emacs 从不同的 init 文件开始:

(1) -q --load 方式

这只是为了运行

emacs -q --load path-to-your-init.el

它在没有任何初始化的情况下启动 Emacs,然后加载 path-to-your-init.el

这种方式的陷阱:在这种情况下,Emacs 并没有真正将 el 文件视为一个 init 文件,实际上 Emacs 根本没有经过初始化,这意味着跳过了以下初始化后的步骤:

  • 启用包,即评估(package-initialize)

  • 运行钩子after-init-hook,也就是求值(run-hooks after-init-hook)

您可能必须在备用初始化文件中添加初始化后的内容。

-q此外,如果 Emacs 使用选项启动,自定义界面将不允许您保存设置。

(2) HOME方式

使用以下内容创建 my-emacs.bat:

set HOME=%~dp0
C:\path-to-your\Emacs\bin\runemacs.exe --xrm "emacs.Background: light green"

当您单击该 bat 文件时,Emacs 会创建一个文件夹,该文件夹的名称.emacs.d不是在您通常的用户目录中,而是在 bat 文件所在的位置。你可以把你自己的init.el放在那个.emacs.d文件夹里。使用此 Emacs,评估 (find-file "~/.emacs.d/init.el") 会打开您自己的可移植init.el文件,而不是通常用户目录中的 init 文件。您可能想删除该--xrm "emacs.Background: light green"部分,我将其包括在内,因为我总是忘记哪个 Emacs 是哪个。

陷阱:这个 Emacs 在它自己的目录中有它自己的包.emacs.d目录。这可能是也可能不是你想要的。如果要共享包目录,可以package-user-dir使用 Link Shell Extension 更改或创建指向要共享的包目录的符号链接。

在 USB 驱动器上运行 Emacs 需要考虑的事项:

Emacs 将其一些功能外包给外部工具。grepping 和比较是外包给 grep 和 diff 的,所以你可能在你的系统上至少安装了 GnuWin32 Grep 和 GnuWin32 DiffUtils。并且拼写检查的一部分外包给 aspell,这也是一个单独的安装。加密外包给 GPG,因此 Gpg4Win 是另一个单独的安装。为了让您的便携式 Emacs 拥有所有这些功能,所有这些外部工具也应该在您的 USB 驱动器上。幸运的是,GnuWin32 和 aspell 是便携友好的。不知道是不是GPG。如果您设法制作仅依赖于 eshell 自己的 grep 的 lgrep 和 rgrep 版本,则可以消除对外部 grep 的依赖,但似乎没有人这样做,所以制作这样的 lgrep/rgrep 是大胆地去以前没有人去过的地方.

于 2013-06-17T13:43:53.473 回答
11

emacs --help您可以通过在命令行上键入来获得有关所有 emacs 选项的帮助。该帮助表明--user期望用户名,而不是 elisp 文件的路径。

要在启动时加载 lisp 文件,您可以使用以下--load选项:

$ emacs --help
...
--load, -l FILE         load Emacs Lisp FILE using the load function
...

如果你想阻止你的默认初始化文件被加载,你可以使用这个选项:

$ emacs --help
...
--no-init-file, -q          load neither ~/.emacs nor default.el
...
于 2013-06-17T11:59:55.600 回答