vimtex/after/syntax/tex.vim

264 lines
7.8 KiB
VimL
Raw Permalink Normal View History

2015-03-07 17:02:15 -05:00
" vimtex - LaTeX plugin for Vim
2014-07-22 18:08:57 -04:00
"
" Maintainer: Karl Yngve Lervåg
" Email: karl.yngve@gmail.com
"
2016-12-20 15:25:25 -05:00
if !exists('b:current_syntax')
let b:current_syntax = 'tex'
elseif b:current_syntax !=# 'tex'
finish
endif
2015-04-01 02:26:19 -04:00
" Perform spell checking when there is no syntax
" - This will enable spell checking e.g. in toplevel of included files
syntax spell toplevel
2016-02-11 17:01:13 -05:00
" {{{1 General match improvements
syntax match texInputFile /\\includepdf\%(\[.\{-}\]\)\=\s*{.\{-}}/
\ contains=texStatement,texInputCurlies,texInputFileOpt
" {{{1 Italic font, bold font and conceals
if get(g:, 'tex_fast', 'b') =~# 'b'
2016-12-28 07:15:04 -05:00
let s:conceal = (has('conceal') && get(g:, 'tex_conceal', 'b') =~# 'b')
\ ? 'concealends' : ''
2016-12-28 07:15:04 -05:00
for [s:style, s:group, s:commands] in [
\ ['texItalStyle', 'texItalGroup', ['emph', 'textit']],
\ ['texBoldStyle', 'texBoldGroup', ['textbf']],
\]
2016-12-28 07:15:04 -05:00
for s:cmd in s:commands
execute 'syntax region' s:style 'matchgroup=texTypeStyle'
\ 'start="\\' . s:cmd . '\s*{" end="}"'
\ 'contains=@Spell,@' . s:group
\ s:conceal
endfor
2016-12-28 07:15:04 -05:00
execute 'syntax cluster texMatchGroup add=' . s:style
endfor
endif
" }}}1
" {{{1 Add syntax highlighting for \url, \href, \hyperref
2015-09-19 15:57:47 -04:00
syntax match texStatement '\\url\ze[^\ta-zA-Z]' nextgroup=texUrlVerb
syntax region texUrlVerb matchgroup=Delimiter
\ start='\z([^\ta-zA-Z]\)' end='\z1' contained
2016-03-23 17:22:29 -04:00
syntax match texStatement '\\url\ze\s*{' nextgroup=texUrl
syntax region texUrl matchgroup=Delimiter start='{' end='}' contained
syntax match texStatement '\\href' nextgroup=texHref
2015-09-19 15:57:47 -04:00
syntax region texHref matchgroup=Delimiter start='{' end='}' contained
\ nextgroup=texMatcher
2015-08-28 15:05:39 -04:00
syntax match texStatement '\\hyperref' nextgroup=texHyperref
syntax region texHyperref matchgroup=Delimiter start='\[' end='\]' contained
2015-08-28 15:05:39 -04:00
highlight link texUrl Function
2015-09-19 15:57:47 -04:00
highlight link texUrlVerb texUrl
2015-08-28 15:05:39 -04:00
highlight link texHref texUrl
highlight link texHyperref texRefZone
2015-08-28 15:05:39 -04:00
" }}}1
" {{{1 Improve support for cite commands
if get(g:, 'tex_fast', 'r') =~# 'r'
for s:pattern in [
\ 'bibentry',
\ 'cite[pt]?\*?',
\ 'citeal[tp]\*?',
\ 'cite(num|text|url)',
\ '[Cc]ite%(title|author|year(par)?|date)\*?',
\ '[Pp]arencite\*?',
\ 'foot%(full)?cite%(text)?',
\ 'fullcite',
\ '[Tt]extcite',
\ '[Ss]martcite',
\ 'supercite',
\ '[Aa]utocite\*?',
\ '[Ppf]?[Nn]otecite',
\]
execute 'syntax match texStatement'
2017-01-04 06:37:36 -05:00
\ '/\v\\' . s:pattern . '\ze\s*%(\[|\{)/'
\ 'nextgroup=texRefOption,texCite'
endfor
for s:pattern in [
\ '[Cc]ites',
\ '[Pp]arencites',
\ 'footcite%(s|texts)',
\ '[Tt]extcites',
\ '[Ss]martcites',
\ 'supercites',
\ '[Aa]utocites',
\ '[pPfFsStTaA]?[Vv]olcites?',
\ 'cite%(field|list|name)',
\]
execute 'syntax match texStatement'
2017-01-04 06:37:36 -05:00
\ '/\v\\' . s:pattern . '\ze\s*%(\[|\{)/'
\ 'nextgroup=texRefOptions,texCites'
endfor
syntax region texRefOptions contained matchgroup=Delimiter
\ start='\[' end=']'
\ contains=@texRefGroup,texRefZone
\ nextgroup=texRefOptions,texCites
syntax region texCites contained matchgroup=Delimiter
\ start='{' end='}'
\ contains=@texRefGroup,texRefZone,texCites
\ nextgroup=texRefOptions,texCites
highlight def link texRefOptions texRefOption
highlight def link texCites texCite
endif
2015-08-28 15:05:39 -04:00
" }}}1
" {{{1 Add support for cleveref package
if get(g:, 'tex_fast', 'r') =~# 'r'
syntax region texRefZone matchgroup=texStatement
\ start="\\\(\(label\)\?c\(page\)\?\|C\|auto\)ref{"
\ end="}\|%stopzone\>"
\ contains=@texRefGroup
" \crefrange, \cpagerefrange (these commands expect two arguments)
syntax match texStatement
\ '\\c\(page\)\?refrange\>'
\ nextgroup=texRefRangeStart skipwhite skipnl
syntax region texRefRangeStart
\ start="{"rs=s+1 end="}"
\ matchgroup=Delimiter
\ contained contains=texRefZone
\ nextgroup=texRefRangeEnd skipwhite skipnl
syntax region texRefRangeEnd
\ start="{"rs=s+1 end="}"
\ matchgroup=Delimiter
\ contained contains=texRefZone
highlight link texRefRangeStart texRefZone
highlight link texRefRangeEnd texRefZone
endif
2014-02-09 09:44:55 -05:00
2015-08-28 15:05:39 -04:00
" }}}1
" {{{1 Add support for listings package
2014-12-25 14:35:47 -05:00
syntax region texZone
\ start="\\begin{lstlisting}"rs=s
\ end="\\end{lstlisting}\|%stopzone\>"re=e
\ keepend
\ contains=texBeginEnd
2014-12-25 14:35:47 -05:00
syntax match texInputFile
2014-06-04 08:53:49 -04:00
\ "\\lstinputlisting\s*\(\[.*\]\)\={.\{-}}"
2014-02-09 09:44:55 -05:00
\ contains=texStatement,texInputCurlies,texInputFileOpt
2014-12-25 14:35:47 -05:00
syntax match texZone "\\lstinline\s*\(\[.*\]\)\={.\{-}}"
" }}}1
" {{{1 Nested syntax highlighting for dot
2015-04-01 02:26:19 -04:00
unlet b:current_syntax
2014-12-25 14:35:47 -05:00
syntax include @DOT syntax/dot.vim
syntax region texZone
\ start="\\begin{dot2tex}"rs=s
\ end="\\end{dot2tex}"re=e
2014-12-25 14:35:47 -05:00
\ keepend
\ transparent
\ contains=texBeginEnd,@DOT
2015-04-01 02:26:19 -04:00
let b:current_syntax = 'tex'
2014-12-08 14:44:17 -05:00
2016-02-16 13:37:58 -05:00
" }}}1
" {{{1 Nested syntax highlighting for lualatex
unlet b:current_syntax
syntax include @LUA syntax/lua.vim
syntax region texZone
2016-02-16 14:35:40 -05:00
\ start='\\begin{luacode\*\?}'rs=s
\ end='\\end{luacode\*\?}'re=e
\ keepend
\ transparent
\ contains=texBeginEnd,@LUA
syntax match texStatement '\\\(directlua\|luadirect\)' nextgroup=texZoneLua
syntax region texZoneLua matchgroup=Delimiter
\ start='{'
\ end='}'
\ contained
\ contains=@LUA
2016-02-16 13:37:58 -05:00
let b:current_syntax = 'tex'
" }}}1
" {{{1 Nested syntax highlighting for gnuplottex
unlet b:current_syntax
syntax include @GNUPLOT syntax/gnuplot.vim
syntax region texZone
\ start='\\begin{gnuplot}\(\_s*\[\_[\]]\{-}\]\)\?'rs=s
\ end='\\end{gnuplot}'re=e
\ keepend
\ transparent
\ contains=texBeginEnd,texBeginEndModifier,@GNUPLOT
let b:current_syntax = 'tex'
" }}}1
" {{{1 Nested syntax highlighting for minted
" First set all minted environments to listings
syntax region texZone
\ start="\\begin{minted}\_[^}]\{-}{\w\+}"rs=s
\ end="\\end{minted}"re=e
\ keepend
\ contains=texMinted
" Next add nested syntax support for desired languages
2016-12-28 07:15:04 -05:00
for s:entry in get(g:, 'vimtex_syntax_minted', [])
let s:lang = s:entry.lang
let s:syntax = get(s:entry, 'syntax', s:lang)
unlet b:current_syntax
2016-12-28 07:15:04 -05:00
execute 'syntax include @' . toupper(s:lang) 'syntax/' . s:syntax . '.vim'
2016-12-28 07:15:04 -05:00
if has_key(s:entry, 'ignore')
execute 'syntax cluster' toupper(s:lang)
\ 'remove=' . join(s:entry.ignore, ',')
endif
execute 'syntax region texZone'
2016-12-28 07:15:04 -05:00
\ 'start="\\begin{minted}\_[^}]\{-}{' . s:lang . '}"rs=s'
\ 'end="\\end{minted}"re=e'
\ 'keepend'
\ 'transparent'
2016-12-28 07:15:04 -05:00
\ 'contains=texMinted,@' . toupper(s:lang)
"
" Support for custom environment names
"
2016-12-28 07:15:04 -05:00
for s:env in get(s:entry, 'environments', [])
execute 'syntax region texZone'
2016-12-28 07:15:04 -05:00
\ 'start="\\begin{' . s:env . '}"rs=s'
\ 'end="\\end{' . s:env . '}"re=e'
\ 'keepend'
\ 'transparent'
2016-12-28 07:15:04 -05:00
\ 'contains=texBeginEnd,@' . toupper(s:lang)
" Match starred environments with options
execute 'syntax region texZone'
2016-12-28 07:15:04 -05:00
\ 'start="\\begin{' . s:env . '\*}\s*{\_.\{-}}"rs=s'
\ 'end="\\end{' . s:env . '\*}"re=e'
\ 'keepend'
\ 'transparent'
2016-12-28 07:15:04 -05:00
\ 'contains=texMintedStarred,texBeginEnd,@' . toupper(s:lang)
execute 'syntax match texMintedStarred'
2016-12-28 07:15:04 -05:00
\ '"\\begin{' . s:env . '\*}\s*{\_.\{-}}"'
\ 'contains=texBeginEnd,texDelimiter'
endfor
endfor
let b:current_syntax = 'tex'
syntax match texMinted '\\begin{minted}\_[^}]\{-}{\w\+}'
\ contains=texBeginEnd,texMintedName
syntax match texMinted '\\end{minted}'
\ contains=texBeginEnd
2015-10-20 17:24:51 -04:00
syntax match texMintedName '{\w\+}' contained
highlight link texMintedName texBeginEndName
" }}}1
2014-12-08 14:44:17 -05:00
" vim: fdm=marker sw=2