6

我正在尝试在 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 路径?

4

2 回答 2

9

你几乎做对了。您需要转义每个周围的 "。w​​indows 要求您将字符串括在引号中,而不是转义一个空格。但是 vim 将引号解释为注释。因此您需要转义双引号。您还需要一个反斜杠来转义空间。

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

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

您可以通过键入以下内容来检查该值:

:echo &shell

不过附带说明一下 - 我建议不要在 win32 gvim 中使用 bash/sh。许多插件测试has("win32")和构造 shell 命令cmd.exe而不是 &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)。如果您的插件没有任何问题,那很好,请忽略我的旁注。)

于 2012-12-17T15:50:28.133 回答
1

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

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

于 2012-12-17T12:58:13.853 回答