dotfiles/vim/.vim/plugin/functions.vim

27 lines
1.2 KiB
VimL

" This callback will be executed when the entire command is completed
function! BackgroundCommandClose(channel)
" Read the output from the command into the quickfix window
unlet g:backgroundCommandOutput
endfunction
function! RunBackgroundCommand(command)
" Make sure we're running VIM version 8 or higher.
if v:version < 800
echoerr 'RunBackgroundCommand requires VIM version 8 or higher'
return
endif
if exists('g:backgroundCommandOutput')
echo 'Already running task in background'
else
echo 'Running task in background'
" Launch the job.
" Notice that we're only capturing out, and not err here. This is because, for some reason, the callback
" will not actually get hit if we write err out to the same file. Not sure if I'm doing this wrong or?
let g:backgroundCommandOutput = tempname()
call job_start(a:command, {'close_cb': 'BackgroundCommandClose', 'out_io': 'file', 'out_name': g:backgroundCommandOutput})
endif
endfunction
" So we can use :BackgroundCommand to call our function.
command! -nargs=+ -complete=shellcmd RunBackgroundCommand call RunBackgroundCommand(<q-args>)