我如何告诉逃犯我在Windows上使用Git的路径?

时间:2014-09-16 08:03:12

标签: windows git vim cmd

所以我下载了Vim的逃犯插件,并尝试让它在我的Windows 7机器上运行。

我的git.exe中没有%PATH%的路径,我不想添加它,因为可能会出现问题。

我的Git安装在C:\Program Files (x86)\Git\。我可以告诉git.exeg:fugitive_git_executable)的路径。{/ p>

我尝试了几种口味:

  1. 'C:/Program Files (x86)/Git/cmd/git.exe'
  2. 'C:\Program Files (x86)\Git\cmd\git.exe'
  3. "C:\Program Files (x86)\Git\cmd\git.exe"
  4. "C:\\Program Files (x86)\\Git\\cmd\\git.exe"
  5. 但没有一个有用。似乎在1,2,4中,路径中的括号存在问题。由此产生的:Git status调用是

    C:\WINDOWS\system32\cmd.exe /c (C:\Program Files ^(x86^)\Git\cmd\git.exe status)
    

    并且cmd窗口抱怨"\Git\cmd\git.exe" could not be processed(翻译自德语)。

    如何指定git.exe的路径,以便我不必扩展$PATH变量?

    或者更一般:在Vim中使用system命令时,如何调用位于'C:\Program Files (x86)\下的程序?

3 个答案:

答案 0 :(得分:2)

在你的vimrc中,添加如下内容:

if has('win32')
    let $PATH .= ';' . 'C:/Program Files (x86)/Git/bin'
endif

这不会影响Vim之外%PATH%的值。

或者,为了让Fugitive像宣传的那样工作,你必须稍微补丁一下。 在s:Git()替换

call s:ExecuteInTree('!'.git.' '.cmd)

if has('win32')
    call s:ExecuteInTree('!"'.git.' '.cmd.'"')
else
    call s:ExecuteInTree('!'.git.' '.cmd)
endif

然后在vimrc中可执行文件的路径周围加上引号:

let g:fugitive_git_executable = '"C:/Program Files (x86)/Git/bin/git"'

(见correct quoting for cmd.exe for multiple arguments。)

您可能希望与维护者联系。如果这样,我会感到惊讶 问题没有出现过。

我只修改$ PATH。无论如何,有些程序需要 $ PATH才能正确设置。

(另外:@ echristopherson的解决方案非常可行,但在21世纪不得不求助于此。)

答案 1 :(得分:1)

标准目录C:\Program Files (x86)可以缩写为C:\Progra~2 * 。这种缩短的名称是从Windows 95开始在FAT文件系统(内部限制为八个基本字符和三个扩展字符的文件名)上实际表示文件名或带有空格的文件名的长度,但它仍然支持现代版本的兼容性使用NTFS的Windows系统,至少在Program Files (x86)文件夹等特定情况下。

C:\Program Files同样是C:\Progra~1

* 在Vimscript中,反斜杠应更改为斜杠,除非它们加倍或用单引号括起来。

答案 2 :(得分:0)

虽然其他两个答案(1 2)提供了问题的解决方法,但是玩游戏向我展示我需要以这种方式指定路径:

let g:fugitive_git_executable = '"C:\\Program Files ^(x86^)\\Git\\cmd\\git.exe"'

是的,它实际上是一个单引号,后跟双引号AND(好像这不够奇怪)我需要用^(^)转义括号。

虽然这个问题已经解决了,但我不知道为什么我必须这样指定路径......