在 Windows 下启动 spacemacs 无法获取到正确的 HOME

我参照了 Windows 上面 Emacs 简易入门最佳实践 这篇帖子进行了设置, 不同的是 Emacs 压缩包是从 www.gun.org 官网上下载的, 不是使用作者介绍的 Releases · m-parashar/emax64 · GitHub 里的压缩包. 自己做了以下工作:

1. 在环境变量中设置了 HOME

可以看到我设置了 HOME 环境变量 C:\Users\c\Documents\hurricane. 并且进行了重启.

2. 将 Emacs 安装包内文件解压到 HOME 目录下

同时我在 HOME 目录下放置了 spacemac s 的配置文件夹 .emacs.d 和我个人的配置文件夹 .spacemacs.d.

3. 双击 C:\Users\c\Documents\hurricane\bin\addpm.exe 来安装 Emacs.

接下来我就尝试打开 Emacs 了:

1. 第一种尝试: 双击 C:\Users\c\Documents\hurricane\bin\runemacs.exe 运行

在这过程中 Emacs 成功启动, 我个人的配置包也可以顺利下载安装. 但是在 spacemacs dashboard 界面上使用 SPC d j 调用 dired-jump, 在 macOS 上是会成功跳到 ~ 下面的. 但是此时 Windows 上却是跳到了 C:\Users\c\Documents\hurricane\bin\ 目录下, 也就是我双击运行的 runemacs.exe 所在的目录.

我使用 C-x d 运行 dired, 也是跳转到 C:\Users\c\Documents\hurricane\bin\.

我运行 eval-expression:

(getenv "HOME")

后的结果是 “/Users/c”. 这个是我 mac 的家目录(因为打算先在 Parallels Desktop 上尝试运行, 再拷贝到另一台 Windows 电脑.). 为什么我在虚拟机上的 Windows 设置了 HOME 运行得到的却不是正确的.

2. 第二种尝试, 在启动栏搜索 Emacs, 并从这里运行

这中方法, 启动时抛出了错误:

这种方法还是不能正确的获取到我设置的 HOME. 和第一种方法不同的是 Emacs 会跳到 c:/Windows/System32.

我目前的疑惑是在 Windows 上都设置好了配置后, 该如何启动 Emacs?

网络上搜索了一番, 论坛帖子也看了, youtube 上教程也看了, 都只是涉及到如何配置, 并没有提及后续该如何 (从哪里) 启动 Emacs.

我没用addpm.exe,将runemacs.exe创建桌面快捷方式后启动,启动时需要加参数,也是直接在创建的快捷方式->右键->属性->目标 输入框里加,不用命令行也不设HOME变量,windows最好不要改emacs的home变量默认值,会出一些莫名其秒的问题

必须改home变量情况是在启动时加载不同配置 D:\text\emacs\bin\runemacs.exe -q -l d:/text/.emacs2.d/init.el 也在配置文件里面改(setenv "HOME" "d:/text/emacs"), 你这个直接改在系统环境变量里改HOME变量,emacs外的其它软件也会被影响到吧

home目录,简单的用~表示,或者用全路径表示为/home/,其中xxx表示用户名字,所以,在Linux下将.emacs和.emacs.d放到这个目录下就行了,但windows没有home目录的概念,所以,Emacs就按如下方式来查找配置文件:

  1. 如果设置了HOME环境变量,那么就用它的值作为home目录~
  2. 如果存在注册表键值HKCU\SOFTWARE\GNU\Emacs\HOME,就用它的值作为home目录~
  3. 如果存在注册表键值HKLM\SOFTWARE\GNU\Emacs\HOME,就用它的值作为home目录~(和2的区别是,2只是针对当前用户的注册表路径,3则是针对所有用户)
  4. 如果存在C:.emacs,就用C:\作为home目录~
  5. 如果以上都不存在的话,就使用\Users<user name>\AppData\Roaming作为home目录~(对于XP和较早windows用户,需要到Documents and Settings目录下去找)

我用的是第二种方法,在current_user子路径下添加的home变量

1 个赞

你好, 我按照你的说明在快捷方式属性里修改目标为:

C:\Users\c\Documents\hurricane\bin\runemacs.exe -q -l C:/Users/c/Documents/hurricane/.emacs.d/init.el

并且在 spacemacs 的配置文件夹 .emacs.d 中的文件 init.el 加入:

(setenv "HOME" "c:/Users/c/Documents/hurricane")

然后点击快捷方式启动 emacs, 效果和我描述的一样, 没有效果.

你说的注册表键值, 我电脑上都没有:

所以不知道哪里修改注册表.

而其他办法, 如设置环境变量 HOME 为 \Users<user name>\AppData\Roaming, 并且把我帖子中提到的 hurricane 文件夹下的所有文件都放到 Roaming 下, 这个方法我尝试过了, 结果还是有问题, 没有解决.

我看你用的是spacemacs,不知有没有试过 env文件呢? spc f e C-e 看看它获取的HOME是什么

1 个赞

从GUN开始就是新建的键值

在windows下,emacs的HOME路径除了放emacs的配置文件,还有什么用处吗?应该可以不用管的吧?只需要关注当前当前工作目录default-directory这个变量的值就可以了,default-directory被我设置成了显示在emacs的最上方第一行(header-line),按 “行号" “文件名” default-directory显示,至于标题栏好像没办法做到显示行号,也被隐藏了 图片

他的这个提醒了我,我使用的是 spacemacs,使用了 SPC f e e 快捷键查看一下 .spacemacs.env 文件中的 HOME\Users\cc,因为我的所有配置文件都是直接从 MacOS 拷贝过来的,所以这个文件需要重新生成才能正确。虽然经过他提醒我才知道我自己的乌龙。但是你的答案可能更具有普遍性意义,为了能帮到更多人,我选择你的回答是解决方案。谢谢。

谢谢提醒,我重新生成了 .spacemacs.env 文件后可以了。