请教Windows系统下,Git bash和Command prompt调用Emacs的原理

我用Emacs for Windows 27, Spacemacs.

Spacemacs配置文件在C:\Users\AppData\Roaming\.spacemacs.d 用prompt和bash分别查看环境变量是一样的:C:User\you

用Command prompt调Emacs会自动加载spacemacs。但是用Git bash调用却是vanilla Emacs,它会反复在C:\Users\ .emacs.d建立和调用这个空dotfile。请教一下为什么偏偏Git bash不能识别dotfile的位置?谢谢大家。

查了手册也没说很清楚:Location of init file (GNU Emacs FAQ For MS Windows)

emacs 的配置文件 HOME 目录下,两者对默认 HOME 的位置处理不一样

感谢回答。

我在Prompt echo %HOMEPATH% 和Git bash echo $HOME返回的都是c:\Users :joy: 真是个谜啊

Git bash 其实是个 mingw 系统,它有自己的目录结构,也就有自己的HOME,你可以在 git bash 中打印一下 HOME的值就知道了。

谢谢。

Gitbash和Prompt返回的home是一样的 c:/user,dotfile并不在这个地址里。所以我的问题是,为什么prompt/power shell调用的Emacs成功在别处找到了dotfile。

也可能Emacs for windows智能考虑到了,如果被git调用,就假设自己在UNIX环境里,去home找dotfile;而被prompt调用,就去挂载的home找配置文件,毕竟C:\Users\AppData\Roaming挂载是window默认的地址。

在Windows上手动设置环境变量HOME。这样就统一到一个目录了。简易就设到Git Bash的~对应的目录。

环境变量 HOME 设置下就好了。

找到答案了,是继承default-directory的机制差异。Emacs 被git bash调用,会继承其HOME。悲催的Spacemacs还专门建立.env文件读取bash的环境,这个地址恰恰不是Windows用户最常见的保存dotfile的地方(因为推荐存在C:\Users\AppData\Roaming\)。

从prompt和点击图标启动,无处可以继承,就自用使用了windows下内置的default-directory (C:\Users\AppData\Roaming\)作为cwd,就能自动spacemacs了。

Window下在设置一个指定的目录为HOME,这样使用体验就和linux差不多了,不管是git bash 还是msys2 都会认这个home位置,这样emacs和vim的配置也就都可以放在这个新的home了。

谢谢,是这样的