私は端末バッファ内のREPLとやりとりするNeovimプラグインに取り組んでいます。私は、REPLにコマンドを送信し、応答をコピーして何らかの形でそれをユーザーに表示できるようにしたいと考えています。現在、ターミナルバッファは、現在のvimscript機能が終了するまで出力をリフレッシュしていないようですので、私はありません、単一の機能、例えば持つことはできません。get_response
機能は、端末のバッファに取り組んでいるようNeovim非同期バッファ待ち
function! plugin#eval(str)
call s:send_to_repl(str)
echomsg s:get_response()
endfunction
をそれが更新される前に。
現在、私は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では動作しないようです。
REPLと通信するコードはhereです。プロセスを管理するコードはhereです。
ええと、 'TextChanged'' autocmdは私が期待していることを全くしません。ユーザーのカーソルが現在ターミナルバッファに置かれているときだけ起動するように見えます。今すぐ 'jobattach'をチェックアウトすると – ephrion
' jobattach'はまだ存在しません。これは機能要求です。 –
@ephrionタイマーを使って別の提案を追加しました。しかしおそらく 'jobattach()'は本当に必要なものです。 –