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

时间:2013-06-17 11:51:42

标签: windows emacs

我已经尝试了runemacs --user d:\path\to\init\.emacs,但它提供了

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

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

2 个答案:

答案 0 :(得分:26)

我猜你的最终目标是从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)

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

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

(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,评估(查找文件“〜/ .emacs.d / init.el”)将打开您自己的可移植init.el,而不是通常用户目录中的init文件。你可能想要删除--xrm "emacs.Background: light green"部分,我包含它,因为我总是忘记哪个是Emacs。

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

在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是大胆地去到没有人去过的地方

答案 1 :(得分:8)

您可以通过在命令行上键入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
...