PA_translator.vim プラグインを使用しようとしましたが、Win32 Gvim では機能しないことがわかりました。これは、埋め込まれた Vim Ruby スクリプトでは、サブプロセスからパイプするコマンドを使用できないためと思われます。元のプロセスはコマンドを動的に構築し、サブプロセスを起動して、次のように JSON スニペットを取得します。
cmd = "require 'net/http'; p Net::HTTP.get('%s', '%s')"% [host, path]
response = `ruby -e "#{cmd}"`
これをコマンドライン Ruby スクリプトで実行すると正常に動作しますが、Vim スクリプト内ではパイプが空の文字列を返すように見えます..
同じ結果が得られる他のいくつかの方法も試しました。
response = ''
IO.popen("ruby.exe", "w+") do |f|
f.write cmd
f.close_write
response = f.read
p response
end
さらには:
def redirect
orig_defout = $stdout
$stdout = StringIO.new
yield
$stdout.string
ensure
$stdout = orig_defout
end
response = redirect { eval cmd }
これらはすべて同じ理由で失敗しているようです。パイプから出力を取得できず、空の文字列が返されます。GVim は真の win32 プロセスですが、サブプロセスからのパイプが機能しない理由はありますか?
編集: 埋め込まれた vim/perl からパイプされた出力をキャプチャしようとすると、正常に動作するので、vim -> win32 -> ruby の組み合わせに特定の問題があると思います:
fun! SayHello()
perl << EOF
$bob = `ls`;
VIM::Msg($bob);
EOF
楽しい