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



我试过runemacs --user d:pathtoinit.emacs,但它给

Error (initialization): Invalid user name d:pathtoinit.emacs

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

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

(1) -q——load方式

这只是运行

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

不进行任何初始化就启动Emacs,然后加载path-to-your-init.el

这种方式的注意事项:在这种情况下,Emacs并不真正认为el文件是初始化文件,事实上,Emacs根本没有进行初始化,这意味着以下初始化后步骤被跳过:
  • 使能包,即评估(package-initialize)

  • 运行钩子after-init-hook,即(run-hooks after-init-hook)

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

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

(2) HOME way

创建my-emacs.bat目录:

set HOME=%~dp0
C:path-to-yourEmacsbinrunemacs.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扩展创建一个到要共享的包目录的符号链接。

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

Emacs将它的一些特性外包给外部工具。Grepping和comparison外包给grep和diff,所以你可能已经在你的系统上安装了至少GnuWin32 grep和GnuWin32 DiffUtils。拼写检查的一部分外包给了aspell,这也是一个单独的安装。加密外包给GPG,所以Gpg4Win另一个单独安装。为了使便携式Emacs具有所有这些特性,所有这些外部工具也应该在USB驱动器上。幸运的是,GnuWin32和aspell是可移植的。我不知道GPG是不是。如果您设法使lgrep和rgrep版本仅依赖于shell自己的grep,则可以消除对外部grep的依赖,但似乎没有人这样做过,因此制作这样的lgrep/rgrep是大胆地走向以前没有人去过的地方。

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

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

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

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

$ emacs --help
...
--no-init-file, -q          load neither ~/.emacs nor default.el
...

我使用了以下从daviwill repo中提取的代码:
https://github.com/daviwil/emacs-from-scratch/tree/9388cf6ecd9b44c430867a5c3dad5f050fdc0ee1。

我使用emacs -Q——load tools启动emacs。加载init。el init.el。

我的柚木。El使用以下命令设置emacs包目录:
(setq package-user-dir "~/emacs_test/packages")

最新更新