Updated runtime files.
diff --git a/runtime/autoload/context.vim b/runtime/autoload/context.vim
new file mode 100644
index 0000000..254d710
--- /dev/null
+++ b/runtime/autoload/context.vim
@@ -0,0 +1,184 @@
+" Language:           ConTeXt typesetting engine
+" Maintainer:         Nicola Vitacolonna <nvitacolonna@gmail.com>
+" Latest Revision:    2016 Oct 21
+
+let s:keepcpo= &cpo
+set cpo&vim
+
+" Helper functions {{{
+function! s:context_echo(message, mode)
+  redraw
+  echo "\r"
+  execute 'echohl' a:mode
+  echomsg '[ConTeXt]' a:message
+  echohl None
+endf
+
+function! s:sh()
+  return has('win32') || has('win64') || has('win16') || has('win95')
+        \ ? ['cmd.exe', '/C']
+        \ : ['/bin/sh', '-c']
+endfunction
+
+" For backward compatibility
+if exists('*win_getid')
+
+  function! s:win_getid()
+    return win_getid()
+  endf
+
+  function! s:win_id2win(winid)
+    return win_id2win(a:winid)
+  endf
+
+else
+
+  function! s:win_getid()
+    return winnr()
+  endf
+
+  function! s:win_id2win(winnr)
+    return a:winnr
+  endf
+
+endif
+" }}}
+
+" ConTeXt jobs {{{
+if has('job')
+
+  let g:context_jobs = []
+
+  " Print the status of ConTeXt jobs
+  function! context#job_status()
+    let l:jobs = filter(g:context_jobs, 'job_status(v:val) == "run"')
+    let l:n = len(l:jobs)
+    call s:context_echo(
+          \ 'There '.(l:n == 1 ? 'is' : 'are').' '.(l:n == 0 ? 'no' : l:n)
+          \ .' job'.(l:n == 1 ? '' : 's').' running'
+          \ .(l:n == 0 ? '.' : ' (' . join(l:jobs, ', ').').'),
+          \ 'ModeMsg')
+  endfunction
+
+  " Stop all ConTeXt jobs
+  function! context#stop_jobs()
+    let l:jobs = filter(g:context_jobs, 'job_status(v:val) == "run"')
+    for job in l:jobs
+      call job_stop(job)
+    endfor
+    sleep 1
+    let l:tmp = []
+    for job in l:jobs
+      if job_status(job) == "run"
+        call add(l:tmp, job)
+      endif
+    endfor
+    let g:context_jobs = l:tmp
+    if empty(g:context_jobs)
+      call s:context_echo('Done. No jobs running.', 'ModeMsg')
+    else
+      call s:context_echo('There are still some jobs running. Please try again.', 'WarningMsg')
+    endif
+  endfunction
+
+  function! context#callback(path, job, status)
+    if index(g:context_jobs, a:job) != -1 && job_status(a:job) != 'run' " just in case
+      call remove(g:context_jobs, index(g:context_jobs, a:job))
+    endif
+    call s:callback(a:path, a:job, a:status)
+  endfunction
+
+  function! context#close_cb(channel)
+    call job_status(ch_getjob(a:channel)) " Trigger exit_cb's callback for faster feedback
+  endfunction
+
+  function! s:typeset(path)
+    call add(g:context_jobs,
+          \ job_start(add(s:sh(), context#command() . ' ' . shellescape(fnamemodify(a:path, ":t"))), {
+          \   'close_cb' : 'context#close_cb',
+          \   'exit_cb'  : function(get(b:, 'context_callback', get(g:, 'context_callback', 'context#callback')),
+          \                         [a:path]),
+          \   'in_io'    : 'null'
+          \ }))
+  endfunction
+
+else " No jobs
+
+  function! context#job_status()
+    call s:context_echo('Not implemented', 'WarningMsg')
+  endfunction!
+
+  function! context#stop_jobs()
+    call s:context_echo('Not implemented', 'WarningMsg')
+  endfunction
+
+  function! context#callback(path, job, status)
+    call s:callback(a:path, a:job, a:status)
+  endfunction
+
+  function! s:typeset(path)
+    execute '!' . context#command() . ' ' . shellescape(fnamemodify(a:path, ":t"))
+    call call(get(b:, 'context_callback', get(g:, 'context_callback', 'context#callback')),
+          \ [a:path, 0, v:shell_error])
+  endfunction
+
+endif " has('job')
+
+function! s:callback(path, job, status) abort
+  if a:status < 0 " Assume the job was terminated
+    return
+  endif
+  " Get info about the current window
+  let l:winid = s:win_getid()             " Save window id
+  let l:efm = &l:errorformat              " Save local errorformat
+  let l:cwd = fnamemodify(getcwd(), ":p") " Save local working directory
+  " Set errorformat to parse ConTeXt errors
+  execute 'setl efm=' . escape(b:context_errorformat, ' ')
+  try " Set cwd to expand error file correctly
+    execute 'lcd' fnameescape(fnamemodify(a:path, ':h'))
+  catch /.*/
+    execute 'setl efm=' . escape(l:efm, ' ')
+    throw v:exception
+  endtry
+  try
+    execute 'cgetfile' fnameescape(fnamemodify(a:path, ':r') . '.log')
+    botright cwindow
+  finally " Restore cwd and errorformat
+    execute s:win_id2win(l:winid) . 'wincmd w'
+    execute 'lcd ' . fnameescape(l:cwd)
+    execute 'setl efm=' . escape(l:efm, ' ')
+  endtry
+  if a:status == 0
+    call s:context_echo('Success!', 'ModeMsg')
+  else
+    call s:context_echo('There are errors. ', 'ErrorMsg')
+  endif
+endfunction
+
+function! context#command()
+  return get(b:, 'context_mtxrun', get(g:, 'context_mtxrun', 'mtxrun'))
+        \ . ' --script context --autogenerate --nonstopmode'
+        \ . ' --synctex=' . (get(b:, 'context_synctex', get(g:, 'context_synctex', 0)) ? '1' : '0')
+        \ . ' ' . get(b:, 'context_extra_options', get(g:, 'context_extra_options', ''))
+endfunction
+
+" Accepts an optional path (useful for big projects, when the file you are
+" editing is not the project's root document). If no argument is given, uses
+" the path of the current buffer.
+function! context#typeset(...) abort
+  let l:path = fnamemodify(strlen(a:000[0]) > 0 ? a:1 : expand("%"), ":p")
+  let l:cwd = fnamemodify(getcwd(), ":p") " Save local working directory
+  call s:context_echo('Typesetting...',  'ModeMsg')
+  execute 'lcd' fnameescape(fnamemodify(l:path, ":h"))
+  try
+    call s:typeset(l:path)
+  finally " Restore local working directory
+    execute 'lcd ' . fnameescape(l:cwd)
+  endtry
+endfunction!
+"}}}
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
+" vim: sw=2 fdm=marker
diff --git a/runtime/autoload/contextcomplete.vim b/runtime/autoload/contextcomplete.vim
new file mode 100644
index 0000000..5b93bb0
--- /dev/null
+++ b/runtime/autoload/contextcomplete.vim
@@ -0,0 +1,25 @@
+" Language:           ConTeXt typesetting engine
+" Maintainer:         Nicola Vitacolonna <nvitacolonna@gmail.com>
+" Latest Revision:    2016 Oct 15
+
+let s:keepcpo= &cpo
+set cpo&vim
+
+" Complete keywords in MetaPost blocks
+function! contextcomplete#Complete(findstart, base)
+  if a:findstart == 1
+    if len(synstack(line('.'), 1)) > 0 &&
+          \ synIDattr(synstack(line('.'), 1)[0], "name") ==# 'contextMPGraphic'
+      return syntaxcomplete#Complete(a:findstart, a:base)
+    else
+      return -3
+    endif
+  else
+    return syntaxcomplete#Complete(a:findstart, a:base)
+  endif
+endfunction
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
+" vim: sw=2 fdm=marker