2

Neovim のジョブ制御の例は:help job-control、bash スクリプトでうまく機能します。ただし、ルビーで機能させることはできません。次の例を検討してください。

set nocp
set buftype=nowrite

call jobstart('shell', 'bash', ['-c', 'for ((i = 0; i < 5; i++)); do sleep 2 && printf "Hello Bash!\n"; done'])
call jobstart('shell', 'ruby', ['-e', '5.times do sleep 2 and puts "Hello Ruby!" end'])

function JobHandler()
  if v:job_data[1] == 'exit'
    let str = v:job_data[0] . ' exited'
  else
    let str = join(v:job_data[2])
  endif

  call append(line('$'), str)
endfunction

au JobActivity shell* call JobHandler()

実行nvim -u NONE -S <filename>すると、次の出力が生成されます。

Hello Bash!
Hello Bash!
Hello Bash!
Hello Bash!
Hello Bash!
1 exited
Hello Ruby! Hello Ruby! Hello Ruby! Hello Ruby! Hello Ruby!
2 exited

ruby の例を bash でそのように機能させるにはどうすればよいでしょうか?

4

1 に答える 1

2

ruby の出力がバッファリングされていることがわかります。目的の出力を表示するには、強制的にフラッシュする必要があります。

call jobstart('shell', 'ruby', ['-e', '$stdout.sync = true; 5.times do sleep 1 and puts "Hello Ruby!\n" end'])

私の最初の問題は、Ruby テストを非同期で実行することでした。$stdout.sync = trueそれが機能するためには、ファイルに書き込み、次を使用して要求する必要がありました-r

call jobstart('shell', 'ruby', ['-r', '/tmp/opts.rb', '-I', 'test', 'test/unit/user_test.rb'])
于 2014-12-03T03:50:10.037 に答える