spacemacs windows下总是提示git不是内部外部命令


#1

spacemacs 使用命令 SPC-p-f 查找当前projectile下面的文件是总是会提示git不是内部或者外部命令。

但是我在不使用spacemacs配置,用最基础的配置中启用projectile是C-c p f 能够正常查找project下的文件。 同样的spacemacs配置在mac上能够正常使用SPC p f。

windows环境变量里面已经添加了git的路径。

请问这个问题应该怎么去debug,有没有人遇到过。谢谢


#2

查看下 emacs 的 exec-path, C-h v exec-path, 另外,spacemacs 还有有个 .spacemacs.env 文件来控制环境变量的,看看里面的 PATH 变量是不是有了。


#3

我确认过了git是添加到变量里的。 我详细看了一下,当我SPC p f 或者M-x projectile-find-file时,space 在执行"e:/nutsotre/2017pc/lab/turbo/sala/'git'" 这个路径,而我的project路径是e:/nutsotre/2017pc/lab/turbo/sala/, 显然拼接了'git'是找不到的,不知道为什么会把project路径和'git'拼接在一起


#4

emacs 的 exec-path 和你的环境变量是两个东西. emacs 里面找程序是从 exec-path 找的, 不一定和你的系统 PATH 一致.

你可以试试 (executable-fine “git”) 看返回什么.


#5

(executable-fine “git”) 能够正确返回 “d:\Program\Git\bin\git.exe”


#6

问题已解决,多谢坛友@smallzhan的帮助提示, 记录过程已备查阅:

起初(executable-find "find") (executable-find "bash")都能正确返回
(getenv "PATH")却只能得到 “d:\Program\emacs26.2”.
后来检查了一下C:\Users\Administrator\AppData\Roaming\.emacs.d\init.el中将PATH给强置了(忘了从哪抄的配置)

(setenv "HOME" "D:/Program/emacs-26.2")
(setenv "PATH" "D:/Program/emacs-26.2")
(load-file "D:/Program/emacs-26.2/.emacs.d/init.el")     

将第2行注释掉以后,

(setenv "HOME" "D:/Program/emacs-26.2")
;; (setenv "PATH" "D:/Program/emacs-26.2")
(load-file "D:/Program/emacs-26.2/.emacs.d/init.el")     

重新启动emacs,就能获得windows的系统PATH。
(getenv "PATH") 得到:

C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Ruby25-x64\bin;D:\Program Files (x86)\Python35-32\Scripts\;D:\Program Files (x86)\Python35-32\;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;d:\iverilog\gtkwave\bin;D:\Program\scala\bin;C:\Javalib\stb\bin;D:\Program\Nodejs\;d:\Program\Git\cmd;d:\Program\Git\mingw64\bin;d:\Program\Git\bin;d:\Program\Git\usr\bin;C:\Program Files (x86)\sbt\bin;C:\Program Files (x86)\scala\bin; ........)

说明环境变量已生效,此时,SPC f f 都能正常工作了,所以在windows下不工作一定要检查 (getenv “PATH”) 是否有正确添加。

PATH添加方法除了修改Windows的环境变量以外,还可以在emacs配置中添加修改。
具体请查阅(setenv PATH ....) 方法, 一般建议修改Windows的环境变量