Shougo/vimproc — Issue #10: Windows環境でパイプが動作しません
Author: Shougo
Created: 2011-12-18 01:54:15+00:00
State: open

以前は動作していたはずなんですが、最新版で確認したところ、次の単純なコマンドが動作していなくなっていました。
ちなみに、Linuxでは動作することを確認済み。

% ls | cat
!!!"C:/Program Files (x86)/Git/bin/cat.exe": -: Bad file number!!!
!!!"C:/Program Files (x86)/Git/bin/cat.exe": -: Bad file number!!!
!!!!!!!!!vimshell: exit 1 "ls|cat"!!!

Windows 7 64bit環境の32bit GVim上で確認。

Bad file numberについては、Webを参照したところ、
http://docs.oracle.com/cd/E19455-01/806-2720/msgs-91/index.html
> ファイル記述子がオープンファイル以外を参照しているか、または書き込み (または読み取り) 専用に開かれたファイルに対して read(2) - または write(2) - 要求が実行されました。
ということらしいです。

catに渡されているファイル記述子（パイプ）がおかしいのだと思いますが、ソースコードを読んでいてもどこがおかしいのかわかりません。原因がつかめないため、こうしてIssuesに登録することにしました。Windowsのプロセス管理に詳しい人（特にmattnさん）にコードをチェックして欲しいのですが……。C言語側のソースコード(autoload/proc_w32.c)が悪いのはほぼ間違い無いです。

ちなみに、vimshellからプログラムの出力が読めるし、入出力のリダイレクションも動作することは確認済みです。