我想执行一个批处理文件,并在一个新的缓冲区上显示输出。我知道我可以为此使用!start
,但是我不知道如何使它重用同一命令行,而不是每次都启动一个新命令行。
我设法通过使用:terminal
而不是send_keys()
来关闭,检查终端缓冲区是否仍然存在,并仅在不存在时才启动一个新缓冲区。问题是我得到的是一个交互式shell,所以我必须切换到Terminal-Normal模式才能浏览缓冲区的内容,否则cmd会夺走vim的焦点,并且无法让我四处走动。提示本身也是输出的一部分,这很烦人。
代码如下:
fun! MatchAnyInList(list, value)
return index(map(a:list, 'v:val =~# "' . a:value . '"'), 1) >= 0
endfun
" I have no idea what I'm doing
fun! RunBuildBatchFile()
if !exists("g:terminal_bufnum") || MatchAnyInList(['finished', ''], term_getstatus(g:terminal_bufnum))
let g:terminal_bufnum = term_start("cmd", {'hidden': 1})
call term_sendkeys(g:terminal_bufnum, "vcvarsall x64\<CR>")
endif
if bufwinnr(g:terminal_bufnum) < 0
execute "botright sb " . g:terminal_bufnum
call term_setsize(g:terminal_bufnum, 4, 0)
endif
call term_sendkeys(g:terminal_bufnum, "cls\<CR>")
call term_sendkeys(g:terminal_bufnum, "C:\\Path\To\Executable\Command.exe")
if term_getstatus(g:terminal_bufnum)=~# "normal"
call feedkeys("i")
endif
endfun
可能有更好的方法。我尝试在网上和文档中查找有关此资料的信息,但是却一无所获。有任何想法吗?