ターミナル バッファで REPL と対話する Neovim プラグインに取り組んでいます。コマンドを REPL に送信し、応答をコピーして、何らかの方法でユーザーに表示できるようにしたいと考えています。現在、現在の vimscript 関数が終了するまでターミナル バッファは出力を更新しないようです。
function! plugin#eval(str)
call s:send_to_repl(str)
echomsg s:get_response()
endfunction
get_response
関数は、更新される前に端末バッファーで動作しているためです。
現在、neovim のジョブ コントロールを使用していますが、これがバニラ vim で実現できればなおさらです。
端末を初期化するために使用しているコードは次のとおりです。
function! s:start_buffer(height)
set bufhidden=hide
set noswapfile
set buftype=nofile
set hidden
terminal! stack ghci --with-ghc intero
let l:buffer_id = bufnr('%')
let g:intero_job_id = b:terminal_job_id
endfunction
コマンドをREPLに送信する方法は次のとおりです。
function! s:send(str)
call jobsend(g:intero_job_id, add([a:str], ''))
endfunction
更新するコマンドを追加しようとしましたedit
が、REPL では機能しないようです。