normalize async job control api for vim and neovim
Switch branches/tags
Nothing to show
Clone or download
k-takata and prabirshrestha Fix that async#job#wait() always returns 0 (#17)
Use 'return' instead of 'call' to fix it.
Latest commit c5b236f Aug 25, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
autoload/async Fix that async#job#wait() always returns 0 (#17) Aug 25, 2018
.travis.yml added .travis.yml and vint for vim linting Jul 11, 2017
LICENSE added MIT License Mar 21, 2016 Fix that async#job#wait() always returns 0 (#17) Aug 25, 2018


normalize async job control api for vim and neovim

sample usage

function! s:handler(job_id, data, event_type)
    echo a:job_id . ' ' . a:event_type
    echo join(a:data, "\n")

if has('win32') || has('win64')
    let argv = ['cmd', '/c', 'dir c:\ /b']
    let argv = ['bash', '-c', 'ls']

let jobid = async#job#start(argv, {
    \ 'on_stdout': function('s:handler'),
    \ 'on_stderr': function('s:handler'),
    \ 'on_exit': function('s:handler'),
\ })

if jobid > 0
    echom 'job started'
    echom 'job failed to start'

" If you want to wait the job:
call async#job#wait([job], 5000)  " timeout: 5 sec

" If you want to stop the job:
call async#job#stop(job)


APIs are based on neovim's job control APIs.


Async.vim can be either embedded with other plugins or be used as an external plugin. If you want to embed all you need is to change these 4 function names async#job# to what ever you want. E.g.:

" public apis {{{
function! yourplugin#job#start(cmd, opts) abort
    return s:job_start(a:cmd, a:opts)

function! yourplugin#job#stop(jobid) abort
    call s:job_stop(a:jobid)

function! yourplugin#job#send(jobid, data) abort
    call s:job_send(a:jobid, a:data)

function! yourplugin#job#wait(jobids, ...) abort
    let l:timeout = get(a:000, 0, -1)
    return s:job_wait(a:jobids, l:timeout)
" }}}


  • Fallback to sync system() calls in vim that doesn't support job
  • job_stop and job_send is treated as noop when using system()
  • on_stderr doesn't work when using system()
  • Fallback to python/ruby threads and vimproc instead of using system() for better compatibility (PRs welcome!!!)