diff runtime/ftplugin/context.vim @ 10301:07d2b5a3b7cc

commit https://github.com/vim/vim/commit/46fceaaa8d1447a9588736d86eb4908214187b08 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Oct 23 21:21:08 2016 +0200 Updated runtime files.
author Christian Brabandt <cb@256bit.org>
date Sun, 23 Oct 2016 21:30:06 +0200
parents f4f8014d516e
children 169a62d5bcb9
line wrap: on
line diff
--- a/runtime/ftplugin/context.vim
+++ b/runtime/ftplugin/context.vim
@@ -1,7 +1,8 @@
 " Vim filetype plugin file
-" Language:         ConTeXt typesetting engine
-" Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2008-07-09
+" Language:           ConTeXt typesetting engine
+" Maintainer:         Nicola Vitacolonna <nvitacolonna@gmail.com>
+" Former Maintainers: Nikolai Weibull <now@bitwi.se>
+" Latest Revision:    2016 Oct 14
 
 if exists("b:did_ftplugin")
   finish
@@ -11,16 +12,26 @@ let b:did_ftplugin = 1
 let s:cpo_save = &cpo
 set cpo&vim
 
-let b:undo_ftplugin = "setl com< cms< def< inc< sua< fo<"
+if !exists('current_compiler')
+  compiler context
+endif
+
+let b:undo_ftplugin = "setl com< cms< def< inc< sua< fo< ofu<"
+      \ . "| unlet! b:match_ignorecase b:match_words b:match_skip"
 
-setlocal comments=b:%D,b:%C,b:%M,:% commentstring=%\ %s formatoptions+=tcroql
+setlocal comments=b:%D,b:%C,b:%M,:% commentstring=%\ %s formatoptions+=tjcroql2
+if get(b:, 'context_metapost', get(g:, 'context_metapost', 1))
+  setlocal omnifunc=context#complete
+  let g:omni_syntax_group_include_context = 'mf\w\+,mp\w\+'
+  let g:omni_syntax_group_exclude_context = 'mfTodoComment'
+endif
 
 let &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\)'
 
-let &l:include = '^\s*\%(input\|component\)'
+let &l:include = '^\s*\\\%(input\|component\|product\|project\|environment\)'
 
 setlocal suffixesadd=.tex
 
@@ -31,5 +42,61 @@ if exists("loaded_matchit")
         \ '\\start\(\a\+\):\\stop\1'
 endif
 
+let s:context_regex = {
+      \ 'beginsection' : '\\\%(start\)\=\%(\%(sub\)*section\|\%(sub\)*subject\|chapter\|part\|component\|product\|title\)\>',
+      \ 'endsection'   : '\\\%(stop\)\=\%(\%(sub\)*section\|\%(sub\)*subject\|chapter\|part\|component\|product\|title\)\>',
+      \ 'beginblock'   : '\\\%(start\|setup\|define\)',
+      \ 'endblock'     : '\\\%(stop\|setup\|define\)'
+      \ }
+
+function! s:move_around(count, what, flags, visual)
+  if a:visual
+    exe "normal! gv"
+  endif
+  call search(s:context_regex[a:what], a:flags.'s') " 's' sets previous context mark
+  call map(range(2, a:count), 'search(s:context_regex[a:what], a:flags)')
+endfunction
+
+" Move around macros.
+nnoremap <silent><buffer> [[ :<C-U>call <SID>move_around(v:count1, "beginsection", "bW", v:false) <CR>
+vnoremap <silent><buffer> [[ :<C-U>call <SID>move_around(v:count1, "beginsection", "bW", v:true)  <CR>
+nnoremap <silent><buffer> ]] :<C-U>call <SID>move_around(v:count1, "beginsection", "W",  v:false) <CR>
+vnoremap <silent><buffer> ]] :<C-U>call <SID>move_around(v:count1, "beginsection", "W",  v:true)  <CR>
+nnoremap <silent><buffer> [] :<C-U>call <SID>move_around(v:count1, "endsection",   "bW", v:false) <CR>
+vnoremap <silent><buffer> [] :<C-U>call <SID>move_around(v:count1, "endsection",   "bW", v:true)  <CR>
+nnoremap <silent><buffer> ][ :<C-U>call <SID>move_around(v:count1, "endsection",   "W",  v:false) <CR>
+vnoremap <silent><buffer> ][ :<C-U>call <SID>move_around(v:count1, "endsection",   "W",  v:true)  <CR>
+nnoremap <silent><buffer> [{ :<C-U>call <SID>move_around(v:count1, "beginblock",   "bW", v:false) <CR>
+vnoremap <silent><buffer> [{ :<C-U>call <SID>move_around(v:count1, "beginblock",   "bW", v:true)  <CR>
+nnoremap <silent><buffer> ]} :<C-U>call <SID>move_around(v:count1, "endblock",     "W",  v:false) <CR>
+vnoremap <silent><buffer> ]} :<C-U>call <SID>move_around(v:count1, "endblock",     "W",  v:true)  <CR>
+
+" Other useful mappings
+if get(g:, 'context_mappings', 1)
+  let s:tp_regex = '?^$\|^\s*\\\(item\|start\|stop\|blank\|\%(sub\)*section\|chapter\|\%(sub\)*subject\|title\|part\)'
+
+  fun! s:tp()
+    call cursor(search(s:tp_regex, 'bcW') + 1, 1)
+    normal! V
+    call cursor(search(s:tp_regex, 'W') - 1, 1)
+  endf
+
+  " Reflow paragraphs with commands like gqtp ("gq TeX paragraph")
+  onoremap <silent><buffer> tp :<c-u>call <sid>tp()<cr>
+  " Select TeX paragraph
+  vnoremap <silent><buffer> tp <esc>:<c-u>call <sid>tp()<cr>
+
+  " $...$ text object
+  onoremap <silent><buffer> i$ :<c-u>normal! T$vt$<cr>
+  onoremap <silent><buffer> a$ :<c-u>normal! F$vf$<cr>
+  vnoremap <buffer> i$ T$ot$
+  vnoremap <buffer> a$ F$of$
+endif
+
+" Commands for asynchronous typesetting
+command! -buffer -nargs=? -complete=file ConTeXt          call context#typeset(<q-args>)
+command!         -nargs=0                ConTeXtJobStatus call context#job_status()
+command!         -nargs=0                ConTeXtStopJobs  call context#stop_jobs()
+
 let &cpo = s:cpo_save
 unlet s:cpo_save