Windows,Emacs,Git Bash和shell命令

Windows 7. Emacs 24.3.1。 Git 1.8.1.msysgit.1。 我有我的等效.emacs文件中的以下内容:

(if (equal system-type 'windows-nt) (progn (setq explicit-shell-file-name "C:/Program Files (x86)/Git/bin/sh.exe") (setq shell-file-name "bash") (setq explicit-sh.exe-args '("--login" "-i")) (setenv "SHELL" shell-file-name) (add-hook 'comint-output-filter-functions 'comint-strip-ctrl-m))) 

当我想要做Mx shell的时候,这个效果很好:我可以popup一个shell并input“ls”。

但是, Mx shell命令失败。 当我尝试通过shell命令运行“ls”(它应该在* Shell Command Output *缓冲区中输出时,根据Ch shell命令 ),我得到一个错误信息:

“search程序:权限被拒绝,bash”

Google上关于调用过程有一些非常古老的build议,在StackOverflow上有很多关于让shell在Emacs中工作的问题。 请注意, Mx shell的工作很好,我想要的是shell命令。

(原因: https : //github.com/donkirkby/live-py-plugin#installing-the-emacs-mode )

尝试设置两个变量指向相同的可执行文件,并确保路径在exec-path

 (setq explicit-shell-file-name "C:/Program Files (x86)/Git/bin/bash.exe") (setq shell-file-name explicit-shell-file-name) (add-to-list 'exec-path "C:/Program Files (x86)/Git/bin") 

我知道这是一个较老的问题,但是当我在同一个问题上寻找帮助时,我发现了这个问题,所以这里是我用于特定用例的解决方案,以防将来帮助别人。

我在使用emacs的所有计算机之间同步我的.emacs.d ,其中包括Linux和Windows计算机。 我将其插入到init.el文件中,以在Windows环境中自动处理此问题:

 ;; Set Windows-specific preferences if running in a Windows environment. (defun udf-windows-setup () (interactive) ;; The variable `git-shell-path' contains the path to the `Git\bin' ;; file on my system. I install this in ;; `%USERPROFILE%\LocalAppInfo\apps\Git\bin'. (setq git-shell-path (concat (getenv "USERPROFILE") "\\LocalAppInfo\\apps\\Git\\bin")) (setq git-shell-executable (concat git-shell-path "\\bash.exe")) (add-to-list 'exec-path git-shell-path) (setenv "PATH" (concat git-shell-path ";" (getenv "PATH"))) (message "Windows preferences set.")) (if (eq system-type 'windows-nt) (udf-windows-setup)) 

请注意,变量git-shell-path将需要根据你的系统上安装git地方来定义。 我将它安装在我使用它的Windows机器上的%USERPROFILE%\LocalAppInfo\apps\Git