+ruby を使用して最近のバージョンの Vim をコンパイルすると、Vim 内で :ruby コマンドを使用できます。
非同期の Ruby コードを実行すると、内部で何が起こっているのですか?
例えば:
:ruby <<EOS
print 'hello'
Thread.new do
sleep 1
print 'world'
end
EOS
# hello
:ruby print 'foo'
# world
# foo
これにより、予想どおり、すぐに「hello」が出力されます。ただし、別の :ruby コマンドを実行するまで「world」は表示されません。Vim は 1 つのスレッドのみをサポートし、次の :ruby コマンドで実行するために新しいスレッドをある種のキューにプッシュしますか?
でこれについて Vim のソースを調べてみましsrc/if_ruby.c
たが、私の Ruby C-Extension の読み取りスキルは最高ではありません。
数秒ごとにポーリングして Vim ウィンドウを更新する Ruby を書きたいので、質問しています。