6

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时,这很有效:我可以打开一个 shell 并输入“ls”。

但是,Mx shell-command失败了。当我尝试通过 shell-command 运行“ls”时(根据Ch f shell-command ,它应该在 *Shell Command Output* 缓冲区中打印其输出),我收到一条错误消息:

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

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

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

4

3 回答 3

12

尝试将两个变量设置为指向同一个可执行文件并确保路径位于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")
于 2013-05-21T18:43:15.123 回答
2

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

.emacs.d在我使用 emacs 的所有计算机之间进行同步,其中包括 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在系统上的安装位置定义该变量。我将它安装%USERPROFILE%\LocalAppInfo\apps\Git在我使用它的一台 Windows 机器上。

于 2014-06-18T19:24:55.177 回答
0

使用 GitBash,您可以使用 lein 脚本而不是 lein.bat 脚本。将 lein 脚本放入bin您在 Windows 上的用户帐户中调用的目录中。GitBash 的可执行文件上应该有该bin目录PATH,因此您可以在lein任何地方运行。

使用这种方法,您不需要在 Emacs Lisp 中进行任何配置。

查看我的完整答案

于 2018-04-19T09:28:41.040 回答