Jon*_*rns 6 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...
Run Code Online (Sandbox Code Playgroud)
有谁知道如何设置包含空格的shell路径?
你几乎做对了.你需要逃避每个周围的".而不是逃避空间,窗口要求你用引号括起字符串.但是vim将引用解释为注释.所以你需要逃避双引号.你还需要一个反斜杠来逃避空间.
请参阅中的示例:h 'shell' (注意shell周围的单引号是获取shell选项的帮助所必需的.否则,您将获得有关shell ex命令的帮助.)
:set shell=\"C:\Program\ Files\Git\bin\sh.exe\"
Run Code Online (Sandbox Code Playgroud)
您可以键入以下内容来检查值:
:echo &shell
Run Code Online (Sandbox Code Playgroud)
作为旁注 - 我建议不要在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
Run Code Online (Sandbox Code Playgroud)
编辑:正如@LucHermitte在评论中提到的,当shell设置为bash或sh时,在win32 gvim上不起作用的插件应该被修复.我同意......但根据我的经验,这并不总是可行的.所以我总是把shell设置回$ COMSPEC(通常是cmd.exe).如果你的插件没有任何问题,那就太好了,不理会我的旁注.)