vim9script # Vim filetype plugin file # Language: ConTeXt typesetting engine # Maintainer: Nicola Vitacolonna # Former Maintainers: Nikolai Weibull # Latest Revision: 2023 Dec 26 if exists("b:did_ftplugin") finish endif import autoload '../autoload/context.vim' b:did_ftplugin = 1 if !exists('current_compiler') compiler context endif b:undo_ftplugin = "setl com< cms< def< inc< sua< fo< ofu<" setlocal comments=b:%D,b:%C,b:%M,:% setlocal commentstring=%\ %s setlocal formatoptions+=tjcroql2 setlocal omnifunc=context.Complete setlocal suffixesadd=.tex,.mkxl,.mkvi,.mkiv,.mkii &l:define = '\\\%([egx]\|char\|mathchar\|count\|dimen\|muskip\|skip\|toks\)\=' .. 'def\|\\font\|\\\%(future\)\=let' .. '\|\\new\%(count\|dimen\|skip\|muskip\|box\|toks\|read\|write' .. '\|fam\|insert\|if\)' &l:include = '^\s*\\\%(input\|component\|product\|project\|environment\)' if exists("g:loaded_matchit") && !exists("b:match_words") b:match_ignorecase = 0 b:match_skip = 'r:\\\@', 'endsection': '\\\%(stop\)\=\%(\%(sub\)*section\|\%(sub\)*subject\|chapter\|part\|component\|product\|title\)\>', 'beginblock': '\\\%(start\|setup\|define\)', 'endblock': '\\\%(stop\|setup\|define\)', } def UndoMap(mapping: string, modes: string) for mode in modes b:undo_ftplugin ..= printf(" | silent! execute '%sunmap %s'", mode, mapping) endfor enddef def MoveAround(count: number, what: string, flags: string) search(context_regex[what], flags .. 's') # 's' sets previous context mark var i = 2 while i <= count search(context_regex[what], flags) i += 1 endwhile enddef # Macros to move around nnoremap [[ MoveAround(v:count1, "beginsection", "bW") vnoremap [[ MoveAround(v:count1, "beginsection", "bW") nnoremap ]] MoveAround(v:count1, "beginsection", "W") vnoremap ]] MoveAround(v:count1, "beginsection", "W") nnoremap [] MoveAround(v:count1, "endsection", "bW") vnoremap [] MoveAround(v:count1, "endsection", "bW") nnoremap ][ MoveAround(v:count1, "endsection", "W") vnoremap ][ MoveAround(v:count1, "endsection", "W") nnoremap [{ MoveAround(v:count1, "beginblock", "bW") vnoremap [{ MoveAround(v:count1, "beginblock", "bW") nnoremap ]} MoveAround(v:count1, "endblock", "W") vnoremap ]} MoveAround(v:count1, "endblock", "W") for mapping in ['[[', ']]', '[]', '][', '[{', ']}'] UndoMap(mapping, 'nv') endfor # Other useful mappings const tp_regex = '?^$\|^\s*\\\(item\|start\|stop\|blank\|\%(sub\)*section\|chapter\|\%(sub\)*subject\|title\|part\)' def TeXPar() cursor(search(tp_regex, 'bcW') + 1, 1) normal! V cursor(search(tp_regex, 'W') - 1, 1) enddef # Reflow paragraphs with mappings like gqtp ("gq TeX paragraph") onoremap tp TeXPar() # Select TeX paragraph vnoremap tp TeXPar() # $...$ text object onoremap i$ normal! T$vt$ onoremap a$ normal! F$vf$ vnoremap i$ T$ot$ vnoremap a$ F$of$ for mapping in ['tp', 'i$', 'a$'] UndoMap(mapping, 'ov') endfor endif # Commands for asynchronous typesetting command! -buffer -nargs=? -complete=buffer ConTeXt context.Typeset() command! -buffer -nargs=0 ConTeXtLog context.Log('%') command! -nargs=0 ConTeXtJobStatus context.JobStatus() command! -nargs=0 ConTeXtStopJobs context.StopJobs() # vim: sw=2 fdm=marker