6

Git bash (Cygwin) をシェル環境として使用して、Windows で Vim をセットアップしようとしています。一時ファイルに関するエラーが発生しましたが、これはシェルをロードできない (つまり、"!" コマンドが機能しない) という事実に関連していると 99% 確信しています。

私の_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...

スペースを含むシェルパスを設定する方法を知っている人はいますか?

4

2 に答える 2

9

ほとんど正解です。Windows では、スペースをエスケープする代わりに、文字列を引用符で囲む必要があります。しかし、vim は引用符をコメントとして解釈します。そのため、二重引用符をエスケープする必要があります。スペース。

の例を参照してください:h 'shell' (シェル オプションのヘルプを表示するには、シェルを一重引用符で囲む必要があることに注意してください。それ以外の場合は、シェルの ex コマンドのヘルプが表示されます。)

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

次のように入力して、値を確認できます。

:echo &shell

補足として、win32 gvim 内で bash/sh を使用しないことをお勧めします。多くのプラグインは、&shell 値ではなく、has("win32")シェル コマンドをテストして構築します。cmd.exeその結果、シェルが .xml でない場合、これらのプラグインは失敗しますcmd.exe。理想的には、これらのプラグインは&shellを使用するのではなく、値をテストしますhas("win32")。そのため、cygwin 内から win32 gvim を呼び出す場合でも、vimrc でこのスニペットを使用して、常にシェルを元に戻す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 がコメントで言及しているように、シェルが bash または sh に設定されている場合に win32 gvim で動作しないプラグインは修正する必要があります。同意します...しかし、私の経験では、これは常に実現可能ではありませんでした。そのため、シェルを常に $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 (他のシェル オプションもかなり重要です)

ただし、cygwin のエントリ ポイントを %PATH% に入れることをお勧めします。これが最も簡単な方法になります。

于 2012-12-17T12:58:13.853 に答える