1

我一直在尝试使用 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

结束乐趣

4

0 回答 0