我正在开发一个与终端缓冲区中的 REPL 交互的 Neovim 插件。我希望能够向 REPL 发送命令,复制响应,并以某种方式将其显示给用户。目前,在当前 vimscript 函数终止之前,终端缓冲区似乎不会刷新输出,所以我不能有一个函数,例如:
function! plugin#eval(str)
call s:send_to_repl(str)
echomsg s:get_response()
endfunction
因为该get_response
函数在更新之前正在使用终端缓冲区。
目前,我正在使用 neovim 的作业控制,但如果这可以在 vanilla 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 中不起作用。