Я хочу выполнить командный файл и отобразить вывод в новом буфере.Я знаю, что могу использовать !start
для этого, но я не могу понять, как заставить его использовать одну и ту же командную строку вместо запуска новой каждый раз.
Мне удалось приблизиться, используя :terminal
вместо send_keys()
, проверив, существует ли буфер терминала, и запуская новый только тогда, когда его нет.Проблема в том, что я получаю интерактивную оболочку, поэтому мне нужно переключиться в режим 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
Вероятно, есть гораздо лучший способ сделать это.Я пытался найти информацию об этом материале в Интернете и в документах, но я ничего не получил.Есть идеи?