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

rsk*_*k82 18 windows emacs

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

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

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

Jis*_*Yoo 26

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

(1)-q --load方式

这只是为了运行

emacs -q --load path-to-your-init.el
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

(2)HOME方式

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

set HOME=%~dp0
C:\path-to-your\Emacs\bin\runemacs.exe --xrm "emacs.Background: light green"
Run Code Online (Sandbox Code Playgroud)

当您单击该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目录.这可能是也可能不是你想要的.如果要共享程序包目录,可以package-user-dir使用"链接Shell扩展" 更改或创建指向要共享程序包目录的符号链接.

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

  • 人们可以设置“user-init-file”来启用自定义保存。`emacs -Q -T FrameTitle --eval "(setq 用户初始化文件 \"$INITFILE\")" -l $INITFILE )` (2认同)

Bry*_*ley 8

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

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

$ emacs --help
...
--load, -l FILE         load Emacs Lisp FILE using the load function
...
Run Code Online (Sandbox Code Playgroud)

如果要阻止加载默认的init文件,可以使用此选项:

$ emacs --help
...
--no-init-file, -q          load neither ~/.emacs nor default.el
...
Run Code Online (Sandbox Code Playgroud)

  • 这一切都引出了一个问题:为什么在 2022 年没有一个简单的选项 --init DIR 可以指向不同的 .emacs.d 目录?叹。 (2认同)