mirror of
https://github.com/prabirshrestha/async.vim.git
synced 2025-12-23 12:14:19 +01:00
6102020b4690f05ab6509a37fa25bc53e2d799a9
async.vim
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")
endfunction
if has('win32') || has('win64')
let argv = ['cmd', '/c', 'dir c:\ /b']
else
let argv = ['bash', '-c', 'ls']
endif
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'
else
echom 'job failed to start'
endif
" If you want to get the process id of the job
let pid = async#job#pid(jobid)
" If you want to wait the job:
call async#job#wait([jobid], 5000) " timeout: 5 sec
" If you want to stop the job:
call async#job#stop(jobid)
APIs
APIs are based on neovim's job control APIs.
Embedding
Async.vim can be either embedded with other plugins or be used as an external plugin. If you want to embed run the following vim command.
:AsyncEmbed path=./autoload/myplugin/job.vim namespace=myplugin#job
Todos
- Fallback to sync
system()calls in vim that doesn't supportjob job_stopandjob_sendis treated as noop when usingsystem()on_stderrdoesn't work when usingsystem()- Fallback to python/ruby threads and vimproc instead of using
system()for better compatibility (PRs welcome!!!)
Languages
Vim Script
95.7%
Shell
4.3%