有没有办法在emacs启动时指定自定义init文件?

问题描述 投票:0回答:4

我已经尝试过

runemacs --user d:\path\to\init\.emacs
但它给出了

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

我的意思是自定义位置中的自定义文件,例如我的随身碟等,而不是用户文件夹中的默认位置。我尝试为不同的配置创建具有相应 init 的 cmd 文件。

windows emacs
4个回答
43
投票

我猜测您的最终目标是从您可以随身携带的 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)

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

此外,如果 Emacs 使用

-q
选项启动,自定义界面将不会让您保存设置。

(2) 回家之路

创建 my-emacs.bat,内容如下:

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

当您单击该 bat 文件时,Emacs 会在您常用的用户目录中而不是在 bat 文件所在的位置创建名为

.emacs.d
的文件夹。您可以将自己的
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 就是大胆地去没有人去过的地方.


12
投票

您可以通过在命令行中键入

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
...

1
投票

我使用从 daviwil repo 中提取的以下内容:
https://github.com/daviwil/emacs-from-scratch/tree/9388cf6ecd9b44c430867a5c3dad5f050fdc0ee1.

我使用 emacs -Q --load adjustment.el --load init.el init.el 启动 emacs。

我的 teaks.el 使用以下命令设置 emacs 包目录:
(setq package-user-dir "~/emacs_test/packages")


0
投票

从 Emacs29 开始,有

--init-directory
标志来指定另一个自定义初始化文件。

© www.soinside.com 2019 - 2024. All rights reserved.