vim-jp » Vimのユーザーと開発者を結ぶコミュニティサイト

Windowsで外部コマンドが正しく実行出来なくなっていた問題が修正されました。

Posted on 2012-02-22


Patch 7.3.443 にてWindows上での外部コマンド実行に関する実装に変更が入りました。 以前までは空白を含むコマンド(例: my editor.exe)を引数付きで実行する際、cmd.exeに正しく引数が渡されず、期待通りの動作になりませんでした。 本パッチは

""my editor.exe" "my file.txt""

の様に全体をダブルクォートした後でcmd.exe/sスィッチを使って両端のダブルクォートを取り除くことにより、空白を含むコマンドを実行しようという実装となりました。このパッチにより一時的にshellcmdflagオプションに/sが追加されました。

しかしこの方法を用いた場合、引数に&を含む引数が正しく渡されず誤動作する事が判明しました。 そこでPatch 7.3.445 にて

("my editor.exe" "my file.txt")

の様に()でクォートする事で回避を行いました。この際、Patch 7.3.443でデフォルトとなった/sオプションは廃止されました。 この修正に伴い、ファイルへのリダイレクト処理に誤動作が生じ Patch 7.3.446 で特殊な文字をエスケープする shellxescape が導入されました。

ですがこの方法を用いた場合、これまで使用出来ていた

:!start

という外部コマンド実行に不具合がある事が分かり、Patch 7.3.447 によりコマンドプロンプト特有のワークアラウンド修正が行われました。 今回の修正により、空白を含むコマンドを実行する事が出来る様になりました。また下記の様に :!start を使ってcygwinのシェルを実行する事も出来る様になりました。

:!start C:\cygwin\bin\mintty.exe -e /bin/bash.exe
           -l -c "cd $HOME; exec /bin/bash.exe"

(※実際は一行)

ですが上記の経緯もあり、外部コマンドを実行するプラグインに大きく影響を与えている可能性があります。Patch 7.3.447 は Patch 7.3.443 以前の動作との互換性をなるべく保持する様な修正となりましたが、いくらかのプラグインで誤動作する可能性があります。 そのような時は下記のリンクから前回リリース安定版をご利用下さい。

Vim 7.3.447 (2012/02/22版) 配信

またWindows上で動作する各プラグインで互換性が無くなったという場合には、遠慮なく issues に不具合報告をお願い致します。


もどる