在Vim for Windows上设置Cygwin shell路径

时间:2012-12-17 09:59:27

标签: windows vim cygwin git-bash

我试图在Windows上设置Vim,使用Git bash(Cygwin)作为shell环境。我收到一个关于临时文件的错误,我99%肯定与shell无法加载有关(即“!”命令不起作用)。

在我的_vimrc文件中,我尝试将shell选项设置为各种内容,但都不起作用。我的cygwin / git bash命令路径是 C:\ Program Files \ Git \ bin \ sh.exe ,这个空间似乎导致了问题。我尝试了以下内容,没有成功:

:set shell=C:\Program Files\Git\bin\sh.exe    " Error = Unknown options: Files/Git/bin/sh.exe

:set shell=C:/Program Files/Git/bin/sh.exe    " Error = Unknown options: Files/Git/bin/sh.exe

:set shell="C:/Program Files/Git/bin/sh.exe"  " Error when running a command: shell option is empty

:set shell=C:/Program\ Files/Git/bin/sh.exe   " Error when running a command: 'C:/Program' is not recognized as an internal or external command...

有谁知道如何设置包含空格的shell路径?

2 个答案:

答案 0 :(得分:7)

你几乎做对了。你需要逃避每个周围的“。而不是逃避空间,窗口要求你用引号括起字符串。但是vim将引用解释为注释。所以你需要逃避双引号。你还需要一个反斜杠来逃避空间。

请参阅:h 'shell'中的示例(请注意shell周围的单引号是获取shell选项的帮助所必需的。否则,您将获得有关shell ex命令的帮助。)

:set shell=\"C:\Program\ Files\Git\bin\sh.exe\"

您可以输入以下内容来检查值:

:echo &shell

作为旁注 - 我建议不要在win32 gvim中使用bash / sh。许多插件测试has("win32")并构造cmd.exe的shell命令而不是& shell值。因此,如果shell不是cmd.exe,这些插件将失败。理想情况下,这些插件会测试&shell值,而不是使用has("win32")。所以,即使我从cygwin中调用win32 gvim,我总是使用我的vimrc中的代码片段将shell设置回cmd.exe或更好$COMSPEC

if has("win32") || has("win64") || has("win16")
  "I do other stuff in here...

  "Then only inside this if block for windows, I test the shell value
  "On windows, if called from cygwin or msys, the shell needs to be changed to cmd.exe
  if &shell=~#'bash$'
    set shell=$COMSPEC " sets shell to correct path for cmd.exe
  endif
endif

编辑:正如@LucHermitte在评论中提到的那样,当shell设置为bash或sh时,在win32 gvim上不起作用的插件应该被修复。我同意......但根据我的经验,这并不总是可行的。所以我总是把shell设置回$ COMSPEC(通常是cmd.exe)。如果你的插件没有任何问题,那就太好了,不理会我的旁注。)

答案 1 :(得分:1)

我使用以下定义从win32-gvim运行外部cygwin相关的可执行文件:https://github.com/LucHermitte/vim-system-tools/blob/master/plugin/system_utils.vim#L467(其他shell选项也非常重要)

但是,我建议你把你的cygwin入口点放到%PATH%中。这将是最简单的方法。