Com base no lh-vim-lib , aqui está outra solução que define um menu e um comando (adicionar um mapeamento se torna tão simples quanto chamar o comando do mapeamento).
No seu caso, seria parecido com:
function! s:getSNR()
if !exists("s:SNR")
let s:SNR=matchstr(expand("<sfile>"), "<SNR>\d\+_\zegetSNR$")
endif
return s:SNR
endfunction
function! s:UsePdfLaTeX()
set makeprg=pdflatex\ $*
inoremap <buffer> <localleader>new \begin{document}<CR><CR>\end{document}
endfunction
function! s:UseContext()
set makeprg=context\ $*
inoremap <buffer> <localleader>new \startext<CR><CR>\stoptext
endfunction
let s:Data = {
\ "variable": "myengine",
\ "values": [ 'pdflatex', 'context' ],
\ "actions": [ function(s:getSNR()."UsePdfLaTeX"), function(s:getSNR()."UseContext") ],
\ "menu": { "priority": '42.42', "name": '&LaTeX.&Engine'}
\}
call lh#menu#def_toggle_item(s:Data)
nnoremap <silent> <F7> :Toggle LaTeXEngine<cr>
Observação: ele pode ser estendido para suportar quantas alternativas você desejar.