我试过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")