gpt4 book ai didi

emacs - 如何使用特定的 user-init-file 和 user-emacs-directory 启动 emacs?

转载 作者:行者123 更新时间:2023-12-05 05:46:35 35 4
gpt4 key购买 nike

我希望能够并行启动多个具有不同配置的 emacs 实例。我还希望能够将相应的目录符号链接(symbolic link)到 ~/.emacs.d(或者在我的例子中是 ~/.config/emacs),而不需要忽略init.el 符号链接(symbolic link)目录中的文件或将额外的 lisp 代码写入 init.el 以处理此问题。最后一部分将变得清晰,在我列出可能但(对我而言)不令人满意的解决方案之后,我发现:

  1. 解决方法:

    env HOME=$HOME/path/to/a/pseudo/home/directory emacs

    发现于 How to start up emacs with different configurations?

    问题:

    The down-side to this technique is that Emacs won't see all your other dot files (because it will be looking in $HOME), and so running other processes from within Emacs won't necessarily work as normal; but that's not likely to be a huge issue if you're just experimenting, and you can always symlink or copy the bits you need.

  2. 解决方法:

    alias emacs='emacs -q --load "/path/to/init.el"'

    每个 init.el 文件都是这样开始的,以正确设置 user-init-fileuser-emacs-directory 变量:

    (setq user-init-file (or load-file-name (buffer-file-name)))
    (setq user-emacs-directory (file-name-directory user-init-file))

    发现于 How to start emacs with a custom user-emacs-directory?

    问题:

    • it breaks emacs-init-time[...].
    • it is not equivalent to a normal startup [...]:
      • after-init-hook is run before the init file is loaded.
      • The *scratch* buffer is created before the init file is loaded. You'll haveto change its mode explicitly (instead of using initial-major-mode).
      • You'll need to explicitly call package-initialize; it won't be doneautomatically
  3. 也许是一个解决方案:

    以下不起作用。

    alias emacs='emacs -q --eval "(progn (setq user-init-file /path/to/init.el) (setq 
    user-emacs-directory (file-name-directory user-init-file)))"

    但我不知道这样的事情是否真的有效并解决了上述解决方案的问题。我找不到在启动过程中执行 --eval 的时间。我也不知道,当执行 after-init-hook 时,我该如何测试。

  4. 解决方案(编辑 #2):

    另一种解决方案——在一些线程中提到(删除链接,但谷歌帮助)——是使用标准的 init.el 来编写一个开关,例如由一个专用的环境变量控制,然后加载相应的 init.el 并设置 user-emacs-directory。

    Tianshu Wang提到chemacs2 , 通过命令行参数而不是环境变量究竟是做什么的。

    就我而言,我会采用这种方式,因为它还处理额外的配置文件,例如由 spacemacs 创建的。但另请参阅解决方案 5。

令我困惑的是,emacs 没有为 user-init-fileuser-emacs-directory 提供任何命令行参数。

还是我遗漏了什么?

编辑#1:真的。这让我很困惑。我环顾四周。人们正在摆弄配置文件以获得这种行为。或者飞到月球来解决这个问题。或说方言。或者召唤恶魔。或其他。

  1. 解决方案(编辑 #3):

    使用git版本的emacs或等待emacs29.1正式版

    git 上 emacs 的变更日志:

    * Startup Changes in Emacs 29.1

    +++
    ** Emacs now supports setting 'user-emacs-directory' via '--init-directory'.

对自己的注意:在询问互联网的其余部分之前,首先要了解软件即将发生的变化。但在这种特殊情况下,还是值得的。

最佳答案

检查 chemacs2 ,这就是您所需要的。

关于emacs - 如何使用特定的 user-init-file 和 user-emacs-directory 启动 emacs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71146526/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com