" 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() function! GetCWD() let l:cwd = system('pwd | rev |cut -d- -f1 | rev | xargs | sed "s/[[:space:]]/\\\\&/g\"') echo l:cwd call setline('.', l:cwd) unlet l:cwd endfunction