Compare commits

...

11 Commits

Author SHA1 Message Date
Adam Stankiewicz
edd5ee63e6 Update 2013-12-13 01:37:01 +01:00
Adam Stankiewicz
8a255002df Update csv and rust 2013-11-11 01:34:19 +01:00
Adam Stankiewicz
b2d556d384 Update latex, ruby and mason 2013-11-06 23:55:01 +01:00
Adam Stankiewicz
30c1920e4f Massive update :) 2013-11-02 23:27:57 +01:00
Adam Stankiewicz
57cfac7ae3 Update latex, csv, handlebars and rust 2013-10-17 15:54:18 +02:00
Adam Stankiewicz
085aad28a4 Update latex complete.vim 2013-10-08 12:04:23 +02:00
Adam Stankiewicz
e108a087b4 Update latex, html, ruby, c, cpp 2013-10-07 11:07:27 +02:00
Adam Stankiewicz
b3257271db Add R language support 2013-09-30 12:05:56 +02:00
Adam Stankiewicz
e9d8c39608 Update coffee, html and latex 2013-09-30 12:03:06 +02:00
Adam Stankiewicz
04e6a8a73c Update latex 2013-09-28 21:55:04 +02:00
Adam Stankiewicz
b6a2261cc2 Update rust and latex 2013-09-27 10:21:44 +02:00
45 changed files with 1401 additions and 532 deletions

View File

@@ -57,6 +57,7 @@ Optionally download one of the [releases](https://github.com/sheerun/vim-polyglo
- [puppet](https://github.com/ajf/puppet-vim) (syntax, indent, ftplugin, ftdetect) - [puppet](https://github.com/ajf/puppet-vim) (syntax, indent, ftplugin, ftdetect)
- [protobuf](https://github.com/uarun/vim-protobuf) (syntax, ftdetect) - [protobuf](https://github.com/uarun/vim-protobuf) (syntax, ftdetect)
- [python](https://github.com/vim-scripts/python.vim--Vasiliev) (syntax) - [python](https://github.com/vim-scripts/python.vim--Vasiliev) (syntax)
- [r-lang](https://github.com/vim-scripts/R.vim) (syntax, ftplugin)
- [rspec](https://github.com/sheerun/rspec.vim) (syntax, ftdetect) - [rspec](https://github.com/sheerun/rspec.vim) (syntax, ftdetect)
- [ruby](https://github.com/vim-ruby/vim-ruby) (syntax, indent, compiler, autoload, ftplugin, ftdetect) - [ruby](https://github.com/vim-ruby/vim-ruby) (syntax, indent, compiler, autoload, ftplugin, ftdetect)
- [rust](https://github.com/wting/rust.vim) (syntax, indent, compiler, ftplugin, ftdetect) - [rust](https://github.com/wting/rust.vim) (syntax, indent, compiler, ftplugin, ftdetect)

View File

@@ -4,12 +4,12 @@
" License: WTFPL " License: WTFPL
" Load the coffee and html indent functions. " Load the coffee and html indent functions.
unlet b:did_indent silent! unlet b:did_indent
runtime indent/coffee.vim runtime indent/coffee.vim
let s:coffeeIndentExpr = &l:indentexpr let s:coffeeIndentExpr = &l:indentexpr
" Load html last so it can overwrite coffee settings. " Load html last so it can overwrite coffee settings.
unlet b:did_indent silent! unlet b:did_indent
runtime indent/html.vim runtime indent/html.vim
let s:htmlIndentExpr = &l:indentexpr let s:htmlIndentExpr = &l:indentexpr

View File

@@ -97,6 +97,7 @@ if has("gui_running") || &t_Co==256
if out !~ '^cssDefinition ' | continue | endif if out !~ '^cssDefinition ' | continue | endif
let out = substitute( out, ' \+xxx \+', ' ', '' ) let out = substitute( out, ' \+xxx \+', ' ', '' )
let out = substitute( out, ' contains=\zs', '@cssColors,', '' ) let out = substitute( out, ' contains=\zs', '@cssColors,', '' )
syn clear cssDefinition
exe 'syn region' out exe 'syn region' out
endfor endfor
endif endif

View File

@@ -1,2 +1,4 @@
" adds support for cleverref package (`\cref` and `\Cref`) " adds support for cleverref package
syn region texRefZone matchgroup=texStatement start="\\\(c\|C\)ref{" end="}\|%stopzone\>" contains=@texRefGroup " \Cref, \cref, \cpageref, \labelcref, \labelcpageref
syn region texRefZone matchgroup=texStatement start="\\Cref{" end="}\|%stopzone\>" contains=@texRefGroup
syn region texRefZone matchgroup=texStatement start="\\\(label\|\)c\(page\|\)ref{" end="}\|%stopzone\>" contains=@texRefGroup

View File

@@ -28,23 +28,51 @@ if len(s:goarch) == 0
endif endif
endif endif
function! go#complete#PackageMembers(package, member)
silent! let content = system('godoc ' . a:package)
if v:shell_error || !len(content)
return []
endif
let lines = filter(split(content, "\n"),"v:val !~ '^\\s\\+$'")
try
let mx1 = '^\s\+\(\S+\)\s\+=\s\+.*'
let mx2 = '^\%(const\|var\|type\|func\) \([A-Z][^ (]\+\).*'
let candidates =
\ map(filter(copy(lines), 'v:val =~ mx1'), 'substitute(v:val, mx1, "\\1", "")')
\ + map(filter(copy(lines), 'v:val =~ mx2'), 'substitute(v:val, mx2, "\\1", "")')
return filter(candidates, '!stridx(v:val, a:member)')
catch
return []
endtry
endfunction
function! go#complete#Package(ArgLead, CmdLine, CursorPos) function! go#complete#Package(ArgLead, CmdLine, CursorPos)
let dirs = [] let dirs = []
let words = split(a:CmdLine, '\s\+', 1)
if len(words) > 2
" Complete package members
return go#complete#PackageMembers(words[1], words[2])
endif
if executable('go') if executable('go')
let goroot = substitute(system('go env GOROOT'), '\n', '', 'g') let goroot = substitute(system('go env GOROOT'), '\n', '', 'g')
if v:shell_error if v:shell_error
echo '\'go env GOROOT\' failed' echomsg '\'go env GOROOT\' failed'
endif endif
else else
let goroot = $GOROOT let goroot = $GOROOT
endif endif
if len(goroot) != 0 && isdirectory(goroot) if len(goroot) != 0 && isdirectory(goroot)
let dirs += [ goroot ] let dirs += [goroot]
endif endif
let workspaces = split($GOPATH, ':') let pathsep = ':'
if s:goos == 'windows'
let pathsep = ';'
endif
let workspaces = split($GOPATH, pathsep)
if workspaces != [] if workspaces != []
let dirs += workspaces let dirs += workspaces
endif endif
@@ -56,16 +84,20 @@ function! go#complete#Package(ArgLead, CmdLine, CursorPos)
let ret = {} let ret = {}
for dir in dirs for dir in dirs
let root = expand(dir . '/pkg/' . s:goos . '_' . s:goarch) " this may expand to multiple lines
for i in split(globpath(root, a:ArgLead.'*'), "\n") let root = split(expand(dir . '/pkg/' . s:goos . '_' . s:goarch), "\n")
call add(root, expand(dir . '/src'))
for r in root
for i in split(globpath(r, a:ArgLead.'*'), "\n")
if isdirectory(i) if isdirectory(i)
let i .= '/' let i .= '/'
elseif i !~ '\.a$' elseif i !~ '\.a$'
continue continue
endif endif
let i = substitute(substitute(i[len(root)+1:], '[\\]', '/', 'g'), '\.a$', '', 'g') let i = substitute(substitute(i[len(r)+1:], '[\\]', '/', 'g'), '\.a$', '', 'g')
let ret[i] = i let ret[i] = i
endfor endfor
endfor endfor
endfor
return sort(keys(ret)) return sort(keys(ret))
endfunction endfunction

View File

@@ -61,7 +61,7 @@ let charset = [
" }}} " }}}
" Attributes_and_Settings: {{{ " Attributes_and_Settings: {{{
let core_attributes = {'accesskey': [], 'class': [], 'contenteditable': ['true', 'false', ''], 'contextmenu': [], 'dir': ['ltr', 'rtl'], 'draggable': ['true', 'false'], 'hidden': ['hidden', ''], 'id': [], 'lang': lang_tag, 'spellcheck': ['true', 'false', ''], 'style': [], 'tabindex': [], 'title': []} let core_attributes = {'accesskey': [], 'class': [], 'contenteditable': ['true', 'false', ''], 'contextmenu': [], 'dir': ['ltr', 'rtl'], 'draggable': ['true', 'false'], 'hidden': ['hidden', ''], 'id': [], 'is': [], 'lang': lang_tag, 'spellcheck': ['true', 'false', ''], 'style': [], 'tabindex': [], 'title': []}
let xml_attributes = {'xml:lang': lang_tag, 'xml:space': ['preserve'], 'xml:base': [], 'xmlns': ['http://www.w3.org/1999/xhtml', 'http://www.w3.org/1998/Math/MathML', 'http://www.w3.org/2000/svg', 'http://www.w3.org/1999/xlink']} let xml_attributes = {'xml:lang': lang_tag, 'xml:space': ['preserve'], 'xml:base': [], 'xmlns': ['http://www.w3.org/1999/xhtml', 'http://www.w3.org/1998/Math/MathML', 'http://www.w3.org/2000/svg', 'http://www.w3.org/1999/xlink']}
let body_attributes = {} let body_attributes = {}
@@ -101,6 +101,7 @@ let attributes_value = {
\ 'disabled': ['Bool', ''], \ 'disabled': ['Bool', ''],
\ 'draggable': ['true/false', ''], \ 'draggable': ['true/false', ''],
\ 'enctype': ['Token', ''], \ 'enctype': ['Token', ''],
\ 'extends': ['Text', ''],
\ 'for': ['ID', ''], \ 'for': ['ID', ''],
\ 'form': ['ID', ''], \ 'form': ['ID', ''],
\ 'formaction': ['URL', ''], \ 'formaction': ['URL', ''],
@@ -152,6 +153,7 @@ let attributes_value = {
\ 'scope': ['Token', ''], \ 'scope': ['Token', ''],
\ 'scoped': ['Bool', ''], \ 'scoped': ['Bool', ''],
\ 'seamless': ['Bool', ''], \ 'seamless': ['Bool', ''],
\ 'select': ['Text', ''],
\ 'selected': ['Bool', ''], \ 'selected': ['Bool', ''],
\ 'shape': ['Token', ''], \ 'shape': ['Token', ''],
\ 'size': ['Int', ''], \ 'size': ['Int', ''],
@@ -322,16 +324,16 @@ endif
" Ref: http://dev.w3.org/html5/markup/ " Ref: http://dev.w3.org/html5/markup/
" Version: Draft 05 April 2011 " Version: Draft 05 April 2011
let phrasing_elements = ['a', 'em', 'strong', 'small', 'mark', 'abbr', 'dfn', 'i', 'b', 'u', 'code', 'var', 'samp', 'kbd', 'sup', 'sub', 'q', 'cite', 'span', 'bdo', 'bdi', 'br', 'wbr', 'ins', 'del', 'img', 'embed', 'object', 'iframe', 'map', 'area', 'script', 'noscript', 'ruby', 'video', 'audio', 'input', 'textarea', 'select', 'button', 'label', 'output', 'datalist', 'keygen', 'progress', 'command', 'canvas', 'time', 'meter', 'data'] let phrasing_elements = ['a', 'em', 'strong', 'small', 'mark', 'abbr', 'dfn', 'i', 'b', 'u', 'code', 'var', 'samp', 'kbd', 'sup', 'sub', 'q', 'cite', 'span', 'bdo', 'bdi', 'br', 'wbr', 'ins', 'del', 'img', 'embed', 'object', 'iframe', 'map', 'area', 'script', 'noscript', 'ruby', 'video', 'audio', 'input', 'textarea', 'select', 'button', 'label', 'output', 'datalist', 'keygen', 'progress', 'command', 'canvas', 'time', 'meter', 'data', 'content', 'shadow']
let metadata_elements = ['link', 'style', 'meta', 'script', 'noscript', 'command'] let metadata_elements = ['link', 'style', 'meta', 'script', 'noscript', 'command']
let flow_elements = phrasing_elements + ['p', 'hr', 'pre', 'ul', 'ol', 'dl', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup', 'address', 'blockquote', 'ins', 'del', 'object', 'main', 'map', 'noscript', 'section', 'nav', 'article', 'aside', 'header', 'footer', 'video', 'audio', 'figure', 'table', 'template', 'form', 'fieldset', 'menu', 'canvas', 'details'] let flow_elements = phrasing_elements + ['p', 'hr', 'pre', 'ul', 'ol', 'dl', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup', 'address', 'blockquote', 'ins', 'del', 'element', 'object', 'main', 'map', 'noscript', 'section', 'nav', 'article', 'aside', 'header', 'footer', 'video', 'audio', 'figure', 'table', 'template', 'form', 'fieldset', 'menu', 'canvas', 'details']
" http://dev.w3.org/html5/spec/Overview.html#linkTypes " http://dev.w3.org/html5/spec/Overview.html#linkTypes
let linktypes = ['alternate', 'author', 'bookmark', 'external', 'help', 'icon', 'license', 'next', 'nofollow', 'noreferrer', 'pingback', 'prefetch', 'prev', 'search', 'stylesheet', 'sidebar', 'tag'] let linktypes = ['alternate', 'author', 'bookmark', 'external', 'help', 'icon', 'license', 'next', 'nofollow', 'noreferrer', 'pingback', 'prefetch', 'prev', 'search', 'stylesheet', 'sidebar', 'tag']
" http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html " http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html
let linkreltypes = linktypes + ['canonical'] let linkreltypes = linktypes + ['canonical', 'import']
" a and button are special elements for interactive, some element can't be its descendent " a and button are special elements for interactive, some element can't be its descendent
let abutton_dec = 'details\\|embed\\|iframe\\|keygen\\|label\\|menu\\|select\\|textarea' let abutton_dec = 'details\\|embed\\|iframe\\|keygen\\|label\\|menu\\|select\\|textarea'
@@ -425,6 +427,10 @@ let g:xmldata_html5 = {
\ [], \ [],
\ extend(copy(global_attributes), {'span': []}) \ extend(copy(global_attributes), {'span': []})
\ ], \ ],
\ 'content': [
\ [],
\ extend(copy(global_attributes), {'select': []})
\ ],
\ 'command': [ \ 'command': [
\ ['col'], \ ['col'],
\ extend(copy(global_attributes), {'type': ['command', 'radio', 'checkbox'], 'radiogroup': [], 'checked': ['checked', ''], 'label': [], 'icon': [], 'disabled': ['disabled', '']}) \ extend(copy(global_attributes), {'type': ['command', 'radio', 'checkbox'], 'radiogroup': [], 'checked': ['checked', ''], 'label': [], 'icon': [], 'disabled': ['disabled', '']})
@@ -677,6 +683,10 @@ let g:xmldata_html5 = {
\ ['optgroup', 'option'], \ ['optgroup', 'option'],
\ extend(copy(global_attributes), {'name': [], 'disabled': ['disabled', ''], 'form': [], 'size': [], 'multiple': ['multiple', '']}) \ extend(copy(global_attributes), {'name': [], 'disabled': ['disabled', ''], 'form': [], 'size': [], 'multiple': ['multiple', '']})
\ ], \ ],
\ 'shadow': [
\ [],
\ global_attributes
\ ],
\ 'small': [ \ 'small': [
\ phrasing_elements, \ phrasing_elements,
\ global_attributes \ global_attributes

1
build
View File

@@ -97,6 +97,7 @@ PACKS="
puppet:ajf/puppet-vim puppet:ajf/puppet-vim
protobuf:uarun/vim-protobuf protobuf:uarun/vim-protobuf
python:vim-scripts/python.vim--Vasiliev python:vim-scripts/python.vim--Vasiliev
r-lang:vim-scripts/R.vim
rspec:sheerun/rspec.vim rspec:sheerun/rspec.vim
ruby:vim-ruby/vim-ruby ruby:vim-ruby/vim-ruby
rust:wting/rust.vim rust:wting/rust.vim

View File

@@ -27,8 +27,8 @@ function! s:GetMakePrg()
\ ' -c' . \ ' -c' .
\ ' ' . b:coffee_litcoffee . \ ' ' . b:coffee_litcoffee .
\ ' ' . g:coffee_make_options . \ ' ' . g:coffee_make_options .
\ ' ' . fnameescape(expand('%')) . \ ' $*' .
\ ' $*' \ ' ' . fnameescape(expand('%'))
endfunction endfunction
" Set `makeprg` and return 1 if coffee is still the compiler, else return 0. " Set `makeprg` and return 1 if coffee is still the compiler, else return 0.

View File

@@ -51,12 +51,11 @@ autocmd BufNewFile,BufRead *.haml,*.hamlbars setf haml
autocmd BufNewFile,BufRead *.sass setf sass autocmd BufNewFile,BufRead *.sass setf sass
autocmd BufNewFile,BufRead *.scss setf scss autocmd BufNewFile,BufRead *.scss setf scss
if has("autocmd") if has("autocmd")
au BufNewFile,BufRead *.{handlebars,hb,hbs,hbt}{,.erb} set ft=html syntax=handlebars | runtime! ftplugin/handlebars.vim ftplugin/handlebars*.vim ftplugin/handlebars/*.vim au BufNewFile,BufRead *.{handlebars,hb,hbs,hbt}{,.erb} set ft=handlebars.html syntax=handlebars | runtime! ftplugin/handlebars.vim ftplugin/handlebars*.vim ftplugin/handlebars/*.vim
endif endif
autocmd BufNewFile,BufReadPost *.jade set filetype=jade autocmd BufNewFile,BufReadPost *.jade set filetype=jade
au BufNewFile,BufRead *.js setf javascript au BufNewFile,BufRead *.js setf javascript
au BufNewFile,BufRead *.jsm setf javascript au BufNewFile,BufRead *.jsm setf javascript
au BufNewFile,BufRead *.json setf javascript
au BufNewFile,BufRead Jakefile setf javascript au BufNewFile,BufRead Jakefile setf javascript
fun! s:SelectJavascript() fun! s:SelectJavascript()
if getline(1) =~# '^#!.*/bin/env\s\+node\>' if getline(1) =~# '^#!.*/bin/env\s\+node\>'
@@ -81,6 +80,10 @@ autocmd BufNewFile,BufRead *.markdown,*.md,*.mdown,*.mkd,*.mkdn
\ else | \ else |
\ setf markdown | \ setf markdown |
\ endif \ endif
autocmd BufRead *.html
\ if getline(1) =~ '^\(%\|<[%&].*>\)' |
\ set filetype=mason |
\ endif
au BufRead,BufNewFile /etc/nginx/*,/usr/local/nginx/*,*/nginx/vhosts.d/*,nginx.conf if &ft == '' | setfiletype nginx | endif au BufRead,BufNewFile /etc/nginx/*,/usr/local/nginx/*,*/nginx/vhosts.d/*,nginx.conf if &ft == '' | setfiletype nginx | endif
autocmd BufNewFile,BufRead *.proto setfiletype proto autocmd BufNewFile,BufRead *.proto setfiletype proto
au BufRead,BufNewFile *.pp set filetype=puppet au BufRead,BufNewFile *.pp set filetype=puppet

View File

@@ -11,10 +11,10 @@
" though, implementation differs. " though, implementation differs.
" Plugin folklore "{{{2 " Plugin folklore "{{{2
if v:version < 700 || exists('b:did_ftplugin') if v:version < 700 || exists('b:did_csv_ftplugin')
finish finish
endif endif
let b:did_ftplugin = 1 let b:did_csv_ftplugin = 1
let s:cpo_save = &cpo let s:cpo_save = &cpo
set cpo&vim set cpo&vim
@@ -136,7 +136,7 @@ fu! <sid>Init(startline, endline) "{{{3
\ . "| unlet! b:csv_fixed_width b:csv_list b:col_width" \ . "| unlet! b:csv_fixed_width b:csv_list b:col_width"
\ . "| unlet! b:csv_SplitWindow b:csv_headerline" \ . "| unlet! b:csv_SplitWindow b:csv_headerline"
\ . "| unlet! b:csv_thousands_sep b:csv_decimal_sep" \ . "| unlet! b:csv_thousands_sep b:csv_decimal_sep"
\. " | unlet! b:browsefilter b:csv_start b:csv_end" \. " | unlet! b:browsefilter b:csv_cmt"
" Delete all functions " Delete all functions
" disabled currently, because otherwise when switching ft " disabled currently, because otherwise when switching ft
@@ -168,6 +168,7 @@ fu! <sid>Init(startline, endline) "{{{3
" \ delf <sid>SaveOptions | delf <sid>CheckDuplicates | " \ delf <sid>SaveOptions | delf <sid>CheckDuplicates |
" \ delf <sid>CompleteColumnNr | delf <sid>CSVPat | delf <sid>Transpose | " \ delf <sid>CompleteColumnNr | delf <sid>CSVPat | delf <sid>Transpose |
" \ delf <sid>LocalSettings() | delf <sid>AddColumn | delf <sid>SubstituteInColumn " \ delf <sid>LocalSettings() | delf <sid>AddColumn | delf <sid>SubstituteInColumn
" \ delf <sid>SetupQuitPre() | delf CSV_CloseBuffer
endfu endfu
fu! <sid>LocalSettings(type) "{{{3 fu! <sid>LocalSettings(type) "{{{3
@@ -275,7 +276,9 @@ fu! <sid>DoAutoCommands() "{{{3
au BufNewFile,BufNew * call <sid>Menu(0) au BufNewFile,BufNew * call <sid>Menu(0)
augroup END augroup END
"let b:undo_ftplugin .= '| sil! amenu disable CSV' "let b:undo_ftplugin .= '| sil! amenu disable CSV'
let b:undo_ftplugin .= '| sil! call <sid>Menu(0)' "
" b:undo_ftplugin does not support calling <sid> Functions
"let b:undo_ftplugin .= '| sil! call <sid>Menu(0)'
endif endif
endfu endfu
@@ -658,7 +661,7 @@ fu! <sid>ArrangeCol(first, last, bang) range "{{{3
else else
let ro = 0 let ro = 0
endif endif
exe a:first . ',' . a:last .'s/' . (b:col) . exe "sil". a:first . ',' . a:last .'s/' . (b:col) .
\ '/\=<SID>Columnize(submatch(0))/' . (&gd ? '' : 'g') \ '/\=<SID>Columnize(submatch(0))/' . (&gd ? '' : 'g')
" Clean up variables, that were only needed for <sid>Columnize() function " Clean up variables, that were only needed for <sid>Columnize() function
unlet! s:columnize_count s:max_cols s:prev_line unlet! s:columnize_count s:max_cols s:prev_line
@@ -795,16 +798,13 @@ fu! <sid>GetColPat(colnr, zs_flag) "{{{3
return pat . (a:zs_flag ? '\zs' : '') return pat . (a:zs_flag ? '\zs' : '')
endfu endfu
fu! <sid>SetupQuitPre() "{{{3 fu! <sid>SetupQuitPre(window) "{{{3
" Setup QuitPre autocommand to quit cleanly " Setup QuitPre autocommand to quit cleanly
if exists("##QuitPre") if exists("##QuitPre")
let bufnr=bufnr('')
noa wincmd p
augroup CSV_QuitPre augroup CSV_QuitPre
au! au!
exe "au QuitPre * ". bufnr. "bw" exe "au QuitPre * call CSV_CloseBuffer(".winbufnr(a:window).")"
augroup end augroup end
noa wincmd p
endif endif
endfu endfu
@@ -839,7 +839,7 @@ fu! <sid>SplitHeaderLine(lines, bang, hor) "{{{3
"let b:col=b "let b:col=b
"setl syntax=csv "setl syntax=csv
sil! doautocmd FileType csv sil! doautocmd FileType csv
1 noa 1
exe "resize" . lines exe "resize" . lines
setl scrollopt=hor winfixheight nowrap setl scrollopt=hor winfixheight nowrap
"let &l:stl=repeat(' ', winwidth(0)) "let &l:stl=repeat(' ', winwidth(0))
@@ -848,31 +848,31 @@ fu! <sid>SplitHeaderLine(lines, bang, hor) "{{{3
let &l:fdc = _fdc let &l:fdc = _fdc
else else
setl scrollopt=ver scrollbind setl scrollopt=ver scrollbind
0 noa 0
let a=<sid>CopyCol('',1) let a=<sid>CopyCol('',1,a:lines)
" Force recalculating columns width
unlet! b:csv_list
try
let width = <sid>ColWidth(1)
catch /ColWidth/
call <sid>Warn("Error: getting Column Width, using default!")
endtry
" Does it make sense to use the preview window? " Does it make sense to use the preview window?
"vert sil! pedit |wincmd w | enew! "vert sil! pedit |wincmd w | enew!
above vsp +enew above vsp +enew
call append(0, a) call append(0, a)
$d _ $d _
sil %s/.*/\=printf("%.*s", width, submatch(0))/eg let b:col = b
0 sil! doautocmd FileType csv
exe "vert res" width " remove leading delimiter
let b:col=b exe "sil :%s/^". b:delimiter. "//e"
" remove trailing delimiter
exe "sil :%s/". b:delimiter. "\s*$//e"
syn clear
noa 0
let b:csv_SplitWindow = winnr()
sil :call <sid>ArrangeCol(1,line('$'), 1)
exe "vert res" . len(split(getline(1), '\zs'))
call matchadd("CSVHeaderLine", b:col) call matchadd("CSVHeaderLine", b:col)
setl scrollopt=ver winfixwidth setl scrollopt=ver winfixwidth
endif endif
call <sid>SetupQuitPre() call <sid>SetupQuitPre(winnr())
let win = winnr() let win = winnr()
setl scrollbind buftype=nowrite bufhidden=wipe noswapfile nobuflisted setl scrollbind buftype=nowrite bufhidden=wipe noswapfile nobuflisted
wincmd p noa wincmd p
let b:csv_SplitWindow = win let b:csv_SplitWindow = win
aug CSV_Preview aug CSV_Preview
au! au!
@@ -891,7 +891,12 @@ fu! <sid>SplitHeaderLine(lines, bang, hor) "{{{3
let &sbo = _sbo let &sbo = _sbo
endif endif
setl noscrollbind setl noscrollbind
try
wincmd c wincmd c
catch /^Vim\%((\a\+)\)\=:E444/ " cannot close last window
catch /^Vim\%((\a\+)\)\=:E517/ " buffer already wiped
" no-op
endtry
"pclose! "pclose!
unlet! b:csv_SplitWindow unlet! b:csv_SplitWindow
aug CSV_Preview aug CSV_Preview
@@ -910,8 +915,11 @@ fu! <sid>SplitHeaderToggle(hor) "{{{3
endfu endfu
" TODO: from here on add logic for fixed-width csv files! " TODO: from here on add logic for fixed-width csv files!
fu! <sid>MoveCol(forward, line) "{{{3 fu! <sid>MoveCol(forward, line, ...) "{{{3
" Move cursor position upwards/downwards left/right " Move cursor position upwards/downwards left/right
" a:1 is there to have some mappings move in the same
" direction but still stop at a different position
" see :h csv-mapping-H
let colnr=<SID>WColumn() let colnr=<SID>WColumn()
let maxcol=<SID>MaxColumns() let maxcol=<SID>MaxColumns()
let cpos=getpos('.')[2] let cpos=getpos('.')[2]
@@ -982,6 +990,17 @@ fu! <sid>MoveCol(forward, line) "{{{3
norm! 0 norm! 0
endif endif
endw endw
if (exists("a:1") && a:1)
" H also stops at the beginning of the content
" of a field.
let epos = getpos('.')
if getline('.')[col('.')-1] == ' '
call search('\S', 'W', line('.'))
if getpos('.')[2] > spos
call setpos('.', epos)
endif
endif
endif
else else
norm! 0 norm! 0
endif endif
@@ -1043,13 +1062,19 @@ fu! <sid>Sort(bang, line1, line2, colnr) range "{{{3
call winrestview(wsv) call winrestview(wsv)
endfun endfun
fu! <sid>CopyCol(reg, col) "{{{3 fu! <sid>CopyCol(reg, col, cnt) "{{{3
" Return Specified Column into register reg " Return Specified Column into register reg
let col = a:col == "0" ? <sid>WColumn() : a:col+0 let col = a:col == "0" ? <sid>WColumn() : a:col+0
let mcol = <sid>MaxColumns() let mcol = <sid>MaxColumns()
if col == '$' || col > mcol if col == '$' || col > mcol
let col = mcol let col = mcol
endif endif
" The number of columns to return
" by default (value of zero, will only return that specific column)
let cnt_cols = col - 1
if !empty(a:cnt) && a:cnt > 0 && col + a:cnt <= mcol
let cnt_cols = col + a:cnt - 1
endif
let a = [] let a = []
" Don't get lines, that are currently filtered away " Don't get lines, that are currently filtered away
if !exists("b:csv_filter") || empty(b:csv_filter) if !exists("b:csv_filter") || empty(b:csv_filter)
@@ -1068,9 +1093,12 @@ fu! <sid>CopyCol(reg, col) "{{{3
call filter(a, 'v:val !~ pat') call filter(a, 'v:val !~ pat')
if !exists("b:csv_fixed_width_cols") if !exists("b:csv_fixed_width_cols")
call map(a, 'split(v:val, ''^'' . b:col . ''\zs'')[col-1]') call map(a, 'split(v:val, ''^'' . b:col . ''\zs'')[col-1:cnt_cols]')
else else
call map(a, 'matchstr(v:val, <sid>GetColPat(col, 0))') call map(a, 'matchstr(v:val, <sid>GetColPat(col, 0)).*<sid>GetColPat(col+cnt_cols, 0)')
endif
if type(a[0]) == type([])
call map(a, 'join(v:val, "")')
endif endif
if a:reg =~ '[-"0-9a-zA-Z*+]' if a:reg =~ '[-"0-9a-zA-Z*+]'
"exe ':let @' . a:reg . ' = "' . join(a, "\n") . '"' "exe ':let @' . a:reg . ' = "' . join(a, "\n") . '"'
@@ -1574,7 +1602,7 @@ fu! <sid>AnalyzeColumn(...) "{{{3
" Initialize s:fold_headerline " Initialize s:fold_headerline
call <sid>CheckHeaderLine() call <sid>CheckHeaderLine()
let data = <sid>CopyCol('', colnr)[s:csv_fold_headerline : -1] let data = <sid>CopyCol('', colnr, '')[s:csv_fold_headerline : -1]
let qty = len(data) let qty = len(data)
let res = {} let res = {}
for item in data for item in data
@@ -1665,59 +1693,56 @@ fu! <sid>InitCSVFixedWidth() "{{{3
endif endif
" Turn off syntax highlighting " Turn off syntax highlighting
syn clear syn clear
let max_len = len(split(getline(1), '\zs'))
let _cc = &l:cc let _cc = &l:cc
let &l:cc = 1 let &l:cc = 1
redraw! redraw!
let list = [] let Dict = {'1': 1} " first column is always the start of a new column
let tcc = &l:cc let tcc = &l:cc
let &l:cc = 1
echo "<Cursor>, <Space>, <ESC>, <BS>, <CR>..." echo "<Cursor>, <Space>, <ESC>, <BS>, <CR>..."
let char=getchar() let char=getchar()
while 1 while 1
if char == "\<Left>" || char == "\<Right>" if char == "\<Left>" || char == "\<Right>"
let tcc = eval('tcc'.(char=="\<Left>" ? '-' : '+').'1') let tcc = eval('tcc'.(char=="\<Left>" ? '-' : '+').'1')
if tcc < 0
let tcc=0
elseif tcc > max_len
let tcc = max_len
endif
elseif char == "\<Space>" || char == 32 " Space elseif char == "\<Space>" || char == 32 " Space
call add(list, tcc) let Dict[tcc] = 1
elseif char == "\<BS>" || char == 127 elseif char == "\<BS>" || char == 127
call remove(list, -1) try
call remove(Dict, reverse(sort(keys(Dict)))[0])
catch /^Vim\%((\a\+)\)\=:E\(\%(716\)\|\%(684\)\)/ " Dict or List empty
break
endtry
elseif char == "\<ESC>" || char == 27 elseif char == "\<ESC>" || char == 27
let &l:cc=_cc let &l:cc=_cc
redraw! redraw!
return return
elseif char == "\<CR>" || char == "\n" || char == "\r" " Enter
let Dict[tcc] = 1
break
else else
break break
endif endif
let &l:cc=tcc . (!empty(list)? ',' . join(list, ','):'') let &l:cc=tcc . (!empty(keys(Dict))? ',' . join(keys(Dict), ','):'')
redraw! redraw!
echo "<Cursor>, <Space>, <ESC>, <BS>, <CR>..." echo "<Cursor>, <Space>, <ESC>, <BS>, <CR>..."
let char=getchar() let char=getchar()
endw endw
if tcc > 0
call add(list,tcc)
endif
let b:csv_fixed_width_cols=[] let b:csv_fixed_width_cols=[]
let tcc=0 let tcc=0
if !empty(list) let b:csv_fixed_width_cols = sort(keys(Dict), "<sid>SortList")
call Break() let b:csv_fixed_width = join(sort(keys(Dict), "<sid>SortList"), ',')
" Remove duplicate entries
for val in sort(list, "<sid>SortList")
if val==tcc
continue
endif
call add(b:csv_fixed_width_cols, val)
let tcc=val
endfor
let b:csv_fixed_width=join(sort(b:csv_fixed_width_cols,
\ "<sid>SortList"), ',')
call <sid>Init(1, line('$')) call <sid>Init(1, line('$'))
endif
let &l:cc=_cc let &l:cc=_cc
redraw! redraw!
endfu endfu
fu! Break()
return
endfu
fu! <sid>NewRecord(line1, line2, count) "{{{3 fu! <sid>NewRecord(line1, line2, count) "{{{3
if a:count =~ "\D" if a:count =~ "\D"
call <sid>WarningMsg("Invalid count specified") call <sid>WarningMsg("Invalid count specified")
@@ -1757,33 +1782,53 @@ fu! <sid>MoveOver(outer) "{{{3
" Move over a field " Move over a field
" a:outer means include the delimiter " a:outer means include the delimiter
let last = 0 let last = 0
let mode = a:outer let outer_field = a:outer
let cur_field = <sid>WColumn()
let _wsv = winsaveview()
if <sid>WColumn() == <sid>MaxColumns() if cur_field == <sid>MaxColumns()
let last = 1 let last = 1
if !mode && getline('.')[-1:] != b:delimiter if !outer_field && getline('.')[-1:] != b:delimiter
" No trailing delimiter, so inner == outer " No trailing delimiter, so inner == outer
let mode = 1 let outer_field = 1
endif endif
endif endif
" Use the mapped key " Move 1 column backwards, unless the cursor is in the first column
exe ":sil! norm E" " or in front of a delimiter
if matchstr(getline('.'), '.\%'.virtcol('.').'v') != b:delimiter && virtcol('.') > 1
call <sid>MoveCol(-1, line('.'))
endif
" if cur_field != <sid>WColumn()
" cursor was at the beginning of the field, and moved back to the
" previous field, move back to original position
" call cursor(_wsv.lnum, _wsv.col)
" endif
let _s = @/ let _s = @/
if last if last
exe "sil! norm! /" . b:col . "\<cr>v$h" . (mode ? "" : "\<Left>") exe "sil! norm! v$h" . (outer_field ? "" : "h") . (&sel ==# 'exclusive' ? "l" : '')
else else
exe "sil! norm! /" . b:col . "\<cr>vn\<Left>" . (mode ? "" : "\<Left>") exe "sil! norm! v/." . b:col . "\<cr>h" . (outer_field ? "" : "h") . (&sel ==# 'exclusive' ? "l" : '')
endif endif
let _wsv.col = col('.')-1
call winrestview(_wsv)
let @/ = _s let @/ = _s
endfu endfu
fu! <sid>CSVMappings() "{{{3 fu! <sid>CSVMappings() "{{{3
call <sid>Map('noremap', 'W', ':<C-U>call <SID>MoveCol(1, line("."))<CR>') call <sid>Map('noremap', 'W', ':<C-U>call <SID>MoveCol(1, line("."))<CR>')
call <sid>Map('noremap', '<C-Right>', ':<C-U>call <SID>MoveCol(1, line("."))<CR>')
call <sid>Map('noremap', 'L', ':<C-U>call <SID>MoveCol(1, line("."))<CR>')
call <sid>Map('noremap', 'E', ':<C-U>call <SID>MoveCol(-1, line("."))<CR>') call <sid>Map('noremap', 'E', ':<C-U>call <SID>MoveCol(-1, line("."))<CR>')
call <sid>Map('noremap', '<C-Left>', ':<C-U>call <SID>MoveCol(-1, line("."))<CR>')
call <sid>Map('noremap', 'H', ':<C-U>call <SID>MoveCol(-1, line("."), 1)<CR>')
call <sid>Map('noremap', 'K', ':<C-U>call <SID>MoveCol(0, call <sid>Map('noremap', 'K', ':<C-U>call <SID>MoveCol(0,
\ line(".")-v:count1)<CR>') \ line(".")-v:count1)<CR>')
call <sid>Map('noremap', '<Up>', ':<C-U>call <SID>MoveCol(0,
\ line(".")-v:count1)<CR>')
call <sid>Map('noremap', 'J', ':<C-U>call <SID>MoveCol(0, call <sid>Map('noremap', 'J', ':<C-U>call <SID>MoveCol(0,
\ line(".")+v:count1)<CR>') \ line(".")+v:count1)<CR>')
call <sid>Map('noremap', '<Down>', ':<C-U>call <SID>MoveCol(0,
\ line(".")+v:count1)<CR>')
call <sid>Map('nnoremap', '<CR>', ':<C-U>call <SID>PrepareFolding(1, call <sid>Map('nnoremap', '<CR>', ':<C-U>call <SID>PrepareFolding(1,
\ 1)<CR>') \ 1)<CR>')
call <sid>Map('nnoremap', '<Space>', ':<C-U>call <SID>PrepareFolding(1, call <sid>Map('nnoremap', '<Space>', ':<C-U>call <SID>PrepareFolding(1,
@@ -1806,12 +1851,6 @@ fu! <sid>CSVMappings() "{{{3
call <sid>Map('nnoremap', '<LocalLeader><CR>', '<CR>') call <sid>Map('nnoremap', '<LocalLeader><CR>', '<CR>')
call <sid>Map('nnoremap', '<LocalLeader><Space>', '<Space>') call <sid>Map('nnoremap', '<LocalLeader><Space>', '<Space>')
call <sid>Map('nnoremap', '<LocalLeader><BS>', '<BS>') call <sid>Map('nnoremap', '<LocalLeader><BS>', '<BS>')
call <sid>Map('map', '<C-Right>', 'W')
call <sid>Map('map', '<C-Left>', 'E')
call <sid>Map('map', 'H', 'E')
call <sid>Map('map', 'L', 'W')
call <sid>Map('map', '<Up>', 'K')
call <sid>Map('map', '<Down>', 'J')
endfu endfu
fu! <sid>CommandDefinitions() "{{{3 fu! <sid>CommandDefinitions() "{{{3
@@ -1845,8 +1884,8 @@ fu! <sid>CommandDefinitions() "{{{3
\ ':call <sid>Sort(<bang>0, <line1>,<line2>,<q-args>)', \ ':call <sid>Sort(<bang>0, <line1>,<line2>,<q-args>)',
\ '-nargs=* -bang -range=% -complete=custom,<sid>SortComplete') \ '-nargs=* -bang -range=% -complete=custom,<sid>SortComplete')
call <sid>LocalCmd("Column", call <sid>LocalCmd("Column",
\ ':call <sid>CopyCol(empty(<q-reg>)?''"'':<q-reg>,<q-count>)', \ ':call <sid>CopyCol(empty(<q-reg>)?''"'':<q-reg>,<q-count>,<q-args>)',
\ '-count -register') \ '-count -register -nargs=?')
call <sid>LocalCmd("MoveColumn", call <sid>LocalCmd("MoveColumn",
\ ':call <sid>MoveColumn(<line1>,<line2>,<f-args>)', \ ':call <sid>MoveColumn(<line1>,<line2>,<f-args>)',
\ '-range=% -nargs=* -complete=custom,<sid>SortComplete') \ '-range=% -nargs=* -complete=custom,<sid>SortComplete')
@@ -2327,6 +2366,11 @@ endfu
" Global functions "{{{2 " Global functions "{{{2
fu! csv#EvalColumn(nr, func, first, last) range "{{{3 fu! csv#EvalColumn(nr, func, first, last) range "{{{3
" Make sure, the function is called for the correct filetype.
if match(split(&ft, '\.'), 'csv') == -1
call <sid>Warn("File is no CSV file!")
return
endif
let save = winsaveview() let save = winsaveview()
call <sid>CheckHeaderLine() call <sid>CheckHeaderLine()
let nr = matchstr(a:nr, '^\d\+') let nr = matchstr(a:nr, '^\d\+')
@@ -2335,7 +2379,7 @@ fu! csv#EvalColumn(nr, func, first, last) range "{{{3
let start = a:first - 1 + s:csv_fold_headerline let start = a:first - 1 + s:csv_fold_headerline
let stop = a:last - 1 + s:csv_fold_headerline let stop = a:last - 1 + s:csv_fold_headerline
let column = <sid>CopyCol('', col)[start : stop] let column = <sid>CopyCol('', col, '')[start : stop]
" Delete delimiter " Delete delimiter
call map(column, 'substitute(v:val, b:delimiter . "$", "", "g")') call map(column, 'substitute(v:val, b:delimiter . "$", "", "g")')
" Revmoe trailing whitespace " Revmoe trailing whitespace
@@ -2395,7 +2439,7 @@ fu! CSVField(x, y, ...) "{{{3
let orig = !empty(a:0) let orig = !empty(a:0)
let y = (y < 0 ? 0 : y) let y = (y < 0 ? 0 : y)
let x = (x > (<sid>MaxColumns()) ? (<sid>MaxColumns()) : x) let x = (x > (<sid>MaxColumns()) ? (<sid>MaxColumns()) : x)
let col = <sid>CopyCol('',x) let col = <sid>CopyCol('',x,'')
if !orig if !orig
" remove leading and trainling whitespace and the delimiter " remove leading and trainling whitespace and the delimiter
return matchstr(col[y], '^\s*\zs.\{-}\ze\s*'.b:delimiter.'\?$') return matchstr(col[y], '^\s*\zs.\{-}\ze\s*'.b:delimiter.'\?$')
@@ -2434,6 +2478,23 @@ fu! CSV_WCol(...) "{{{3
endtry endtry
endfun endfun
fu! CSV_CloseBuffer(buffer) "{{{3
" Setup by SetupQuitPre autocommand
try
if bufnr((a:buffer)+0) > -1
exe a:buffer. "bw"
endif
catch /^Vim\%((\a\+)\)\=:E517/ " buffer already wiped
" no-op
finally
augroup CSV_QuitPre
au!
augroup END
augroup! CSV_QuitPre
endtry
endfu
" Initialize Plugin "{{{2 " Initialize Plugin "{{{2
let b:csv_start = exists("b:csv_start") ? b:csv_start : 1 let b:csv_start = exists("b:csv_start") ? b:csv_start : 1
let b:csv_end = exists("b:csv_end") ? b:csv_end : line('$') let b:csv_end = exists("b:csv_end") ? b:csv_end : line('$')

View File

@@ -12,15 +12,35 @@
" It tries to preserve cursor position and avoids " It tries to preserve cursor position and avoids
" replacing the buffer with stderr output. " replacing the buffer with stderr output.
" "
" Options:
"
" g:go_fmt_commands [default=1]
"
" Flag to indicate whether to enable the commands listed above.
"
" g:gofmt_command [default="gofmt"]
"
" Flag naming the gofmt executable to use.
"
if exists("b:did_ftplugin_go_fmt") if exists("b:did_ftplugin_go_fmt")
finish finish
endif endif
command! -buffer Fmt call s:GoFormat() if !exists("g:go_fmt_commands")
let g:go_fmt_commands = 1
endif
if !exists("g:gofmt_command")
let g:gofmt_command = "gofmt"
endif
if g:go_fmt_commands
command! -buffer Fmt call s:GoFormat()
endif
function! s:GoFormat() function! s:GoFormat()
let view = winsaveview() let view = winsaveview()
silent %!gofmt silent execute "%!" . g:gofmt_command
if v:shell_error if v:shell_error
let errors = [] let errors = []
for line in getline(1, line('$')) for line in getline(1, line('$'))
@@ -37,7 +57,7 @@ function! s:GoFormat()
endif endif
undo undo
if !empty(errors) if !empty(errors)
call setloclist(0, errors, 'r') call setqflist(errors, 'r')
endif endif
echohl Error | echomsg "Gofmt returned error" | echohl None echohl Error | echomsg "Gofmt returned error" | echohl None
endif endif

View File

@@ -24,23 +24,40 @@
" imported, an error will be displayed and the buffer will be " imported, an error will be displayed and the buffer will be
" untouched. " untouched.
" "
" In addition to these commands, there are also two shortcuts mapped: " If you would like to add shortcuts, you can do so by doing the following:
" "
" \f - Runs :Import fmt " Import fmt
" \F - Runs :Drop fmt " au Filetype go nnoremap <buffer> <LocalLeader>f :Import fmt<CR>
" "
" The backslash is the default maplocalleader, so it is possible that " Drop fmt
" au Filetype go nnoremap <buffer> <LocalLeader>F :Drop fmt<CR>
"
" Import the word under your cursor
" au Filetype go nnoremap <buffer> <LocalLeader>k
" \ :exe 'Import ' . expand('<cword>')<CR>
"
" The backslash '\' is the default maplocalleader, so it is possible that
" your vim is set to use a different character (:help maplocalleader). " your vim is set to use a different character (:help maplocalleader).
" "
" Options:
"
" g:go_import_commands [default=1]
"
" Flag to indicate whether to enable the commands listed above.
"
if exists("b:did_ftplugin_go_import") if exists("b:did_ftplugin_go_import")
finish finish
endif endif
command! -buffer -nargs=? -complete=customlist,go#complete#Package Drop call s:SwitchImport(0, '', <f-args>) if !exists("g:go_import_commands")
command! -buffer -nargs=1 -complete=customlist,go#complete#Package Import call s:SwitchImport(1, '', <f-args>) let g:go_import_commands = 1
command! -buffer -nargs=* -complete=customlist,go#complete#Package ImportAs call s:SwitchImport(1, <f-args>) endif
map <buffer> <LocalLeader>f :Import fmt<CR>
map <buffer> <LocalLeader>F :Drop fmt<CR> if g:go_import_commands
command! -buffer -nargs=? -complete=customlist,go#complete#Package Drop call s:SwitchImport(0, '', <f-args>)
command! -buffer -nargs=1 -complete=customlist,go#complete#Package Import call s:SwitchImport(1, '', <f-args>)
command! -buffer -nargs=* -complete=customlist,go#complete#Package ImportAs call s:SwitchImport(1, <f-args>)
endif
function! s:SwitchImport(enabled, localname, path) function! s:SwitchImport(enabled, localname, path)
let view = winsaveview() let view = winsaveview()

View File

@@ -45,7 +45,7 @@ endif
setlocal comments=://-,:// commentstring=//\ %s setlocal comments=://-,:// commentstring=//\ %s
setlocal suffixesadd=.jade setlocal suffixesadd+=.jade
let b:undo_ftplugin = "setl cms< com< " let b:undo_ftplugin = "setl cms< com< "
\ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin \ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin

View File

@@ -3,6 +3,7 @@
" Error Format {{{ " Error Format {{{
" Note: The error formats assume we're using the -file-line-error with " Note: The error formats assume we're using the -file-line-error with
" [pdf]latex. " [pdf]latex.
" Note: See |errorformat-LaTeX| for more info.
" Check for options " Check for options
if !exists("g:LatexBox_show_warnings") if !exists("g:LatexBox_show_warnings")
@@ -15,9 +16,14 @@ if !exists("g:LatexBox_ignore_warnings")
\ 'specifier changed to'] \ 'specifier changed to']
endif endif
" See |errorformat-LaTeX| " Standard error message formats
" Note: We consider statements that starts with "!" as errors
setlocal efm=%E!\ LaTeX\ %trror:\ %m setlocal efm=%E!\ LaTeX\ %trror:\ %m
setlocal efm+=%E%f:%l:\ %m setlocal efm+=%E%f:%l:\ %m
setlocal efm+=%E!\ %m
" More info for undefined control sequences
setlocal efm+=%Z<argument>\ %m
" Show or ignore warnings " Show or ignore warnings
if g:LatexBox_show_warnings if g:LatexBox_show_warnings
@@ -28,22 +34,18 @@ if g:LatexBox_show_warnings
setlocal efm+=%+WLaTeX\ %.%#Warning:\ %.%#line\ %l%.%# setlocal efm+=%+WLaTeX\ %.%#Warning:\ %.%#line\ %l%.%#
setlocal efm+=%+W%.%#\ at\ lines\ %l--%*\\d setlocal efm+=%+W%.%#\ at\ lines\ %l--%*\\d
setlocal efm+=%+WLaTeX\ %.%#Warning:\ %m setlocal efm+=%+WLaTeX\ %.%#Warning:\ %m
setlocal efm+=%+W%.%#%.%#Warning:\ %m setlocal efm+=%+W%.%#Warning:\ %m
else else
setlocal efm+=%-WLaTeX\ %.%#Warning:\ %.%#line\ %l%.%# setlocal efm+=%-WLaTeX\ %.%#Warning:\ %.%#line\ %l%.%#
setlocal efm+=%-W%.%#\ at\ lines\ %l--%*\\d setlocal efm+=%-W%.%#\ at\ lines\ %l--%*\\d
setlocal efm+=%-WLaTeX\ %.%#Warning:\ %m setlocal efm+=%-WLaTeX\ %.%#Warning:\ %m
setlocal efm+=%-W%.%#%.%#Warning:\ %m setlocal efm+=%-W%.%#Warning:\ %m
endif endif
" Consider the remaining statements that starts with "!" as errors
setlocal efm+=%E!\ %m
" Push file to file stack " Push file to file stack
setlocal efm+=%+P**%f setlocal efm+=%+P**%f
" Ignore unmatched lines " Ignore unmatched lines
setlocal efm+=%-G\\s%#
setlocal efm+=%-G%.%# setlocal efm+=%-G%.%#
" }}} " }}}
@@ -213,7 +215,7 @@ function! LatexBox_View()
if has('win32') if has('win32')
let cmd = '!start /b' . cmd . ' >nul' let cmd = '!start /b' . cmd . ' >nul'
else else
let cmd = '!' . cmd . ' >/dev/null &' let cmd = '!' . cmd . ' &>/dev/null &'
endif endif
silent execute cmd silent execute cmd
if !has("gui_running") if !has("gui_running")

View File

@@ -24,7 +24,7 @@ if !exists('g:LatexBox_cite_pattern')
let g:LatexBox_cite_pattern = '\C\\\a*cite\a*\*\?\(\[[^\]]*\]\)*\_\s*{' let g:LatexBox_cite_pattern = '\C\\\a*cite\a*\*\?\(\[[^\]]*\]\)*\_\s*{'
endif endif
if !exists('g:LatexBox_ref_pattern') if !exists('g:LatexBox_ref_pattern')
let g:LatexBox_ref_pattern = '\C\\v\?\(eq\|page\|[cC]\)\?ref\*\?\_\s*{' let g:LatexBox_ref_pattern = '\C\\v\?\(eq\|page\|[cC]\|labelc\)\?ref\*\?\_\s*{'
endif endif
if !exists('g:LatexBox_completion_environments') if !exists('g:LatexBox_completion_environments')
@@ -196,37 +196,42 @@ function! s:FindBibData(...)
endif endif
if !filereadable(file) if !filereadable(file)
return '' return []
endif endif
let lines = readfile(file)
let bibdata_list = []
"
" Search for added bibliographies
"
let bibliography_cmds = [ let bibliography_cmds = [
\ '\\bibliography', \ '\\bibliography',
\ '\\addbibresource', \ '\\addbibresource',
\ '\\addglobalbib', \ '\\addglobalbib',
\ '\\addsectionbib', \ '\\addsectionbib',
\ ] \ ]
let lines = readfile(file)
let bibdata_list = []
for cmd in bibliography_cmds for cmd in bibliography_cmds
let bibdata_list += map(filter(copy(lines), let filtered = filter(copy(lines),
\ 'v:val =~ ''\C' . cmd . '\s*{[^}]\+}'''), \ 'v:val =~ ''\C' . cmd . '\s*{[^}]\+}''')
let files = map(filtered,
\ 'matchstr(v:val, ''\C' . cmd . '\s*{\zs[^}]\+\ze}'')') \ 'matchstr(v:val, ''\C' . cmd . '\s*{\zs[^}]\+\ze}'')')
for file in files
let bibdata_list += map(split(file, ','),
\ 'fnamemodify(v:val, '':r'')')
endfor
endfor endfor
let bibdata_list += map(filter(copy(lines), "
\ 'v:val =~ ''\C\\\%(input\|include\)\s*{[^}]\+}'''), " Also search included files
\ 's:FindBibData(LatexBox_kpsewhich(matchstr(v:val,' "
\ . '''\C\\\%(input\|include\)\s*{\zs[^}]\+\ze}'')))') for input in filter(lines,
\ 'v:val =~ ''\C\\\%(input\|include\)\s*{[^}]\+}''')
let bibdata_list += s:FindBibData(LatexBox_kpsewhich(
\ matchstr(input,
\ '\C\\\%(input\|include\)\s*{\zs[^}]\+\ze}')))
endfor
let bibdata_list += map(filter(copy(lines), return bibdata_list
\ 'v:val =~ ''\C\\\%(input\|include\)\s\+\S\+'''),
\ 's:FindBibData(LatexBox_kpsewhich(matchstr(v:val,'
\ . '''\C\\\%(input\|include\)\s\+\zs\S\+\ze'')))')
return join(bibdata_list, ',')
endfunction endfunction
let s:bstfile = expand('<sfile>:p:h') . '/vimcomplete' let s:bstfile = expand('<sfile>:p:h') . '/vimcomplete'
@@ -235,7 +240,7 @@ function! LatexBox_BibSearch(regexp)
let res = [] let res = []
" Find data from bib files " Find data from bib files
let bibdata = s:FindBibData() let bibdata = join(s:FindBibData(), ',')
if bibdata != '' if bibdata != ''
" write temporary aux file " write temporary aux file
@@ -247,9 +252,18 @@ function! LatexBox_BibSearch(regexp)
call writefile(['\citation{*}', '\bibstyle{' . s:bstfile . '}', call writefile(['\citation{*}', '\bibstyle{' . s:bstfile . '}',
\ '\bibdata{' . bibdata . '}'], auxfile) \ '\bibdata{' . bibdata . '}'], auxfile)
if has('win32')
let l:old_shellslash = &l:shellslash
setlocal noshellslash
silent execute '! cd ' shellescape(LatexBox_GetTexRoot()) .
\ ' & bibtex -terse '
\ . fnamemodify(auxfile, ':t') . ' >nul'
let &l:shellslash = l:old_shellslash
else
silent execute '! cd ' shellescape(LatexBox_GetTexRoot()) . silent execute '! cd ' shellescape(LatexBox_GetTexRoot()) .
\ ' ; bibtex -terse ' \ ' ; bibtex -terse '
\ . fnamemodify(auxfile, ':t') . ' >/dev/null' \ . fnamemodify(auxfile, ':t') . ' >/dev/null'
endif
let lines = split(substitute(join(readfile(bblfile), "\n"), let lines = split(substitute(join(readfile(bblfile), "\n"),
\ '\n\n\@!\(\s\=\)\s*\|{\|}', '\1', 'g'), "\n") \ '\n\n\@!\(\s\=\)\s*\|{\|}', '\1', 'g'), "\n")
@@ -258,6 +272,8 @@ function! LatexBox_BibSearch(regexp)
let matches = matchlist(line, let matches = matchlist(line,
\ '^\(.*\)||\(.*\)||\(.*\)||\(.*\)||\(.*\)') \ '^\(.*\)||\(.*\)||\(.*\)||\(.*\)||\(.*\)')
if !empty(matches) && !empty(matches[1]) if !empty(matches) && !empty(matches[1])
let s:type_length = max([s:type_length,
\ len(matches[2]) + 3])
call add(res, { call add(res, {
\ 'key': matches[1], \ 'key': matches[1],
\ 'type': matches[2], \ 'type': matches[2],
@@ -275,7 +291,7 @@ function! LatexBox_BibSearch(regexp)
" Find data from 'thebibliography' environments " Find data from 'thebibliography' environments
let lines = readfile(LatexBox_GetMainTexFile()) let lines = readfile(LatexBox_GetMainTexFile())
if match(lines, '\C\\begin{thebibliography}') if match(lines, '\C\\begin{thebibliography}') >= 0
for line in filter(filter(lines, 'v:val =~ ''\C\\bibitem'''), for line in filter(filter(lines, 'v:val =~ ''\C\\bibitem'''),
\ 'v:val =~ a:regexp') \ 'v:val =~ a:regexp')
let match = matchlist(line, '\\bibitem{\([^}]*\)')[1] let match = matchlist(line, '\\bibitem{\([^}]*\)')[1]
@@ -294,6 +310,7 @@ endfunction
" }}} " }}}
" BibTeX completion {{{ " BibTeX completion {{{
let s:type_length=0
function! LatexBox_BibComplete(regexp) function! LatexBox_BibComplete(regexp)
" treat spaces as '.*' if needed " treat spaces as '.*' if needed
@@ -305,9 +322,12 @@ function! LatexBox_BibComplete(regexp)
endif endif
let res = [] let res = []
let s:type_length = 4
for m in LatexBox_BibSearch(regexp) for m in LatexBox_BibSearch(regexp)
let type = m['type'] == '' ? '[-]' : '[' . m['type'] . '] ' let type = m['type'] == '' ? '[-]' : '[' . m['type'] . '] '
let type = printf('%-' . s:type_length . 's', type)
let auth = m['author'] == '' ? '' : m['author'][:20] . ' ' let auth = m['author'] == '' ? '' : m['author'][:20] . ' '
let auth = substitute(auth, '\~', ' ', 'g')
let year = m['year'] == '' ? '' : '(' . m['year'] . ')' let year = m['year'] == '' ? '' : '(' . m['year'] . ')'
let w = { 'word': m['key'], let w = { 'word': m['key'],
\ 'abbr': type . auth . year, \ 'abbr': type . auth . year,
@@ -437,7 +457,7 @@ function! s:GetLabelCache(file)
if !has_key(s:LabelCache , a:file) || s:LabelCache[a:file][0] != getftime(a:file) if !has_key(s:LabelCache , a:file) || s:LabelCache[a:file][0] != getftime(a:file)
" Open file in temporary split window for label extraction. " Open file in temporary split window for label extraction.
silent execute '1sp +let\ labels=s:ExtractLabels()|let\ inputs=s:ExtractInputs()|quit! ' . a:file silent execute '1sp +let\ labels=s:ExtractLabels()|let\ inputs=s:ExtractInputs()|quit! ' . fnameescape(a:file)
let s:LabelCache[a:file] = [ getftime(a:file), labels, inputs ] let s:LabelCache[a:file] = [ getftime(a:file), labels, inputs ]
endif endif

View File

@@ -92,8 +92,8 @@ function! s:LatexmkCallback(basename, status)
" Only remove the pid if not in continuous mode " Only remove the pid if not in continuous mode
if !g:LatexBox_latexmk_preview_continuously if !g:LatexBox_latexmk_preview_continuously
call remove(g:latexmk_running_pids, a:basename) call remove(g:latexmk_running_pids, a:basename)
call LatexBox_LatexErrors(a:status, a:basename)
endif endif
call LatexBox_LatexErrors(a:status, a:basename)
endfunction endfunction
function! s:setup_vim_server() function! s:setup_vim_server()
@@ -104,7 +104,7 @@ function! s:setup_vim_server()
if has('win32') if has('win32')
" Just drop through to the default for windows " Just drop through to the default for windows
else else
if match(&shell, '/\(bash\|zsh\)$') >= 0 if match(&shell, '\(bash\|zsh\)$') >= 0
let ppid = '$PPID' let ppid = '$PPID'
else else
let ppid = '$$' let ppid = '$$'
@@ -143,6 +143,13 @@ function! LatexBox_Latexmk(force)
let texroot = shellescape(LatexBox_GetTexRoot()) let texroot = shellescape(LatexBox_GetTexRoot())
let mainfile = fnameescape(fnamemodify(LatexBox_GetMainTexFile(), ':t')) let mainfile = fnameescape(fnamemodify(LatexBox_GetMainTexFile(), ':t'))
" Check if latexmk is installed
if !executable('latexmk')
echomsg "Error: LaTeX-Box relies on latexmk for compilation, but it" .
\ " is not installed!"
return
endif
" Check if already running " Check if already running
if has_key(g:latexmk_running_pids, basepath) if has_key(g:latexmk_running_pids, basepath)
echomsg "latexmk is already running for `" . basename . "'" echomsg "latexmk is already running for `" . basename . "'"
@@ -181,6 +188,10 @@ function! LatexBox_Latexmk(force)
endif endif
let cmd .= ' -e ' . shellescape('$pdflatex =~ s/ / -file-line-error /') let cmd .= ' -e ' . shellescape('$pdflatex =~ s/ / -file-line-error /')
let cmd .= ' -e ' . shellescape('$latex =~ s/ / -file-line-error /') let cmd .= ' -e ' . shellescape('$latex =~ s/ / -file-line-error /')
if g:LatexBox_latexmk_preview_continuously
let cmd .= ' -e ' . shellescape('$success_cmd = $ENV{SUCCESSCMD}')
let cmd .= ' -e ' . shellescape('$failure_cmd = $ENV{FAILURECMD}')
endif
let cmd .= ' ' . mainfile let cmd .= ' ' . mainfile
" Redirect output to null " Redirect output to null
@@ -216,8 +227,27 @@ function! LatexBox_Latexmk(force)
let callback = callbackfunc . '(''' . basepath . ''', %LATEXERR%)' let callback = callbackfunc . '(''' . basepath . ''', %LATEXERR%)'
let vimcmd = vim_program . ' --servername ' . v:servername let vimcmd = vim_program . ' --servername ' . v:servername
\ . ' --remote-expr ' . shellescape(callback) \ . ' --remote-expr ' . shellescape(callback)
let scallback = callbackfunc . '(''' . basepath . ''', 0)'
let svimcmd = vim_program . ' --servername ' . v:servername
\ . ' --remote-expr ' . shellescape(scallback)
let fcallback = callbackfunc . '(''' . basepath . ''', 1)'
let fvimcmd = vim_program . ' --servername ' . v:servername
\ . ' --remote-expr ' . shellescape(fcallback)
let asyncbat = tempname() . '.bat' let asyncbat = tempname() . '.bat'
if g:LatexBox_latexmk_preview_continuously
call writefile(['setlocal',
\ 'set T=%TEMP%\sthUnique.tmp',
\ 'wmic process where (Name="WMIC.exe" AND CommandLine LIKE "%%%TIME%%%") '
\ . 'get ParentProcessId /value | find "ParentProcessId" >%T%',
\ 'set /P A=<%T%',
\ 'set CMDPID=%A:~16% & del %T%',
\ vimsetpid,
\ 'set SUCCESSCMD='.svimcmd,
\ 'set FAILURECMD='.fvimcmd,
\ cmd,
\ 'endlocal'], asyncbat)
else
call writefile(['setlocal', call writefile(['setlocal',
\ 'set T=%TEMP%\sthUnique.tmp', \ 'set T=%TEMP%\sthUnique.tmp',
\ 'wmic process where (Name="WMIC.exe" AND CommandLine LIKE "%%%TIME%%%") ' \ 'wmic process where (Name="WMIC.exe" AND CommandLine LIKE "%%%TIME%%%") '
@@ -229,6 +259,7 @@ function! LatexBox_Latexmk(force)
\ 'set LATEXERR=%ERRORLEVEL%', \ 'set LATEXERR=%ERRORLEVEL%',
\ vimcmd, \ vimcmd,
\ 'endlocal'], asyncbat) \ 'endlocal'], asyncbat)
endif
" Define command " Define command
let cmd = '!start /b ' . asyncbat . ' & del ' . asyncbat let cmd = '!start /b ' . asyncbat . ' & del ' . asyncbat
@@ -242,12 +273,25 @@ function! LatexBox_Latexmk(force)
let callback = shellescape(callbackfunc).'"(\"'.basepath.'\",$?)"' let callback = shellescape(callbackfunc).'"(\"'.basepath.'\",$?)"'
let vimcmd = g:vim_program . ' --servername ' . v:servername let vimcmd = g:vim_program . ' --servername ' . v:servername
\ . ' --remote-expr ' . callback \ . ' --remote-expr ' . callback
let scallback = shellescape(callbackfunc).'"(\"'.basepath.'\",0)"'
let svimcmd = g:vim_program . ' --servername ' . v:servername
\ . ' --remote-expr ' . scallback
let fcallback = shellescape(callbackfunc).'"(\"'.basepath.'\",1)"'
let fvimcmd = g:vim_program . ' --servername ' . v:servername
\ . ' --remote-expr ' . fcallback
" Define command " Define command
" Note: Here we escape '%' because it may be given as a user option " Note: Here we escape '%' because it may be given as a user option
" through g:LatexBox_latexmk_options, for instance with " through g:LatexBox_latexmk_options, for instance with
" g:Latex..._options = "-pdflatex='pdflatex -synctex=1 \%O \%S'" " g:Latex..._options = "-pdflatex='pdflatex -synctex=1 \%O \%S'"
if g:LatexBox_latexmk_preview_continuously
let cmd = vimsetpid . ' ; '
\ . 'export SUCCESSCMD=' . shellescape(svimcmd) . ' '
\ . ' FAILURECMD=' . shellescape(fvimcmd) . ' ; '
\ . escape(cmd, '%')
else
let cmd = vimsetpid . ' ; ' . escape(cmd, '%') . ' ; ' . vimcmd let cmd = vimsetpid . ' ; ' . escape(cmd, '%') . ' ; ' . vimcmd
endif
let cmd = '! (' . cmd . ') >/dev/null &' let cmd = '! (' . cmd . ') >/dev/null &'
endif endif
@@ -301,7 +345,15 @@ endfunction
" LatexmkClean {{{ " LatexmkClean {{{
function! LatexBox_LatexmkClean(cleanall) function! LatexBox_LatexmkClean(cleanall)
" Check if latexmk is installed
if !executable('latexmk')
echomsg "Error: LaTeX-Box relies on latexmk for compilation, but it" .
\ " is not installed!"
return
endif
let basename = LatexBox_GetTexBasename(1) let basename = LatexBox_GetTexBasename(1)
if has_key(g:latexmk_running_pids, basename) if has_key(g:latexmk_running_pids, basename)
echomsg "don't clean when latexmk is running" echomsg "don't clean when latexmk is running"
return return

View File

@@ -312,7 +312,7 @@ function! s:ReadTOC(auxfile, texfile, ...)
if included != '' if included != ''
" append the input TOX to `toc` and `fileindices` " append the input TOX to `toc` and `fileindices`
let newaux = prefix . '/' . included let newaux = prefix . '/' . included
let newtex = fnamemodify(fnamemodify(newaux, ':t:r') . '.tex', ':p') let newtex = fnamemodify(newaux, ':r') . '.tex'
call s:ReadTOC(newaux, newtex, toc, fileindices) call s:ReadTOC(newaux, newtex, toc, fileindices)
continue continue
endif endif
@@ -344,10 +344,11 @@ function! s:ReadTOC(auxfile, texfile, ...)
let page = '' let page = ''
endif endif
" parse section number " parse section number
let secnum = ''
if len(tree[1]) > 3 && empty(tree[1][1]) if len(tree[1]) > 3 && empty(tree[1][1])
call remove(tree[1], 1) call remove(tree[1], 1)
endif endif
if len(tree[1]) > 1 if len(tree[1]) > 1 && tree[1][0] =~ '\(numberline\|tocsection\)'
if !empty(tree[1][1]) if !empty(tree[1][1])
let secnum = LatexBox_TreeToTex(tree[1][1]) let secnum = LatexBox_TreeToTex(tree[1][1])
let secnum = substitute(secnum, '\\\S\+\s', '', 'g') let secnum = substitute(secnum, '\\\S\+\s', '', 'g')
@@ -356,12 +357,12 @@ function! s:ReadTOC(auxfile, texfile, ...)
endif endif
let tree = tree[1][2:] let tree = tree[1][2:]
else else
let secnum = ''
let tree = tree[1] let tree = tree[1]
endif endif
" parse section title " parse section title
let text = LatexBox_TreeToTex(tree) let text = LatexBox_TreeToTex(tree)
let text = substitute(text, '^{\+\|}\+$', '', 'g') let text = substitute(text, '^{\+\|}\+$', '', 'g')
let text = substitute(text, '\*', '', 'g')
" add TOC entry " add TOC entry
call add(fileindices[texfile], len(toc)) call add(fileindices[texfile], len(toc))
@@ -436,10 +437,11 @@ endfunction
function! s:FindClosestSection(toc, fileindices) function! s:FindClosestSection(toc, fileindices)
let file = expand('%:p') let file = expand('%:p')
if !has_key(a:fileindices, file) if !has_key(a:fileindices, file)
echoe 'Current file is not included in main tex file ' . LatexBox_GetMainTexFile() . '.' return 0
endif endif
let imax = len(a:fileindices[file]) let imax = len(a:fileindices[file])
if imax > 0
let imin = 0 let imin = 0
while imin < imax - 1 while imin < imax - 1
let i = (imax + imin) / 2 let i = (imax + imin) / 2
@@ -455,8 +457,10 @@ function! s:FindClosestSection(toc, fileindices)
let imin = i let imin = i
endif endif
endwhile endwhile
return a:fileindices[file][imin] return a:fileindices[file][imin]
else
return 0
endif
endfunction endfunction
let s:ConvBackPats = map([ let s:ConvBackPats = map([

View File

@@ -80,24 +80,14 @@ function! s:TOCActivate(close)
execute b:calling_win . 'wincmd w' execute b:calling_win . 'wincmd w'
let bnr = bufnr(entry['file']) let files = [entry['file']]
if bnr == -1 for line in filter(readfile(entry['file']), 'v:val =~ ''\\input{''')
execute 'badd ' . entry['file'] call add(files, matchstr(line, '{\zs.*\ze\(\.tex\)\?}') . '.tex')
let bnr = bufnr(entry['file']) endfor
endif
execute 'buffer! ' . bnr " Find section in buffer (or inputted files)
call s:TOCFindMatch('\\' . entry['level'] . '\_\s*{' . titlestr . '}',
" skip duplicates \ duplicates, files)
while duplicates > 0
if search('\\' . entry['level'] . '\_\s*{' . titlestr . '}', 'ws')
let duplicates -= 1
endif
endwhile
if search('\\' . entry['level'] . '\_\s*{' . titlestr . '}', 'ws')
normal zv
endif
if a:close if a:close
if g:LatexBox_split_resize if g:LatexBox_split_resize
@@ -109,6 +99,30 @@ function! s:TOCActivate(close)
endif endif
endfunction endfunction
" {{{2 TOCFindMatch
function! s:TOCFindMatch(strsearch,duplicates,files)
call s:TOCOpenBuf(a:files[0])
let dups = a:duplicates
" Skip duplicates
while dups > 0
if search(a:strsearch, 'w')
let dups -= 1
else
break
endif
endwhile
if search(a:strsearch, 'w')
normal! zv
return
endif
call s:TOCFindMatch(a:strsearch,dups,a:files[1:])
endfunction
" {{{2 TOCFoldLevel " {{{2 TOCFoldLevel
function! TOCFoldLevel(lnum) function! TOCFoldLevel(lnum)
let line = getline(a:lnum) let line = getline(a:lnum)
@@ -140,12 +154,25 @@ function! TOCFoldLevel(lnum)
" Return previous fold level " Return previous fold level
return "=" return "="
endfunction endfunction
" {{{2 TOCFoldText " {{{2 TOCFoldText
function! TOCFoldText() function! TOCFoldText()
let parts = matchlist(getline(v:foldstart), '^\(.*\)\t\(.*\)$') let parts = matchlist(getline(v:foldstart), '^\(.*\)\t\(.*\)$')
return printf('%-8s%-72s', parts[1], parts[2]) return printf('%-8s%-72s', parts[1], parts[2])
endfunction endfunction
" {{{2 TOCOpenBuf
function! s:TOCOpenBuf(file)
let bnr = bufnr(a:file)
if bnr == -1
execute 'badd ' . a:file
let bnr = bufnr(a:file)
endif
execute 'buffer! ' . bnr
endfunction
" }}}1 " }}}1
" {{{1 Mappings " {{{1 Mappings

View File

@@ -33,14 +33,14 @@ endif
setlocal include=\\<\\(use\\\|require\\)\\> setlocal include=\\<\\(use\\\|require\\)\\>
setlocal includeexpr=substitute(substitute(substitute(v:fname,'::','/','g'),'->\*','',''),'$','.pm','') setlocal includeexpr=substitute(substitute(substitute(v:fname,'::','/','g'),'->\*','',''),'$','.pm','')
setlocal define=[^A-Za-z_] setlocal define=[^A-Za-z_]
setlocal iskeyword+=:
" The following line changes a global variable but is necessary to make " The following line changes a global variable but is necessary to make
" gf and similar commands work. The change to iskeyword was incorrect. " gf and similar commands work. Thanks to Andrew Pimlott for pointing
" Thanks to Andrew Pimlott for pointing out the problem. If this causes a " out the problem. If this causes a problem for you, add an
" problem for you, add an after/ftplugin/perl.vim file that contains " after/ftplugin/perl.vim file that contains
" set isfname-=: " set isfname-=:
set isfname+=: set isfname+=:
set iskeyword+=:
" Set this once, globally. " Set this once, globally.
if !exists("perlpath") if !exists("perlpath")

69
ftplugin/r.vim Normal file
View File

@@ -0,0 +1,69 @@
" ftplugin for R files
"
" Author: Iago Mosqueira <i.mosqueira@ic.ac.uk>
" Author: Johannes Ranke <jranke@uni-bremen.de>
" Author: Fernando Henrique Ferraz Pereira da Rosa <feferraz@ime.usp.br>
" Maintainer: Johannes Ranke <jranke@uni-bremen.de>
" Last Change: 2007 Nov 21
" SVN: $Id: r.vim 75 2007-11-21 13:34:02Z ranke $
"
" Code written in vim is sent to R through a perl pipe
" [funnel.pl, by Larry Clapp <vim@theclapp.org>], as individual lines,
" blocks, or the whole file.
" Press <F2> to open a new xterm with a new R interpreter listening
" to its standard input (you can type R commands into the xterm)
" as well as to code pasted from within vim.
"
" After selecting a visual block, 'r' sends it to the R interpreter
"
" In insert mode, <M-Enter> sends the active line to R and moves to the next
" line (write and process mode).
"
" Maps:
" <F2> Start a listening R interpreter in new xterm
" <F3> Start a listening R-devel interpreter in new xterm
" <F4> Start a listening R --vanilla interpreter in new xterm
" <F5> Run current file
" <F9> Run line under cursor
" r Run visual block
" <M-Enter> Write and process
" Only do this when not yet done for this buffer
if exists("b:did_ftplugin")
finish
endif
" Don't load another plugin for this buffer
let b:did_ftplugin = 1
" Disable backup for .r-pipe
setl backupskip=.*pipe
" Set tabstop so it is compatible with the emacs edited code. Personally, I
" prefer shiftwidth=2, which I have in my .vimrc anyway
set expandtab
set shiftwidth=4
set tabstop=8
" Start a listening R interpreter in new xterm
noremap <buffer> <F2> :!xterm -T 'R' -e funnel.pl ~/.r-pipe "R && echo -e 'Interpreter has finished. Exiting. Goodbye.\n'"&<CR><CR>
" Start a listening R-devel interpreter in new xterm
noremap <buffer> <F3> :!xterm -T 'R' -e funnel.pl ~/.r-pipe "R-devel && echo 'Interpreter has finished. Exiting. Goodbye.'"&<CR><CR>
" Start a listening R --vanilla interpreter in new xterm
noremap <buffer> <F4> :!xterm -T 'R' -e funnel.pl ~/.r-pipe "R -vanilla && echo 'Interpreter has finished. Exiting. Goodbye.'"&<CR><CR>
" Send line under cursor to R
noremap <buffer> <F9> :execute line(".") 'w >> ~/.r-pipe'<CR>
inoremap <buffer> <F9> <Esc> :execute line(".") 'w >> ~/.r-pipe'<CR>
" Send visual selected block to R
vnoremap <buffer> r :w >> ~/.r-pipe<CR>
" Write and process mode (somehow mapping <C-Enter> does not work)
inoremap <M-Enter> <Esc>:execute line(".") 'w >> ~/.r-pipe'<CR>o
" Send current file to R
noremap <buffer> <F5> :execute '1 ,' line("$") 'w >> ~/.r-pipe' <CR><CR>

48
ftplugin/rhelp.vim Normal file
View File

@@ -0,0 +1,48 @@
" ftplugin for R help files
"
" Author: Johannes Ranke <jranke@uni-bremen.de>
" Last Change: 2007 Nov 21
" SVN: $Id: rhelp.vim 75 2007-11-21 13:34:02Z ranke $
"
" Usage:
"
" Press <F2> to open a new xterm with a new R interpreter listening
" to its standard input (you can type R commands into the xterm)
" as well as to code pasted from within vim.
"
" After selecting a visual block, 'r' sends it to the R interpreter
"
" Add to filetypes.vim, if you don't use vim 7
" au BufNewFile,BufRead *.Rd,*.rd setf rhelp
"
" Maps:
" <F2> Start a listening R interpreter in new xterm
" <F9> Run line under cursor
" r Run visual block
" <M-Enter> Write and process R code
" Only do this when not yet done for this buffer
if exists("b:did_ftplugin")
finish
endif
" Don't load another plugin for this buffer
let b:did_ftplugin = 1
" Set tabbing
set expandtab
set tabstop=2
set shiftwidth=2
" Start a listening R interpreter in new xterm
noremap <buffer> <F2> :!xterm -T 'R' -e funnel.pl ~/.r-pipe "R && echo -e 'Interpreter has finished. Exiting. Goodbye.\n'"&<CR><CR>
" Send line under cursor to R
noremap <buffer> <F9> :execute line(".") 'w >> ~/.r-pipe'<CR>
inoremap <buffer> <F9> <Esc> :execute line(".") 'w >> ~/.r-pipe'<CR>
" Send visual selected block to R
vnoremap <buffer> r :w >> ~/.r-pipe<CR>
" Write and process mode (somehow mapping <C-Enter> does not work)
inoremap <M-Enter> <Esc>:execute line(".") 'w >> ~/.r-pipe'<CR>o

59
ftplugin/rnoweb.vim Normal file
View File

@@ -0,0 +1,59 @@
" ftplugin for Sweave files containing both LaTeX and R code
"
" Maintainer: Johannes Ranke <jranke@uni-bremen.de>
" Last Change: 2007 Nov 21
" SVN: $Id: rnoweb.vim 75 2007-11-21 13:34:02Z ranke $
"
" Usage:
"
" Press <F2> to open a new xterm with a new R interpreter listening
" to its standard input (you can type R commands into the xterm)
" as well as to code pasted from within vim.
"
" A Makefile for producing R noweb files is in included in my Vim script
" R.vim:
" http://www.vim.org/scripts/script.php?script_id=1048
" You can also look in my SVN repository under:
" http://kri/viewcvs/*checkout*/Makefile.rnoweb?root=vim
"
"
" After selecting a visual block, 'r' sends it to the R interpreter
"
" Add to filetypes.vim, if you don't use vim 7
" au BufNewFile,BufRead *.Rnw,*.rnw setf rnoweb
" and/or
" au BufNewFile,BufRead *.Snw,*.snw setf rnoweb
"
" Maps:
" <F2> Start a listening R interpreter in new xterm
" <F9> Run line under cursor
" r Run visual block
" <M-Enter> Write and process R code
" Only do this when not yet done for this buffer
if exists("b:did_ftplugin")
finish
endif
" Don't load another plugin for this buffer
let b:did_ftplugin = 1
" Disable backup for .r-pipe
setl backupskip=.*pipe
" Set R friendly tabbing
set expandtab
set shiftwidth=2
" Start a listening R interpreter in new xterm
noremap <buffer> <F2> :!xterm -T 'R' -e funnel.pl ~/.r-pipe "R && echo -e 'Interpreter has finished. Exiting. Goodbye.\n'"&<CR><CR>
" Send line under cursor to R
noremap <buffer> <F9> :execute line(".") 'w >> ~/.r-pipe'<CR>
inoremap <buffer> <F9> <Esc> :execute line(".") 'w >> ~/.r-pipe'<CR>
" Send visual selected block to R
vnoremap <buffer> r :w >> ~/.r-pipe<CR>
" Write and process mode (somehow mapping <C-Enter> does not work)
inoremap <M-Enter> <Esc>:execute line(".") 'w >> ~/.r-pipe'<CR>o

View File

@@ -117,16 +117,21 @@ if globpath(&rtp, 'plugin/fuf.vim') != ''
return scala#GetDirForFuzzyFinder(a:from, 'src/../') return scala#GetDirForFuzzyFinder(a:from, 'src/../')
endfunction endfunction
nnoremap <buffer> <silent> ,ft :FufFile <c-r>=scala#GetTestDirForFuzzyFinder('%:p:h')<cr><cr> " If you want to disable the default key mappings, write the following line in
nnoremap <buffer> <silent> ,fs :FufFile <c-r>=scala#GetMainDirForFuzzyFinder('%:p:h')<cr><cr> " your ~/.vimrc
nnoremap <buffer> <silent> ,fr :FufFile <c-r>=scala#GetRootDirForFuzzyFinder('%:p:h')<cr><cr> " let g:scala_use_default_keymappings = 0
if get(g:, 'scala_use_default_keymappings', 1)
nnoremap <buffer> <silent> <Leader>ft :FufFile <c-r>=scala#GetTestDirForFuzzyFinder('%:p:h')<cr><cr>
nnoremap <buffer> <silent> <Leader>fs :FufFile <c-r>=scala#GetMainDirForFuzzyFinder('%:p:h')<cr><cr>
nnoremap <buffer> <silent> <Leader>fr :FufFile <c-r>=scala#GetRootDirForFuzzyFinder('%:p:h')<cr><cr>
endif
endif endif
" If you want to disable the default key mappings, write the following line in " If you want to disable the default key mappings, write the following line in
" your ~/.vimrc " your ~/.vimrc
" let g:scala_use_default_keymappings = 0 " let g:scala_use_default_keymappings = 0
if get(g:, 'scala_use_default_keymappings', 1) if get(g:, 'scala_use_default_keymappings', 1)
nnoremap <buffer> ,jt :call JustifyCurrentLine()<cr> nnoremap <buffer> <Leader>jt :call JustifyCurrentLine()<cr>
endif endif
" "

View File

@@ -1,8 +1,10 @@
compiler typescript compiler typescript
setlocal autoindent setlocal autoindent
setlocal cindent
setlocal smartindent setlocal smartindent
setlocal indentexpr& setlocal indentexpr&
setlocal cindent
setlocal cino=j1J1
setlocal commentstring=//\ %s setlocal commentstring=//\ %s

View File

@@ -25,6 +25,7 @@ let s:block_skip = "synIDattr(synID(line('.'),col('.'),1),'name') =~? '" . s:s
let s:block_start = 'do\|fn' let s:block_start = 'do\|fn'
let s:block_middle = 'else\|match\|elsif\|catch\|after\|rescue' let s:block_middle = 'else\|match\|elsif\|catch\|after\|rescue'
let s:block_end = 'end' let s:block_end = 'end'
let s:pipeline = '^\s*|>.*$'
let s:indent_keywords = '\<\%(' . s:block_start . '\|' . s:block_middle . '\)$' let s:indent_keywords = '\<\%(' . s:block_start . '\|' . s:block_middle . '\)$'
let s:deindent_keywords = '^\s*\<\%(' . s:block_end . '\|' . s:block_middle . '\)\>' let s:deindent_keywords = '^\s*\<\%(' . s:block_end . '\|' . s:block_middle . '\)\>'
@@ -38,7 +39,7 @@ function! GetElixirIndent(...)
return 0 return 0
endif endif
if synIDattr(synID(v:lnum, 1, 1), "name") !~ '\(Comment\|String\)$' if synIDattr(synID(v:lnum, 1, 1), "name") !~ s:skip_syntax
let splited_line = split(getline(lnum), '\zs') let splited_line = split(getline(lnum), '\zs')
let opened_symbol = 0 let opened_symbol = 0
let opened_symbol += count(splited_line, '[') - count(splited_line, ']') let opened_symbol += count(splited_line, '[') - count(splited_line, ']')
@@ -51,6 +52,29 @@ function! GetElixirIndent(...)
let ind += &sw let ind += &sw
endif endif
" if line starts with pipeline
" and last line doesn't start with pipeline
if getline(v:lnum) =~ s:pipeline &&
\ getline(lnum) !~ s:pipeline
let ind += &sw
endif
" if last line starts with pipeline
" and currentline doesn't start with pipeline
if getline(lnum) =~ s:pipeline &&
\ getline(v:lnum) !~ s:pipeline
let ind -= &sw
endif
" if last line starts with pipeline
" and current line doesn't start with pipeline
" but last line started a block
if getline(lnum) =~ s:pipeline &&
\ getline(v:lnum) !~ s:pipeline &&
\ getline(lnum) =~ s:block_start
let ind += &sw
endif
if getline(v:lnum) =~ s:deindent_keywords if getline(v:lnum) =~ s:deindent_keywords
let bslnum = searchpair( '\<\%(' . s:block_start . '\):\@!\>', let bslnum = searchpair( '\<\%(' . s:block_start . '\):\@!\>',
\ '\<\%(' . s:block_middle . '\):\@!\>\zs', \ '\<\%(' . s:block_middle . '\):\@!\>\zs',

View File

@@ -130,12 +130,14 @@ call add(s:tags, 'rt')
call add(s:tags, 'ruby') call add(s:tags, 'ruby')
call add(s:tags, 'section') call add(s:tags, 'section')
call add(s:tags, 'summary') call add(s:tags, 'summary')
call add(s:tags, 'template')
call add(s:tags, 'time') call add(s:tags, 'time')
call add(s:tags, 'video') call add(s:tags, 'video')
call add(s:tags, 'bdi') call add(s:tags, 'bdi')
call add(s:tags, 'data') call add(s:tags, 'data')
" Web Component
call add(s:tags, 'template')
" Common inline used SVG elements " Common inline used SVG elements
call add(s:tags, 'clipPath') call add(s:tags, 'clipPath')
call add(s:tags, 'defs') call add(s:tags, 'defs')
@@ -167,6 +169,16 @@ call add(s:tags, 'tr')
call add(s:tags, 'th') call add(s:tags, 'th')
call add(s:tags, 'td') call add(s:tags, 'td')
let s:omittable = [
\ ['address', 'article', 'aside', 'blockquote', 'dir', 'div', 'dl', 'fieldset', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hr', 'menu', 'nav', 'ol', 'p', 'pre', 'section', 'table', 'ul'],
\ ['dt', 'dd'],
\ ['li'],
\ ['thead', 'tbody', 'tfoot'],
\ ['th', 'td'],
\]
if exists('g:html_exclude_tags') if exists('g:html_exclude_tags')
for tag in g:html_exclude_tags for tag in g:html_exclude_tags
call remove(s:tags, index(s:tags, tag)) call remove(s:tags, index(s:tags, tag))
@@ -331,11 +343,35 @@ fun! HtmlIndentGet(lnum)
let ind = ind - 1 let ind = ind - 1
endif endif
let lind = indent(lnum)
" for tags in s:omittable
" let tags_exp = '<\(' . join(tags, '\|') . '\)>'
" let close_tags_exp = '</\(' . join(tags, '\|') . '\)>'
" if getline(a:lnum) =~ tags_exp
" let block_start = search('^'.repeat(' ', lind + (&sw * ind - 1)).'\S' , 'bnW')
" let prev_tag = search(tags_exp, 'bW', block_start)
" let prev_closetag = search(close_tags_exp, 'W', a:lnum)
" if prev_tag && !prev_closetag
" let ind = ind - 1
" endif
" endif
" if getline(a:lnum) =~ '</\w\+>'
" let block_start = search('^'.repeat(' ', lind + (&sw * ind - 1)).'\S' , 'bnW')
" let prev_tag = search(tags_exp, 'bW', block_start)
" let prev_closetag = search(close_tags_exp, 'W', a:lnum)
" if prev_tag && !prev_closetag
" let ind = ind - 1
" endif
" endif
" endfor
if restore_ic == 0 if restore_ic == 0
setlocal noic setlocal noic
endif endif
return indent(lnum) + (&sw * ind) return lind + (&sw * ind)
endfun endfun
let &cpo = s:cpo_save let &cpo = s:cpo_save

View File

@@ -6,6 +6,36 @@
if exists("b:did_indent") if exists("b:did_indent")
finish finish
endif endif
let b:did_indent = 1
setlocal autoindent sw=2 et
setlocal indentexpr=GetLessIndent()
setlocal indentkeys=o,O,*<Return>,<:>,!^F
" Only define the function once.
if exists("*GetLessIndent")
finish
endif
let s:property = '^\s*:\|^\s*[[:alnum:]#{}-]\+\%(:\|\s*=\)'
function! GetLessIndent()
let lnum = prevnonblank(v:lnum-1)
let line = substitute(getline(lnum),'\s\+$','','')
let cline = substitute(substitute(getline(v:lnum),'\s\+$','',''),'^\s\+','','')
let lastcol = strlen(line)
let line = substitute(line,'^\s\+','','')
let indent = indent(lnum)
let cindent = indent(v:lnum)
if line !~ s:property && cline =~ s:property
return indent + &sw
"elseif line =~ s:property && cline !~ s:property
"return indent - &sw
else
return -1
endif
endfunction
" vim:set sw=2:
runtime! indent/css.vim

View File

@@ -13,12 +13,18 @@ if exists("b:did_indent")
endif endif
let b:did_indent = 1 let b:did_indent = 1
if !exists('g:ruby_indent_access_modifier_style')
" Possible values: "normal", "indent", "outdent"
let g:ruby_indent_access_modifier_style = 'normal'
endif
setlocal nosmartindent setlocal nosmartindent
" Now, set up our indentation expression and keys that trigger it. " Now, set up our indentation expression and keys that trigger it.
setlocal indentexpr=GetRubyIndent(v:lnum) setlocal indentexpr=GetRubyIndent(v:lnum)
setlocal indentkeys=0{,0},0),0],!^F,o,O,e setlocal indentkeys=0{,0},0),0],!^F,o,O,e,:
setlocal indentkeys+==end,=else,=elsif,=when,=ensure,=rescue,==begin,==end setlocal indentkeys+==end,=else,=elsif,=when,=ensure,=rescue,==begin,==end
setlocal indentkeys+==private,=protected,=public
" Only define the function once. " Only define the function once.
if exists("*GetRubyIndent") if exists("*GetRubyIndent")
@@ -34,7 +40,7 @@ set cpo&vim
" Regex of syntax group names that are or delimit strings/symbols or are comments. " Regex of syntax group names that are or delimit strings/symbols or are comments.
let s:syng_strcom = '\<ruby\%(Regexp\|RegexpDelimiter\|RegexpEscape' . let s:syng_strcom = '\<ruby\%(Regexp\|RegexpDelimiter\|RegexpEscape' .
\ '\|Symbol\|String\|StringDelimiter\|StringEscape\|ASCIICode' . \ '\|Symbol\|String\|StringDelimiter\|StringEscape\|ASCIICode' .
\ '\|Interpolation\|NoInterpolation\|Comment\|Documentation\)\>' \ '\|Interpolation\|InterpolationDelimiter\|NoInterpolation\|Comment\|Documentation\)\>'
" Regex of syntax group names that are strings. " Regex of syntax group names that are strings.
let s:syng_string = let s:syng_string =
@@ -92,6 +98,12 @@ let s:bracket_continuation_regex = '%\@<!\%([({[]\)\s*\%(#.*\)\=$'
" Regex that defines the first part of a splat pattern " Regex that defines the first part of a splat pattern
let s:splat_regex = '[[,(]\s*\*\s*\%(#.*\)\=$' let s:splat_regex = '[[,(]\s*\*\s*\%(#.*\)\=$'
" Regex that describes all indent access modifiers
let s:access_modifier_regex = '\C^\s*\%(private\|public\|protected\)\s*\%(#.*\)\=$'
" Regex that describes the indent access modifiers (excludes public)
let s:indent_access_modifier_regex = '\C^\s*\%(private\|protected\)\s*\%(#.*\)\=$'
" Regex that defines blocks. " Regex that defines blocks.
" "
" Note that there's a slight problem with this regex and s:continuation_regex. " Note that there's a slight problem with this regex and s:continuation_regex.
@@ -175,7 +187,7 @@ function s:GetMSL(lnum)
" something " something
" "
return msl return msl
elseif s:Match(line, s:non_bracket_continuation_regex) && elseif s:Match(lnum, s:non_bracket_continuation_regex) &&
\ s:Match(msl, s:non_bracket_continuation_regex) \ s:Match(msl, s:non_bracket_continuation_regex)
" If the current line is a non-bracket continuation and so is the " If the current line is a non-bracket continuation and so is the
" previous one, keep its indent and continue looking for an MSL. " previous one, keep its indent and continue looking for an MSL.
@@ -299,18 +311,39 @@ function s:ExtraBrackets(lnum)
endfunction endfunction
function s:Match(lnum, regex) function s:Match(lnum, regex)
let col = match(getline(a:lnum), '\C'.a:regex) + 1 let line = getline(a:lnum)
return col > 0 && !s:IsInStringOrComment(a:lnum, col) ? col : 0 let offset = match(line, '\C'.a:regex)
let col = offset + 1
while offset > -1 && s:IsInStringOrComment(a:lnum, col)
let offset = match(line, '\C'.a:regex, offset + 1)
let col = offset + 1
endwhile
if offset > -1
return col
else
return 0
endif
endfunction endfunction
function s:MatchLast(lnum, regex) " Locates the containing class/module's definition line, ignoring nested classes
let line = getline(a:lnum) " along the way.
let col = match(line, '.*\zs' . a:regex) "
while col != -1 && s:IsInStringOrComment(a:lnum, col) function! s:FindContainingClass()
let line = strpart(line, 0, col) let saved_position = getpos('.')
let col = match(line, '.*' . a:regex)
endwhile while searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW',
return col + 1 \ s:end_skip_expr) > 0
if expand('<cword>') =~# '\<class\|module\>'
let found_lnum = line('.')
call setpos('.', saved_position)
return found_lnum
endif
endif
call setpos('.', saved_position)
return 0
endfunction endfunction
" 3. GetRubyIndent Function {{{1 " 3. GetRubyIndent Function {{{1
@@ -333,6 +366,24 @@ function GetRubyIndent(...)
let line = getline(clnum) let line = getline(clnum)
let ind = -1 let ind = -1
" If this line is an access modifier keyword, align according to the closest
" class declaration.
if g:ruby_indent_access_modifier_style == 'indent'
if s:Match(clnum, s:access_modifier_regex)
let class_line = s:FindContainingClass()
if class_line > 0
return indent(class_line) + &sw
endif
endif
elseif g:ruby_indent_access_modifier_style == 'outdent'
if s:Match(clnum, s:access_modifier_regex)
let class_line = s:FindContainingClass()
if class_line > 0
return indent(class_line)
endif
endif
endif
" If we got a closing bracket on an empty line, find its match and indent " If we got a closing bracket on an empty line, find its match and indent
" according to it. For parentheses we indent to its column - 1, for the " according to it. For parentheses we indent to its column - 1, for the
" others we indent to the containing line's MSL's level. Return -1 if fail. " others we indent to the containing line's MSL's level. Return -1 if fail.
@@ -409,6 +460,20 @@ function GetRubyIndent(...)
let line = getline(lnum) let line = getline(lnum)
let ind = indent(lnum) let ind = indent(lnum)
if g:ruby_indent_access_modifier_style == 'indent'
" If the previous line was a private/protected keyword, add a
" level of indent.
if s:Match(lnum, s:indent_access_modifier_regex)
return indent(lnum) + &sw
endif
elseif g:ruby_indent_access_modifier_style == 'outdent'
" If the previous line was a private/protected/public keyword, add
" a level of indent, since the keyword has been out-dented.
if s:Match(lnum, s:access_modifier_regex)
return indent(lnum) + &sw
endif
endif
" If the previous line ended with a block opening, add a level of indent. " If the previous line ended with a block opening, add a level of indent.
if s:Match(lnum, s:block_regex) if s:Match(lnum, s:block_regex)
return indent(s:GetMSL(lnum)) + &sw return indent(s:GetMSL(lnum)) + &sw

View File

@@ -1,7 +1,7 @@
" Vim indent file " Vim indent file
" Language: Rust " Language: Rust
" Author: Chris Morgan <me@chrismorgan.info> " Author: Chris Morgan <me@chrismorgan.info>
" Last Change: 2013 Jul 10 " Last Change: 2013 Oct 29
" Only load this indent file when no other was loaded. " Only load this indent file when no other was loaded.
if exists("b:did_indent") if exists("b:did_indent")
@@ -104,8 +104,23 @@ function GetRustIndent(lnum)
let prevline = s:get_line_trimmed(prevnonblank(a:lnum - 1)) let prevline = s:get_line_trimmed(prevnonblank(a:lnum - 1))
if prevline[len(prevline) - 1] == "," if prevline[len(prevline) - 1] == ","
\ && s:get_line_trimmed(a:lnum) !~ "^\\s*[\\[\\]{}]" \ && s:get_line_trimmed(a:lnum) !~ "^\\s*[\\[\\]{}]"
\ && prevline !~ "^\\s*fn\\s"
" Oh ho! The previous line ended in a comma! I bet cindent will try to " Oh ho! The previous line ended in a comma! I bet cindent will try to
" take this too far... For now, let's use the previous line's indent " take this too far... For now, let's normally use the previous line's
" indent.
" One case where this doesn't work out is where *this* line contains
" square or curly brackets; then we normally *do* want to be indenting
" further.
"
" Another case where we don't want to is one like a function
" definition with arguments spread over multiple lines:
"
" fn foo(baz: Baz,
" baz: Baz) // <-- cindent gets this right by itself
"
" There are probably other cases where we don't want to do this as
" well. Add them as needed.
return GetRustIndent(a:lnum - 1) return GetRustIndent(a:lnum - 1)
endif endif

View File

@@ -1,7 +1,7 @@
" Vim syntax file " Vim syntax file
" Language: C " Language: C
" Maintainer: Bram Moolenaar <Bram@vim.org> " Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2013 Jun 06 " Last Change: 2013 Jul 05
" Quit when a (custom) syntax file was already loaded " Quit when a (custom) syntax file was already loaded
if exists("b:current_syntax") if exists("b:current_syntax")
@@ -11,6 +11,8 @@ endif
let s:cpo_save = &cpo let s:cpo_save = &cpo
set cpo&vim set cpo&vim
let s:ft = matchstr(&ft, '^\([^.]\)\+')
" A bunch of useful C keywords " A bunch of useful C keywords
syn keyword cStatement goto break return continue asm syn keyword cStatement goto break return continue asm
syn keyword cLabel case default syn keyword cLabel case default
@@ -110,7 +112,7 @@ endif
" But avoid matching <::. " But avoid matching <::.
syn cluster cParenGroup contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserLabel,cBitField,cOctalZero,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom syn cluster cParenGroup contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserLabel,cBitField,cOctalZero,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom
if exists("c_no_curly_error") if exists("c_no_curly_error")
if &filetype ==# 'cpp' && !exists("cpp_no_cpp11") if s:ft ==# 'cpp' && !exists("cpp_no_cpp11")
syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
" cCppParen: same as cParen but ends at end-of-line; used in cDefine " cCppParen: same as cParen but ends at end-of-line; used in cDefine
syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
@@ -124,7 +126,7 @@ if exists("c_no_curly_error")
syn match cErrInParen display contained "^[{}]\|^<%\|^%>" syn match cErrInParen display contained "^[{}]\|^<%\|^%>"
endif endif
elseif exists("c_no_bracket_error") elseif exists("c_no_bracket_error")
if &filetype ==# 'cpp' && !exists("cpp_no_cpp11") if s:ft ==# 'cpp' && !exists("cpp_no_cpp11")
syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
" cCppParen: same as cParen but ends at end-of-line; used in cDefine " cCppParen: same as cParen but ends at end-of-line; used in cDefine
syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
@@ -138,7 +140,7 @@ elseif exists("c_no_bracket_error")
syn match cErrInParen display contained "[{}]\|<%\|%>" syn match cErrInParen display contained "[{}]\|<%\|%>"
endif endif
else else
if &filetype ==# 'cpp' && !exists("cpp_no_cpp11") if s:ft ==# 'cpp' && !exists("cpp_no_cpp11")
syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell
" cCppParen: same as cParen but ends at end-of-line; used in cDefine " cCppParen: same as cParen but ends at end-of-line; used in cDefine
syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
@@ -158,7 +160,7 @@ else
syn match cErrInBracket display contained "[);{}]\|<%\|%>" syn match cErrInBracket display contained "[);{}]\|<%\|%>"
endif endif
if &filetype ==# 'c' || exists("cpp_no_cpp11") if s:ft ==# 'c' || exists("cpp_no_cpp11")
syn region cBadBlock keepend start="{" end="}" contained containedin=cParen,cBracket,cBadBlock transparent fold syn region cBadBlock keepend start="{" end="}" contained containedin=cParen,cBracket,cBadBlock transparent fold
endif endif
@@ -370,7 +372,7 @@ syn region cPreProc start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>
" Highlight User Labels " Highlight User Labels
syn cluster cMultiGroup contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString syn cluster cMultiGroup contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString
if &filetype ==# 'c' || exists("cpp_no_cpp11") if s:ft ==# 'c' || exists("cpp_no_cpp11")
syn region cMulti transparent start='?' skip='::' end=':' contains=ALLBUT,@cMultiGroup,@Spell syn region cMulti transparent start='?' skip='::' end=':' contains=ALLBUT,@cMultiGroup,@Spell
endif endif
" Avoid matching foo::bar() in C++ by requiring that the next char is not ':' " Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
@@ -457,6 +459,8 @@ hi def link cCppOut Comment
let b:current_syntax = "c" let b:current_syntax = "c"
unlet s:ft
let &cpo = s:cpo_save let &cpo = s:cpo_save
unlet s:cpo_save unlet s:cpo_save
" vim: ts=8 " vim: ts=8

View File

@@ -38,7 +38,7 @@ syntax match clojureKeyword "\v<:{1,2}%([^ \n\r\t()\[\]{}";@^`~\\%/]+/)*[^ \n\r\
syntax match clojureStringEscape "\v\\%([\\btnfr"]|u\x{4}|[0-3]\o{2}|\o{1,2})" contained syntax match clojureStringEscape "\v\\%([\\btnfr"]|u\x{4}|[0-3]\o{2}|\o{1,2})" contained
syntax region clojureString start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=clojureStringEscape syntax region clojureString start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=clojureStringEscape,@Spell
syntax match clojureCharacter "\\." syntax match clojureCharacter "\\."
syntax match clojureCharacter "\\o\%([0-3]\o\{2\}\|\o\{1,2\}\)" syntax match clojureCharacter "\\o\%([0-3]\o\{2\}\|\o\{1,2\}\)"

View File

@@ -15,9 +15,6 @@ silent! unlet b:current_syntax
" Highlight long strings. " Highlight long strings.
syntax sync fromstart syntax sync fromstart
" CoffeeScript identifiers can have dollar signs.
setlocal isident+=$
" These are `matches` instead of `keywords` because vim's highlighting " These are `matches` instead of `keywords` because vim's highlighting
" priority for keywords is higher than matches. This causes keywords to be " priority for keywords is higher than matches. This causes keywords to be
" highlighted inside matches, even if a match says it shouldn't contain them -- " highlighted inside matches, even if a match says it shouldn't contain them --
@@ -67,7 +64,7 @@ syn match coffeeSpecialVar /\<\%(this\|prototype\|arguments\)\>/ display
hi def link coffeeSpecialVar Special hi def link coffeeSpecialVar Special
" An @-variable " An @-variable
syn match coffeeSpecialIdent /@\%(\I\i*\)\?/ display syn match coffeeSpecialIdent /@\%(\%(\I\|\$\)\%(\i\|\$\)*\)\?/ display
hi def link coffeeSpecialIdent Identifier hi def link coffeeSpecialIdent Identifier
" A class-like name that starts with a capital letter " A class-like name that starts with a capital letter
@@ -95,15 +92,16 @@ syn region coffeeString start=/'/ skip=/\\\\\|\\'/ end=/'/
hi def link coffeeString String hi def link coffeeString String
" A integer, including a leading plus or minus " A integer, including a leading plus or minus
syn match coffeeNumber /\i\@<![-+]\?\d\+\%([eE][+-]\?\d\+\)\?/ display syn match coffeeNumber /\%(\i\|\$\)\@<![-+]\?\d\+\%([eE][+-]\?\d\+\)\?/ display
" A hex, binary, or octal number " A hex, binary, or octal number
syn match coffeeNumber /\<0[xX]\x\+\>/ display syn match coffeeNumber /\<0[xX]\x\+\>/ display
syn match coffeeNumber /\<0[bB][01]\+\>/ display syn match coffeeNumber /\<0[bB][01]\+\>/ display
syn match coffeeNumber /\<0[oO][0-7]\+\>/ display syn match coffeeNumber /\<0[oO][0-7]\+\>/ display
syn match coffeeNumber /\<\%(Infinity\|NaN\)\>/ display
hi def link coffeeNumber Number hi def link coffeeNumber Number
" A floating-point number, including a leading plus or minus " A floating-point number, including a leading plus or minus
syn match coffeeFloat /\i\@<![-+]\?\d*\.\@<!\.\d\+\%([eE][+-]\?\d\+\)\?/ syn match coffeeFloat /\%(\i\|\$\)\@<![-+]\?\d*\.\@<!\.\d\+\%([eE][+-]\?\d\+\)\?/
\ display \ display
hi def link coffeeFloat Float hi def link coffeeFloat Float
@@ -114,7 +112,7 @@ syn match coffeeReservedError /\<\%(case\|default\|function\|var\|void\|with\|co
hi def link coffeeReservedError Error hi def link coffeeReservedError Error
" A normal object assignment " A normal object assignment
syn match coffeeObjAssign /@\?\I\i*\s*\ze::\@!/ contains=@coffeeIdentifier display syn match coffeeObjAssign /@\?\%(\I\|\$\)\%(\i\|\$\)*\s*\ze::\@!/ contains=@coffeeIdentifier display
hi def link coffeeObjAssign Identifier hi def link coffeeObjAssign Identifier
syn keyword coffeeTodo TODO FIXME XXX contained syn keyword coffeeTodo TODO FIXME XXX contained
@@ -148,7 +146,7 @@ hi def link coffeeEscape SpecialChar
" A regex -- must not follow a parenthesis, number, or identifier, and must not " A regex -- must not follow a parenthesis, number, or identifier, and must not
" be followed by a number " be followed by a number
syn region coffeeRegex start=#\%(\%()\|\i\@<!\d\)\s*\|\i\)\@<!/=\@!\s\@!# syn region coffeeRegex start=#\%(\%()\|\%(\i\|\$\)\@<!\d\)\s*\|\i\)\@<!/=\@!\s\@!#
\ end=#/[gimy]\{,4}\d\@!# \ end=#/[gimy]\{,4}\d\@!#
\ oneline contains=@coffeeBasicString,coffeeRegexCharSet \ oneline contains=@coffeeBasicString,coffeeRegexCharSet
syn region coffeeRegexCharSet start=/\[/ end=/]/ contained syn region coffeeRegexCharSet start=/\[/ end=/]/ contained
@@ -182,11 +180,11 @@ syn match coffeeSemicolonError /;$/ display
hi def link coffeeSemicolonError Error hi def link coffeeSemicolonError Error
" Ignore reserved words in dot accesses. " Ignore reserved words in dot accesses.
syn match coffeeDotAccess /\.\@<!\.\s*\I\i*/he=s+1 contains=@coffeeIdentifier syn match coffeeDotAccess /\.\@<!\.\s*\%(\I\|\$\)\%(\i\|\$\)*/he=s+1 contains=@coffeeIdentifier
hi def link coffeeDotAccess coffeeExtendedOp hi def link coffeeDotAccess coffeeExtendedOp
" Ignore reserved words in prototype accesses. " Ignore reserved words in prototype accesses.
syn match coffeeProtoAccess /::\s*\I\i*/he=s+2 contains=@coffeeIdentifier syn match coffeeProtoAccess /::\s*\%(\I\|\$\)\%(\i\|\$\)*/he=s+2 contains=@coffeeIdentifier
hi def link coffeeProtoAccess coffeeExtendedOp hi def link coffeeProtoAccess coffeeExtendedOp
" This is required for interpolations to work. " This is required for interpolations to work.

View File

@@ -39,6 +39,9 @@ if !exists("cpp_no_cpp11")
syn keyword cppExceptions noexcept syn keyword cppExceptions noexcept
syn keyword cppStorageClass constexpr decltype syn keyword cppStorageClass constexpr decltype
syn keyword cppConstant nullptr syn keyword cppConstant nullptr
" A C++11 raw-string literal. It tries to follow 2.14.5 and 2.14.5.2 of the
" standard.
syn region cppRawString matchgroup=cppRawDelim start=+\%(u8\=\|[LU]\)\=R"\z(\%([ ()\\\d9-\d12]\@![\d0-\d127]\)\{,16}\)(+ end=+)\z1"+ contains=@Spell
endif endif
" The minimum and maximum operators in GNU C++ " The minimum and maximum operators in GNU C++
@@ -62,6 +65,8 @@ if version >= 508 || !exists("did_cpp_syntax_inits")
HiLink cppStructure Structure HiLink cppStructure Structure
HiLink cppBoolean Boolean HiLink cppBoolean Boolean
HiLink cppConstant Constant HiLink cppConstant Constant
HiLink cppRawDelim cFormat
HiLink cppRawString String
delcommand HiLink delcommand HiLink
endif endif

View File

@@ -18,10 +18,10 @@ syn keyword elixirTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained
syn keyword elixirKeyword is_atom is_binary is_bitstring is_boolean is_float is_function is_integer is_list is_number is_pid is_port is_record is_reference is_tuple is_exception syn keyword elixirKeyword is_atom is_binary is_bitstring is_boolean is_float is_function is_integer is_list is_number is_pid is_port is_record is_reference is_tuple is_exception
syn keyword elixirKeyword case cond bc lc inlist inbits if unless try receive function syn keyword elixirKeyword case cond bc lc inlist inbits if unless try receive function
syn keyword elixirKeyword exit raise throw after rescue catch else syn keyword elixirKeyword exit raise throw after rescue catch else
syn keyword elixirKeyword use quote unquote super alias syn keyword elixirKeyword quote unquote super
syn match elixirKeyword '\<\%(->\)\>\s*' syn match elixirKeyword '\<\%(->\)\>\s*'
syn keyword elixirInclude import require syn keyword elixirInclude import require alias use
syn keyword elixirOperator and not or when xor in syn keyword elixirOperator and not or when xor in
syn match elixirOperator '%=\|\*=\|\*\*=\|+=\|-=\|\^=\|||=' syn match elixirOperator '%=\|\*=\|\*\*=\|+=\|-=\|\^=\|||='

View File

@@ -7,7 +7,7 @@ if exists("b:current_syntax")
endif endif
syn case match syn case match
syn match godocTitle "^\([A-Z]*\)$" syn match godocTitle "^\([A-Z][A-Z ]*\)$"
command -nargs=+ HiLink hi def link <args> command -nargs=+ HiLink hi def link <args>

View File

@@ -19,29 +19,39 @@ ru! syntax/html.vim
unlet b:current_syntax unlet b:current_syntax
syn region hbsInside start=/{{/ end=/}}/ keepend
syn keyword hbsTodo TODO FIXME XXX contained syn keyword hbsTodo TODO FIXME XXX contained
syn match hbsError /}}}\?/ syn match hbsError /}}}\?/
syn match hbsInsideError /{{[{#<>=!\/]\?/ containedin=@hbsInside syn match hbsInsideError /{{[{#<>=!\/]\?/ contained containedin=@hbsInside
syn cluster htmlHbsContainer add=htmlHead,htmlTitle,htmlString,htmlH1,htmlH2,htmlH3,htmlH4,htmlH5,htmlH6 syn match hbsHandlebars "{{\|}}" contained containedin=hbsInside
syn region hbsInside start=/{{/ end=/}}/ keepend transparent containedin=@htmlHbsContainer syn match hbsUnescape "{{{\|}}}" contained containedin=hbsInside extend
syn match hbsOperators "=\|\.\|/" contained containedin=hbsInside
syn match hbsHandlebars "{{\|}}" containedin=hbsInside syn region hbsSection start="{{[#/]"lc=2 end=/}}/me=e-2 contained containedin=hbsInside
syn match hbsUnescape "{{{\|}}}" containedin=hbsInside syn region hbsPartial start=/{{[<>]/lc=2 end=/}}/me=e-2 contained containedin=hbsInside
syn match hbsOperators "=\|\.\|/" containedin=hbsInside syn region hbsMarkerSet start=/{{=/lc=2 end=/=}}/me=e-2 contained containedin=hbsInside
syn region hbsSection start="{{[#/]"lc=2 end=/}}/me=e-2 containedin=hbsInside syn region hbsComment start=/{{!/rs=s+2 end=/}}/re=e-2 contained containedin=hbsInside contains=hbsTodo,Todo
syn region hbsPartial start=/{{[<>]/lc=2 end=/}}/me=e-2 containedin=hbsInside syn region hbsBlockComment start=/{{!--/rs=s+2 end=/--}}/re=e-2 contained containedin=hbsInside contains=hbsTodo,Todo extend
syn region hbsMarkerSet start=/{{=/lc=2 end=/=}}/me=e-2 containedin=hbsInside syn region hbsQString start=/'/ skip=/\\'/ end=/'/ contained containedin=hbsInside
syn region hbsDQString start=/"/ skip=/\\"/ end=/"/ contained containedin=hbsInside
syn region hbsComment start=/{{!/rs=s+2 end=/}}/re=e-2 containedin=htmlHead contains=hbsTodo,Todo syn match hbsConditionals "\([/#]\(if\|unless\)\|else\)" contained containedin=hbsInside
syn region hbsBlockComment start=/{{!--/rs=s+2 end=/--}}/re=e-2 containedin=htmlHead contains=hbsTodo,Todo syn match hbsHelpers "[/#]\(with\|each\)" contained containedin=hbsInside
syn region hbsQString start=/'/ skip=/\\'/ end=/'/ containedin=hbsInside
syn region hbsDQString start=/"/ skip=/\\"/ end=/"/ containedin=hbsInside
syn match hbsConditionals "\([/#]\(if\|unless\)\|else\)" containedin=hbsInside syn cluster allHbsItems add=hbsTodo,hbsError,hbsInsideError,hbsInside,hbsHandlebars,
syn match hbsHelpers "[/#]\(with\|each\)" containedin=hbsInside \ hbsUnescape,hbsOperators,hbsSection,hbsPartial,hbsMarkerSet,
\ hbsComment,hbsBlockComment,hbsQString,hbsDQString,hbsConditionals,
\ hbsHelpers,hbsPartial,hbsMarkerSet,hbsComment,hbsBlockComment,
\ hbsQString,hbsDQString,hbsConditionals,hbsHelpers
syn cluster htmlAdditional add=htmlTag,htmlEndTag,htmlTagName,htmlSpecialChar
syn region hbsScriptTemplate start=+<script [^>]*type *=[^>]*text/x-handlebars-template[^>]*>+
\ end=+</script>+me=s-1 keepend contains=@htmlHbsContainer,@allHbsItems,@htmlAdditional
" Define the default highlighting. " Define the default highlighting.

View File

@@ -21,7 +21,8 @@
syn keyword htmlTagName contained article aside audio canvas command syn keyword htmlTagName contained article aside audio canvas command
syn keyword htmlTagName contained datalist details dialog embed figcaption figure footer syn keyword htmlTagName contained datalist details dialog embed figcaption figure footer
syn keyword htmlTagName contained header hgroup keygen main mark meter menu nav output syn keyword htmlTagName contained header hgroup keygen main mark meter menu nav output
syn keyword htmlTagName contained progress ruby rt rp section source summary template time track video data syn keyword htmlTagName contained progress ruby rt rp section source summary time track video data
syn keyword htmlTagName contained template content shadow
syn keyword htmlTagName contained wbr bdi syn keyword htmlTagName contained wbr bdi
" SVG tags " SVG tags
@@ -40,10 +41,12 @@ syn keyword htmlTagName contained linearGradient marker mask pattern radialGradi
syn keyword htmlTagName contained missing-glyph mpath syn keyword htmlTagName contained missing-glyph mpath
syn keyword htmlTagName contained text textPath tref tspan vkern syn keyword htmlTagName contained text textPath tref tspan vkern
syn match htmlTagName contained "\<[a-z_]\+\(\-[a-z_]\+\)\+\>"
" HTML 5 arguments " HTML 5 arguments
" Core Attributes " Core Attributes
syn keyword htmlArg contained accesskey class contenteditable contextmenu dir syn keyword htmlArg contained accesskey class contenteditable contextmenu dir
syn keyword htmlArg contained draggable hidden id lang spellcheck style tabindex title translate syn keyword htmlArg contained draggable hidden id is lang spellcheck style tabindex title translate
" Event-handler Attributes " Event-handler Attributes
syn keyword htmlArg contained onabort onblur oncanplay oncanplaythrough onchange syn keyword htmlArg contained onabort onblur oncanplay oncanplaythrough onchange
syn keyword htmlArg contained onclick oncontextmenu ondblclick ondrag ondragend ondragenter ondragleave ondragover syn keyword htmlArg contained onclick oncontextmenu ondblclick ondrag ondragend ondragenter ondragleave ondragover
@@ -69,6 +72,8 @@ syn keyword htmlArg contained required placeholder
syn keyword htmlArg contained label icon open datetime pubdate syn keyword htmlArg contained label icon open datetime pubdate
" <script> " <script>
syn keyword htmlArg contained async syn keyword htmlArg contained async
" <content>
syn keyword htmlArg contained select
" Custom Data Attributes " Custom Data Attributes
" http://dev.w3.org/html5/spec/elements.html#embedding-custom-non-visible-data " http://dev.w3.org/html5/spec/elements.html#embedding-custom-non-visible-data

View File

@@ -35,7 +35,7 @@ syn match lessClass "[[:alnum:]_-]\+" contained
" string functions " string functions
syn keyword lessFunction escape e % containedin=cssDefinition contained syn keyword lessFunction escape e % containedin=cssDefinition contained
" misc functions " misc functions
syn keyword lessFunction color unit containedin=cssDefinition contained syn keyword lessFunction unit containedin=cssDefinition contained
" math functions " math functions
syn keyword lessFunction ceil floor percentage round containedin=cssDefinition contained syn keyword lessFunction ceil floor percentage round containedin=cssDefinition contained
" color definition " color definition

109
syntax/mason.vim Normal file
View File

@@ -0,0 +1,109 @@
" Vim syntax file
" Language: Mason (Perl embedded in HTML)
" Maintainer: vim-perl <vim-perl@googlegroups.com>
" Homepage: http://github.com/vim-perl/vim-perl/tree/master
" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
" Last Change: {{LAST_CHANGE}}
" Contributors: Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
" Andrew Smith <andrewdsmith@yahoo.com>
"
" TODO:
" - Fix <%text> blocks to show HTML tags but ignore Mason tags.
"
" Clear previous syntax settings unless this is v6 or above, in which case just
" exit without doing anything.
"
if version < 600
syn clear
elseif exists("b:current_syntax")
finish
endif
" The HTML syntax file included below uses this variable.
"
if !exists("main_syntax")
let main_syntax = 'mason'
endif
" First pull in the HTML syntax.
"
if version < 600
so <sfile>:p:h/html.vim
else
runtime! syntax/html.vim
unlet b:current_syntax
endif
syn cluster htmlPreproc add=@masonTop
" Now pull in the Perl syntax.
"
if version < 600
syn include @perlTop <sfile>:p:h/perl.vim
unlet b:current_syntax
syn include @podTop <sfile>:p:h/pod.vim
else
syn include @perlTop syntax/perl.vim
unlet b:current_syntax
syn include @podTop syntax/pod.vim
endif
" It's hard to reduce down to the correct sub-set of Perl to highlight in some
" of these cases so I've taken the safe option of just using perlTop in all of
" them. If you have any suggestions, please let me know.
"
syn region masonPod start="^=[a-z]" end="^=cut" keepend contained contains=@podTop
syn cluster perlTop remove=perlBraces
syn region masonLine matchgroup=Delimiter start="^%" end="$" keepend contains=@perlTop
syn region masonPerlComment start="#" end="\%(%>\)\@=\|$" contained contains=perlTodo,@Spell
syn region masonExpr matchgroup=Delimiter start="<%" end="%>" contains=@perlTop,masonPerlComment
syn region masonPerl matchgroup=Delimiter start="<%perl>" end="</%perl>" contains=masonPod,@perlTop
syn region masonComp keepend matchgroup=Delimiter start="<&\s*\%([-._/[:alnum:]]\+:\)\?[-._/[:alnum:]]*" end="&>" contains=@perlTop
syn region masonComp keepend matchgroup=Delimiter skipnl start="<&|\s*\%([-._/[:alnum:]]\+:\)\?[-._/[:alnum:]]*" end="&>" contains=@perlTop nextgroup=masonCompContent
syn region masonCompContent matchgroup=Delimiter start="" end="</&>" contained contains=@masonTop
syn region masonArgs matchgroup=Delimiter start="<%args>" end="</%args>" contains=masonPod,@perlTop
syn region masonInit matchgroup=Delimiter start="<%init>" end="</%init>" contains=masonPod,@perlTop
syn region masonCleanup matchgroup=Delimiter start="<%cleanup>" end="</%cleanup>" contains=masonPod,@perlTop
syn region masonOnce matchgroup=Delimiter start="<%once>" end="</%once>" contains=masonPod,@perlTop
syn region masonClass matchgroup=Delimiter start="<%class>" end="</%class>" contains=masonPod,@perlTop
syn region masonShared matchgroup=Delimiter start="<%shared>" end="</%shared>" contains=masonPod,@perlTop
syn region masonDef matchgroup=Delimiter start="<%def\s*[-._/[:alnum:]]\+\s*>" end="</%def>" contains=@htmlTop
syn region masonMethod matchgroup=Delimiter start="<%method\s*[-._/[:alnum:]]\+\s*>" end="</%method>" contains=@htmlTop
syn region masonFlags matchgroup=Delimiter start="<%flags>" end="</%flags>" contains=masonPod,@perlTop
syn region masonAttr matchgroup=Delimiter start="<%attr>" end="</%attr>" contains=masonPod,@perlTop
syn region masonFilter matchgroup=Delimiter start="<%filter>" end="</%filter>" contains=masonPod,@perlTop
syn region masonDoc matchgroup=Delimiter start="<%doc>" end="</%doc>"
syn region masonText matchgroup=Delimiter start="<%text>" end="</%text>"
syn cluster masonTop contains=masonLine,masonExpr,masonPerl,masonComp,masonArgs,masonInit,masonCleanup,masonOnce,masonShared,masonDef,masonMethod,masonFlags,masonAttr,masonFilter,masonDoc,masonText
" Set up default highlighting. Almost all of this is done in the included
" syntax files.
"
if version >= 508 || !exists("did_mason_syn_inits")
if version < 508
let did_mason_syn_inits = 1
com -nargs=+ HiLink hi link <args>
else
com -nargs=+ HiLink hi def link <args>
endif
HiLink masonDoc Comment
HiLink masonPod Comment
HiLink masonPerlComment perlComment
delc HiLink
endif
let b:current_syntax = "mason"
if main_syntax == 'mason'
unlet main_syntax
endif

View File

@@ -108,7 +108,7 @@ syn match perlStatementMisc "\<\%(warn\|format\|formline\|reset\|scalar\|protot
syn keyword perlTodo TODO TODO: TBD TBD: FIXME FIXME: XXX XXX: NOTE NOTE: contained syn keyword perlTodo TODO TODO: TBD TBD: FIXME FIXME: XXX XXX: NOTE NOTE: contained
syn region perlStatementIndirObjWrap matchgroup=perlStatementIndirObj start="\<\%(map\|grep\|sort\|printf\=\|say\|system\|exec\)\>\s*{" end="}" contains=@perlTop,perlBraces extend syn region perlStatementIndirObjWrap matchgroup=perlStatementIndirObj start="\%(\<\%(map\|grep\|sort\|printf\=\|say\|system\|exec\)\>\s*\)\@<={" end="}" transparent extend
syn match perlLabel "^\s*\h\w*\s*::\@!\%(\<v\d\+\s*:\)\@<!" syn match perlLabel "^\s*\h\w*\s*::\@!\%(\<v\d\+\s*:\)\@<!"
@@ -125,7 +125,7 @@ syn match perlLabel "^\s*\h\w*\s*::\@!\%(\<v\d\+\s*:\)\@<!"
" Special variables first ($^A, ...) and ($|, $', ...) " Special variables first ($^A, ...) and ($|, $', ...)
syn match perlVarPlain "$^[ACDEFHILMNOPRSTVWX]\=" syn match perlVarPlain "$^[ACDEFHILMNOPRSTVWX]\="
syn match perlVarPlain "$[\\\"\[\]'&`+*.,;=%~!?@#$<>(-]" syn match perlVarPlain "$[\\\"\[\]'&`+*.,;=%~!?@#$<>(-]"
syn match perlVarPlain "%+" syn match perlVarPlain "@[-+]"
syn match perlVarPlain "$\%(0\|[1-9]\d*\)" syn match perlVarPlain "$\%(0\|[1-9]\d*\)"
" Same as above, but avoids confusion in $::foo (equivalent to $main::foo) " Same as above, but avoids confusion in $::foo (equivalent to $main::foo)
syn match perlVarPlain "$::\@!" syn match perlVarPlain "$::\@!"
@@ -152,6 +152,8 @@ else
syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod syn match perlFunctionName "&\$*\%(\I\i*\)\=\%(\%(::\|'\)\I\i*\)*\%(::\|\i\@<=\)" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
endif endif
syn match perlVarPlain2 "%[-+]"
if !exists("perl_no_extended_vars") if !exists("perl_no_extended_vars")
syn cluster perlExpr contains=perlStatementIndirObjWrap,perlStatementScalar,perlStatementRegexp,perlStatementNumeric,perlStatementList,perlStatementHash,perlStatementFiles,perlStatementTime,perlStatementMisc,perlVarPlain,perlVarPlain2,perlVarNotInMatches,perlVarSlash,perlVarBlock,perlVarBlock2,perlShellCommand,perlFloat,perlNumber,perlStringUnexpanded,perlString,perlQQ,perlArrow,perlBraces syn cluster perlExpr contains=perlStatementIndirObjWrap,perlStatementScalar,perlStatementRegexp,perlStatementNumeric,perlStatementList,perlStatementHash,perlStatementFiles,perlStatementTime,perlStatementMisc,perlVarPlain,perlVarPlain2,perlVarNotInMatches,perlVarSlash,perlVarBlock,perlVarBlock2,perlShellCommand,perlFloat,perlNumber,perlStringUnexpanded,perlString,perlQQ,perlArrow,perlBraces
syn region perlArrow matchgroup=perlArrow start="->\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained syn region perlArrow matchgroup=perlArrow start="->\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
@@ -246,11 +248,9 @@ syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'[msixpodualgc]*+ contains=@perlInterpSQ keepend extend syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'[msixpodualgc]*+ contains=@perlInterpSQ keepend extend
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/[msixpodualgc]*+ contains=@perlInterpSlash keepend extend syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/[msixpodualgc]*+ contains=@perlInterpSlash keepend extend
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)[msixpodualgc]*+ contains=@perlInterpMatch,perlParensDQ keepend extend syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)[msixpodualgc]*+ contains=@perlInterpMatch,perlParensDQ keepend extend
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}[msixpodualgc]*+ contains=@perlInterpMatch,perlBracesDQ extend
" A special case for m{}, m<> and m[] which allows for comments and extra whitespace in the pattern
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}[msixpodualgc]*+ contains=@perlInterpMatch,perlComment,perlBracesDQ extend
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>[msixpodualgc]*+ contains=@perlInterpMatch,perlAnglesDQ keepend extend syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>[msixpodualgc]*+ contains=@perlInterpMatch,perlAnglesDQ keepend extend
syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\][msixpodualgc]*+ contains=@perlInterpMatch,perlComment,perlBracketsDQ keepend extend syn region perlMatch matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\][msixpodualgc]*+ contains=@perlInterpMatch,perlBracketsDQ keepend extend
" Below some hacks to recognise the // variant. This is virtually impossible to catch in all " Below some hacks to recognise the // variant. This is virtually impossible to catch in all
" cases as the / is used in so many other ways, but these should be the most obvious ones. " cases as the / is used in so many other ways, but these should be the most obvious ones.
@@ -371,13 +371,6 @@ syn match perlSubName +\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\_s*\|+ contained nextgr
syn match perlFunction +\<sub\>\_s*+ nextgroup=perlSubName syn match perlFunction +\<sub\>\_s*+ nextgroup=perlSubName
if !exists("perl_no_scope_in_variables")
syn match perlFunctionPRef "\h\w*::" contained
syn match perlFunctionName "\h\w*[^:]" contained
else
syn match perlFunctionName "\h[[:alnum:]_:]*" contained
endif
" The => operator forces a bareword to the left of it to be interpreted as " The => operator forces a bareword to the left of it to be interpreted as
" a string " a string
syn match perlString "\I\@<!-\?\I\i*\%(\s*=>\)\@=" syn match perlString "\I\@<!-\?\I\i*\%(\s*=>\)\@="

155
syntax/rhelp.vim Normal file
View File

@@ -0,0 +1,155 @@
" Vim syntax file
" Language: R Help File
" Maintainer: Johannes Ranke <jranke@uni-bremen.de>
" Last Change: 2006 Apr 24
" Version: 0.7
" SVN: $Id: rhelp.vim 57 2006-04-24 15:52:13Z ranke $
" Remarks: - Now includes R syntax highlighting in the appropriate
" sections if an r.vim file is in the same directory or in the
" default debian location.
" - There is no Latex markup in equations
" Version Clears: {{{1
" For version 5.x: Clear all syntax items
" For version 6.x and 7.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
syn case match
" R help identifiers {{{
syn region rhelpIdentifier matchgroup=rhelpSection start="\\name{" end="}"
syn region rhelpIdentifier matchgroup=rhelpSection start="\\alias{" end="}"
syn region rhelpIdentifier matchgroup=rhelpSection start="\\pkg{" end="}"
syn region rhelpIdentifier matchgroup=rhelpSection start="\\item{" end="}" contained contains=rhelpDots
syn region rhelpIdentifier matchgroup=rhelpSection start="\\method{" end=/}/ contained
" Highlighting of R code using an existing r.vim syntax file if available {{{1
syn include @R syntax/r.vim
syn match rhelpDots "\\dots" containedin=@R
syn region rhelpRcode matchgroup=Delimiter start="\\examples{" matchgroup=Delimiter transparent end=/}/ contains=@R,rhelpSection
syn region rhelpRcode matchgroup=Delimiter start="\\usage{" matchgroup=Delimiter transparent end=/}/ contains=@R,rhelpIdentifier,rhelpS4method
syn region rhelpRcode matchgroup=Delimiter start="\\synopsis{" matchgroup=Delimiter transparent end=/}/ contains=@R
syn region rhelpRcode matchgroup=Delimiter start="\\special{" matchgroup=Delimiter transparent end=/}/ contains=@R contained
syn region rhelpRcode matchgroup=Delimiter start="\\code{" matchgroup=Delimiter transparent end=/}/ contains=@R,rhelpLink contained
syn region rhelpS4method matchgroup=Delimiter start="\\S4method{.*}(" matchgroup=Delimiter transparent end=/)/ contains=@R,rhelpDots contained
" Strings {{{1
syn region rhelpString start=/"/ end=/"/
" Special characters ( \$ \& \% \# \{ \} \_) {{{1
syn match rhelpSpecialChar "\\[$&%#{}_]"
" Special Delimiters {{{1
syn match rhelpDelimiter "\\cr"
syn match rhelpDelimiter "\\tab "
" Keywords {{{1
syn match rhelpKeyword "\\R"
syn match rhelpKeyword "\\ldots"
syn match rhelpKeyword "--"
syn match rhelpKeyword "---"
syn match rhelpKeyword "<"
syn match rhelpKeyword ">"
" Links {{{1
syn region rhelpLink matchgroup=rhelpSection start="\\link{" end="}" contained keepend
syn region rhelpLink matchgroup=rhelpSection start="\\link\[.*\]{" end="}" contained keepend
syn region rhelpLink matchgroup=rhelpSection start="\\linkS4class{" end="}" contained keepend
" Type Styles {{{1
syn match rhelpType "\\emph\>"
syn match rhelpType "\\strong\>"
syn match rhelpType "\\bold\>"
syn match rhelpType "\\sQuote\>"
syn match rhelpType "\\dQuote\>"
syn match rhelpType "\\preformatted\>"
syn match rhelpType "\\kbd\>"
syn match rhelpType "\\samp\>"
syn match rhelpType "\\eqn\>"
syn match rhelpType "\\deqn\>"
syn match rhelpType "\\file\>"
syn match rhelpType "\\email\>"
syn match rhelpType "\\url\>"
syn match rhelpType "\\var\>"
syn match rhelpType "\\env\>"
syn match rhelpType "\\option\>"
syn match rhelpType "\\command\>"
syn match rhelpType "\\dfn\>"
syn match rhelpType "\\cite\>"
syn match rhelpType "\\acronym\>"
" rhelp sections {{{1
syn match rhelpSection "\\encoding\>"
syn match rhelpSection "\\title\>"
syn match rhelpSection "\\description\>"
syn match rhelpSection "\\concept\>"
syn match rhelpSection "\\arguments\>"
syn match rhelpSection "\\details\>"
syn match rhelpSection "\\value\>"
syn match rhelpSection "\\references\>"
syn match rhelpSection "\\note\>"
syn match rhelpSection "\\author\>"
syn match rhelpSection "\\seealso\>"
syn match rhelpSection "\\keyword\>"
syn match rhelpSection "\\docType\>"
syn match rhelpSection "\\format\>"
syn match rhelpSection "\\source\>"
syn match rhelpSection "\\itemize\>"
syn match rhelpSection "\\describe\>"
syn match rhelpSection "\\enumerate\>"
syn match rhelpSection "\\item "
syn match rhelpSection "\\item$"
syn match rhelpSection "\\tabular{[lcr]*}"
syn match rhelpSection "\\dontrun\>"
syn match rhelpSection "\\dontshow\>"
syn match rhelpSection "\\testonly\>"
" Freely named Sections {{{1
syn region rhelpFreesec matchgroup=Delimiter start="\\section{" matchgroup=Delimiter transparent end=/}/
" R help file comments {{{1
syn match rhelpComment /%.*$/ contained
" Error {{{1
syn region rhelpRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rhelpError,rhelpBraceError,rhelpCurlyError
syn region rhelpRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rhelpError,rhelpBraceError,rhelpParenError
syn region rhelpRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rhelpError,rhelpCurlyError,rhelpParenError
syn match rhelpError /[)\]}]/
syn match rhelpBraceError /[)}]/ contained
syn match rhelpCurlyError /[)\]]/ contained
syn match rhelpParenError /[\]}]/ contained
" Define the default highlighting {{{1
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_rhelp_syntax_inits")
if version < 508
let did_rhelp_syntax_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
HiLink rhelpIdentifier Identifier
HiLink rhelpString String
HiLink rhelpKeyword Keyword
HiLink rhelpDots Keyword
HiLink rhelpLink Underlined
HiLink rhelpType Type
HiLink rhelpSection PreCondit
HiLink rhelpError Error
HiLink rhelpBraceError Error
HiLink rhelpCurlyError Error
HiLink rhelpParenError Error
HiLink rhelpDelimiter Delimiter
HiLink rhelpComment Comment
HiLink rhelpRComment Comment
HiLink rhelpSpecialChar SpecialChar
delcommand HiLink
endif
let b:current_syntax = "rhelp"
" vim: foldmethod=marker:

56
syntax/rnoweb.vim Normal file
View File

@@ -0,0 +1,56 @@
" Vim syntax file
" Language: R noweb Files
" Maintainer: Johannes Ranke <jranke@uni-bremen.de>
" Last Change: 2007 M<>r 30
" Version: 0.8
" SVN: $Id: rnoweb.vim 69 2007-03-30 08:55:36Z ranke $
" Remarks: - This file is inspired by the proposal of
" Fernando Henrique Ferraz Pereira da Rosa <feferraz@ime.usp.br>
" http://www.ime.usp.br/~feferraz/en/sweavevim.html
"
" Version Clears: {{{1
" For version 5.x: Clear all syntax items
" For version 6.x and 7.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
syn case match
" Extension of Tex clusters {{{1
runtime syntax/tex.vim
unlet b:current_syntax
syn cluster texMatchGroup add=@rnoweb
syn cluster texEnvGroup add=@rnoweb
syn cluster texFoldGroup add=@rnoweb
syn cluster texDocGroup add=@rnoweb
syn cluster texPartGroup add=@rnoweb
syn cluster texChapterGroup add=@rnoweb
syn cluster texSectionGroup add=@rnoweb
syn cluster texSubSectionGroup add=@rnoweb
syn cluster texSubSubSectionGroup add=@rnoweb
syn cluster texParaGroup add=@rnoweb
" Highlighting of R code using an existing r.vim syntax file if available {{{1
syn include @rnowebR syntax/r.vim
syn region rnowebChunk matchgroup=rnowebDelimiter start="^<<.*>>=" matchgroup=rnowebDelimiter end="^@" contains=@rnowebR,rnowebChunkReference,rnowebChunk fold keepend
syn match rnowebChunkReference "^<<.*>>$" contained
syn region rnowebSexpr matchgroup=Delimiter start="\\Sexpr{" matchgroup=Delimiter end="}" contains=@rnowebR
" Sweave options command {{{1
syn region rnowebSweaveopts matchgroup=Delimiter start="\\SweaveOpts{" matchgroup=Delimiter end="}"
" rnoweb Cluster {{{1
syn cluster rnoweb contains=rnowebChunk,rnowebChunkReference,rnowebDelimiter,rnowebSexpr,rnowebSweaveopts
" Highlighting {{{1
hi def link rnowebDelimiter Delimiter
hi def link rnowebSweaveOpts Statement
hi def link rnowebChunkReference Delimiter
let b:current_syntax = "rnoweb"
" vim: foldmethod=marker:

View File

@@ -3,7 +3,7 @@
" Maintainer: Patrick Walton <pcwalton@mozilla.com> " Maintainer: Patrick Walton <pcwalton@mozilla.com>
" Maintainer: Ben Blum <bblum@cs.cmu.edu> " Maintainer: Ben Blum <bblum@cs.cmu.edu>
" Maintainer: Chris Morgan <me@chrismorgan.info> " Maintainer: Chris Morgan <me@chrismorgan.info>
" Last Change: 2013 Sep 4 " Last Change: 2013 Dec 10
if version < 600 if version < 600
syntax clear syntax clear
@@ -18,23 +18,24 @@ syn keyword rustOperator as
syn match rustAssert "\<assert\(\w\)*!" contained syn match rustAssert "\<assert\(\w\)*!" contained
syn match rustFail "\<fail\(\w\)*!" contained syn match rustFail "\<fail\(\w\)*!" contained
syn keyword rustKeyword break do extern syn keyword rustKeyword break continue do extern
syn keyword rustKeyword in if impl let log syn keyword rustKeyword for in if impl let
syn keyword rustKeyword for impl let log syn keyword rustKeyword loop once priv pub
syn keyword rustKeyword loop mod once priv pub
syn keyword rustKeyword return syn keyword rustKeyword return
syn keyword rustKeyword unsafe while syn keyword rustKeyword unsafe while
syn keyword rustKeyword use nextgroup=rustModPath skipwhite syn keyword rustKeyword use nextgroup=rustModPath skipwhite
" FIXME: Scoped impl's name is also fallen in this category " FIXME: Scoped impl's name is also fallen in this category
syn keyword rustKeyword mod trait struct enum type nextgroup=rustIdentifier skipwhite syn keyword rustKeyword mod trait struct enum type nextgroup=rustIdentifier skipwhite
syn keyword rustKeyword fn nextgroup=rustFuncName skipwhite syn keyword rustKeyword fn nextgroup=rustFuncName skipwhite
syn keyword rustStorage const mut ref static syn keyword rustKeyword proc
syn keyword rustStorage mut ref static
syn keyword rustObsoleteStorage const
syn match rustIdentifier contains=rustIdentifierPrime "\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" display contained syn match rustIdentifier contains=rustIdentifierPrime "\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" display contained
syn match rustFuncName "\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" display contained syn match rustFuncName "\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" display contained
" Reserved (but not yet used) keywords {{{2 " Reserved (but not yet used) keywords {{{2
syn keyword rustKeyword alignof be offsetof pure sizeof typeof yield syn keyword rustReservedKeyword alignof be offsetof pure sizeof typeof yield
" Built-in types {{{2 " Built-in types {{{2
syn keyword rustType int uint float char bool u8 u16 u32 u64 f32 syn keyword rustType int uint float char bool u8 u16 u32 u64 f32
@@ -61,48 +62,49 @@ syn keyword rustEnumVariant Ok Err
" Functions {{{3 " Functions {{{3
"syn keyword rustFunction print println "syn keyword rustFunction print println
"syn keyword rustFunction range "syn keyword rustFunction range
"syn keyword rustFunction from_str
" Types and traits {{{3 " Types and traits {{{3
syn keyword rustTrait Any AnyOwnExt AnyRefExt AnyMutRefExt
syn keyword rustTrait Ascii AsciiCast OwnedAsciiCast AsciiStr ToBytesConsume
syn keyword rustTrait Bool
syn keyword rustTrait ToCStr syn keyword rustTrait ToCStr
syn keyword rustTrait Char
syn keyword rustTrait Clone DeepClone syn keyword rustTrait Clone DeepClone
syn keyword rustTrait Eq ApproxEq Ord TotalEq TotalOrd Ordering Equiv syn keyword rustTrait Eq ApproxEq Ord TotalEq TotalOrd Ordering Equiv
syn keyword rustEnumVariant Less Equal Greater syn keyword rustEnumVariant Less Equal Greater
syn keyword rustTrait Char
syn keyword rustTrait Container Mutable Map MutableMap Set MutableSet syn keyword rustTrait Container Mutable Map MutableMap Set MutableSet
syn keyword rustTrait Default
syn keyword rustTrait Hash syn keyword rustTrait Hash
syn keyword rustTrait Times syn keyword rustTrait FromStr
syn keyword rustTrait FromIterator Extendable syn keyword rustTrait FromIterator Extendable
syn keyword rustTrait Iterator DoubleEndedIterator RandomAccessIterator ClonableIterator syn keyword rustTrait Iterator DoubleEndedIterator RandomAccessIterator ClonableIterator
syn keyword rustTrait OrdIterator MutableDoubleEndedIterator ExactSize syn keyword rustTrait OrdIterator MutableDoubleEndedIterator ExactSize
syn keyword rustTrait Times
syn keyword rustTrait Algebraic Trigonometric Exponential Hyperbolic
syn keyword rustTrait Bitwise BitCount Bounded
syn keyword rustTrait Integer Fractional Real RealExt
syn keyword rustTrait Num NumCast CheckedAdd CheckedSub CheckedMul syn keyword rustTrait Num NumCast CheckedAdd CheckedSub CheckedMul
syn keyword rustTrait Orderable Signed Unsigned Round syn keyword rustTrait Orderable Signed Unsigned Round
syn keyword rustTrait Algebraic Trigonometric Exponential Hyperbolic syn keyword rustTrait Primitive Int Float ToStrRadix ToPrimitive FromPrimitive
syn keyword rustTrait Integer Fractional Real RealExt syn keyword rustTrait GenericPath Path PosixPath WindowsPath
syn keyword rustTrait Bitwise BitCount Bounded
syn keyword rustTrait Primitive Int Float ToStrRadix
syn keyword rustTrait GenericPath
syn keyword rustTrait Path
syn keyword rustTrait PosixPath
syn keyword rustTrait WindowsPath
syn keyword rustTrait RawPtr syn keyword rustTrait RawPtr
syn keyword rustTrait Ascii AsciiCast OwnedAsciiCast AsciiStr ToBytesConsume syn keyword rustTrait Buffer Writer Reader Seek
syn keyword rustTrait SendStr SendStrOwned SendStrStatic IntoSendStr
syn keyword rustTrait Str StrVector StrSlice OwnedStr syn keyword rustTrait Str StrVector StrSlice OwnedStr
syn keyword rustTrait FromStr
syn keyword rustTrait IterBytes syn keyword rustTrait IterBytes
syn keyword rustTrait ToStr ToStrConsume syn keyword rustTrait ToStr ToStrConsume
syn keyword rustTrait CopyableTuple ImmutableTuple syn keyword rustTrait CopyableTuple ImmutableTuple
syn keyword rustTrait CloneableTuple1 ImmutableTuple1 syn keyword rustTrait Tuple1 Tuple2 Tuple3 Tuple4
syn keyword rustTrait CloneableTuple2 CloneableTuple3 CloneableTuple4 CloneableTuple5 syn keyword rustTrait Tuple5 Tuple6 Tuple7 Tuple8
syn keyword rustTrait CloneableTuple6 CloneableTuple7 CloneableTuple8 CloneableTuple9 syn keyword rustTrait Tuple9 Tuple10 Tuple11 Tuple12
syn keyword rustTrait CloneableTuple10 CloneableTuple11 CloneableTuple12 syn keyword rustTrait ImmutableTuple1 ImmutableTuple2 ImmutableTuple3 ImmutableTuple4
syn keyword rustTrait ImmutableTuple2 ImmutableTuple3 ImmutableTuple4 ImmutableTuple5 syn keyword rustTrait ImmutableTuple5 ImmutableTuple6 ImmutableTuple7 ImmutableTuple8
syn keyword rustTrait ImmutableTuple6 ImmutableTuple7 ImmutableTuple8 ImmutableTuple9 syn keyword rustTrait ImmutableTuple9 ImmutableTuple10 ImmutableTuple11 ImmutableTuple12
syn keyword rustTrait ImmutableTuple10 ImmutableTuple11 ImmutableTuple12
syn keyword rustTrait Vector VectorVector CopyableVector ImmutableVector
syn keyword rustTrait ImmutableEqVector ImmutableTotalOrdVector ImmutableCopyableVector syn keyword rustTrait ImmutableEqVector ImmutableTotalOrdVector ImmutableCopyableVector
syn keyword rustTrait OwnedVector OwnedCopyableVector OwnedEqVector MutableVector syn keyword rustTrait OwnedVector OwnedCopyableVector OwnedEqVector MutableVector
syn keyword rustTrait Reader ReaderUtil Writer WriterUtil syn keyword rustTrait Vector VectorVector CopyableVector ImmutableVector
syn keyword rustTrait Default
"syn keyword rustFunction stream "syn keyword rustFunction stream
syn keyword rustTrait Port Chan GenericChan GenericSmartChan GenericPort Peekable syn keyword rustTrait Port Chan GenericChan GenericSmartChan GenericPort Peekable
@@ -143,48 +145,56 @@ syn match rustOperator display "&&\|||"
syn match rustMacro '\w\(\w\)*!' contains=rustAssert,rustFail syn match rustMacro '\w\(\w\)*!' contains=rustAssert,rustFail
syn match rustMacro '#\w\(\w\)*' contains=rustAssert,rustFail syn match rustMacro '#\w\(\w\)*' contains=rustAssert,rustFail
syn match rustFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlLjzt]\|ll\|hh\)\=\([aAbdiuoxXDOUfFeEgGcCsSpn?]\|\[\^\=.[^]]*\]\)" contained syn match rustSpecialError display contained /\\./
syn match rustFormat display "%%" contained syn match rustSpecial display contained /\\\([nrt0\\'"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)/
syn match rustSpecial display contained /\\\([nrt\\'"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)/
syn match rustStringContinuation display contained /\\\n\s*/ syn match rustStringContinuation display contained /\\\n\s*/
syn region rustString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=rustTodo,rustFormat,rustSpecial,rustStringContinuation syn region rustString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=rustSpecial,rustSpecialError,rustStringContinuation
syn region rustString start='r\z(#*\)"' end='"\z1'
syn region rustAttribute start="#\[" end="\]" contains=rustString,rustDeriving syn region rustAttribute start="#\[" end="\]" contains=rustString,rustDeriving
syn region rustDeriving start="deriving(" end=")" contained contains=rustTrait syn region rustDeriving start="deriving(" end=")" contained contains=rustTrait
" Number literals " Number literals
syn match rustNumber display "\<[0-9][0-9_]*\>" syn match rustDecNumber display "\<[0-9][0-9_]*\%([iu]\%(8\|16\|32\|64\)\=\)\="
syn match rustNumber display "\<[0-9][0-9_]*\(u\|u8\|u16\|u32\|u64\)\>" syn match rustHexNumber display "\<0x[a-fA-F0-9_]\+\%([iu]\%(8\|16\|32\|64\)\=\)\="
syn match rustNumber display "\<[0-9][0-9_]*\(i\|i8\|i16\|i32\|i64\)\>" syn match rustOctNumber display "\<0o[0-7_]\+\%([iu]\%(8\|16\|32\|64\)\=\)\="
syn match rustBinNumber display "\<0b[01_]\+\%([iu]\%(8\|16\|32\|64\)\=\)\="
syn match rustHexNumber display "\<0x[a-fA-F0-9_]\+\>" " Special case for numbers of the form "1." which are float literals, unless followed by
syn match rustHexNumber display "\<0x[a-fA-F0-9_]\+\(u\|u8\|u16\|u32\|u64\)\>" " an identifier, which makes them integer literals with a method call or field access.
syn match rustHexNumber display "\<0x[a-fA-F0-9_]\+\(i8\|i16\|i32\|i64\)\>" " (This must go first so the others take precedence.)
syn match rustBinNumber display "\<0b[01_]\+\>" syn match rustFloat display "\<[0-9][0-9_]*\.\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\@!"
syn match rustBinNumber display "\<0b[01_]\+\(u\|u8\|u16\|u32\|u64\)\>" " To mark a number as a normal float, it must have at least one of the three things integral values don't have:
syn match rustBinNumber display "\<0b[01_]\+\(i8\|i16\|i32\|i64\)\>" " a decimal point and more numbers; an exponent; and a type suffix.
syn match rustFloat display "\<[0-9][0-9_]*\%(\.[0-9][0-9_]*\)\%([eE][+-]\=[0-9_]\+\)\=\(f32\|f64\)\="
syn match rustFloat display "\<[0-9][0-9_]*\(f\|f32\|f64\)\>" syn match rustFloat display "\<[0-9][0-9_]*\%(\.[0-9][0-9_]*\)\=\%([eE][+-]\=[0-9_]\+\)\(f32\|f64\)\="
syn match rustFloat display "\<[0-9][0-9_]*\([eE][+-]\=[0-9_]\+\)\>" syn match rustFloat display "\<[0-9][0-9_]*\%(\.[0-9][0-9_]*\)\=\%([eE][+-]\=[0-9_]\+\)\=\(f32\|f64\)"
syn match rustFloat display "\<[0-9][0-9_]*\([eE][+-]\=[0-9_]\+\)\(f\|f32\|f64\)\>"
syn match rustFloat display "\<[0-9][0-9_]*\.[0-9_]\+\>"
syn match rustFloat display "\<[0-9][0-9_]*\.[0-9_]\+\(f\|f32\|f64\)\>"
syn match rustFloat display "\<[0-9][0-9_]*\.[0-9_]\+\%([eE][+-]\=[0-9_]\+\)\>"
syn match rustFloat display "\<[0-9][0-9_]*\.[0-9_]\+\%([eE][+-]\=[0-9_]\+\)\(f\|f32\|f64\)\>"
" For the benefit of delimitMate " For the benefit of delimitMate
syn region rustLifetimeCandidate display start=/&'\%(\([^'\\]\|\\\(['nrt\\\"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)\)'\)\@!/ end=/[[:cntrl:][:space:][:punct:]]\@=\|$/ contains=rustSigil,rustLifetime syn region rustLifetimeCandidate display start=/&'\%(\([^'\\]\|\\\(['nrt0\\\"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)\)'\)\@!/ end=/[[:cntrl:][:space:][:punct:]]\@=\|$/ contains=rustSigil,rustLifetime
syn region rustGenericRegion display start=/<\%('\|[^[cntrl:][:space:][:punct:]]\)\@=')\S\@=/ end=/>/ contains=rustGenericLifetimeCandidate syn region rustGenericRegion display start=/<\%('\|[^[cntrl:][:space:][:punct:]]\)\@=')\S\@=/ end=/>/ contains=rustGenericLifetimeCandidate
syn region rustGenericLifetimeCandidate display start=/\%(<\|,\s*\)\@<='/ end=/[[:cntrl:][:space:][:punct:]]\@=\|$/ contains=rustSigil,rustLifetime syn region rustGenericLifetimeCandidate display start=/\%(<\|,\s*\)\@<='/ end=/[[:cntrl:][:space:][:punct:]]\@=\|$/ contains=rustSigil,rustLifetime
"rustLifetime must appear before rustCharacter, or chars will get the lifetime highlighting "rustLifetime must appear before rustCharacter, or chars will get the lifetime highlighting
syn match rustLifetime display "\'\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" syn match rustLifetime display "\'\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*"
syn match rustCharacter /'\([^'\\]\|\\\([nrt\\'"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)\)'/ contains=rustSpecial syn match rustCharacter /'\([^'\\]\|\\\(.\|x\x\{2}\|u\x\{4}\|U\x\{8}\)\)'/ contains=rustSpecial,rustSpecialError
syn region rustCommentML start="/\*" end="\*/" contains=rustTodo syn cluster rustComment contains=rustCommentLine,rustCommentLineDoc,rustCommentBlock,rustCommentBlockDoc
syn region rustComment start="//" end="$" contains=rustTodo keepend syn region rustCommentLine start="//" end="$" contains=rustTodo
syn region rustCommentMLDoc start="/\*\%(!\|\*/\@!\)" end="\*/" contains=rustTodo syn region rustCommentLineDoc start="//\%(//\@!\|!\)" end="$" contains=rustTodo
syn region rustCommentDoc start="//[/!]" end="$" contains=rustTodo keepend syn region rustCommentBlock matchgroup=rustCommentBlock start="/\*\%(!\|\*[*/]\@!\)\@!" end="\*/" contains=rustTodo,@rustComment keepend extend
syn region rustCommentBlockDoc matchgroup=rustCommentBlockDoc start="/\*\%(!\|\*[*/]\@!\)" end="\*/" contains=rustTodo,@rustComment keepend extend
" FIXME: this is a really ugly and not fully correct implementation. Most
" importantly, a case like ``/* */*`` should have the final ``*`` not being in
" a comment, but in practice at present it leaves comments open two levels
" deep. But as long as you stay away from that particular case, I *believe*
" the highlighting is correct. Due to the way Vim's syntax engine works
" (greedy for start matches, unlike Rust's tokeniser which is searching for
" the earliest-starting match, start or end), I believe this cannot be solved.
" Oh you who would fix it, don't bother with things like duplicating the Block
" rules and putting ``\*\@<!`` at the start of them; it makes it worse, as
" then you must deal with cases like ``/*/**/*/``. And don't try making it
" worse with ``\%(/\@<!\*\)\@<!``, either...
syn keyword rustTodo contained TODO FIXME XXX NB NOTE syn keyword rustTodo contained TODO FIXME XXX NB NOTE
@@ -196,14 +206,16 @@ syn region rustFoldBraces start="{" end="}" transparent fold
" It's not enabled by default as it would drive some people mad. " It's not enabled by default as it would drive some people mad.
" Default highlighting {{{1 " Default highlighting {{{1
hi def link rustDecNumber rustNumber
hi def link rustHexNumber rustNumber hi def link rustHexNumber rustNumber
hi def link rustOctNumber rustNumber
hi def link rustBinNumber rustNumber hi def link rustBinNumber rustNumber
hi def link rustIdentifierPrime rustIdentifier hi def link rustIdentifierPrime rustIdentifier
hi def link rustTrait rustType hi def link rustTrait rustType
hi def link rustSigil StorageClass hi def link rustSigil StorageClass
hi def link rustFormat Special
hi def link rustSpecial Special hi def link rustSpecial Special
hi def link rustSpecialError Error
hi def link rustStringContinuation Special hi def link rustStringContinuation Special
hi def link rustString String hi def link rustString String
hi def link rustCharacter Character hi def link rustCharacter Character
@@ -216,6 +228,7 @@ hi def link rustSelf Constant
hi def link rustFloat Float hi def link rustFloat Float
hi def link rustOperator Operator hi def link rustOperator Operator
hi def link rustKeyword Keyword hi def link rustKeyword Keyword
hi def link rustReservedKeyword Error
hi def link rustConditional Conditional hi def link rustConditional Conditional
hi def link rustIdentifier Identifier hi def link rustIdentifier Identifier
hi def link rustCapsIdent rustIdentifier hi def link rustCapsIdent rustIdentifier
@@ -224,10 +237,10 @@ hi def link rustModPathSep Delimiter
hi def link rustFunction Function hi def link rustFunction Function
hi def link rustFuncName Function hi def link rustFuncName Function
hi def link rustFuncCall Function hi def link rustFuncCall Function
hi def link rustCommentMLDoc rustCommentDoc hi def link rustCommentLine Comment
hi def link rustCommentDoc SpecialComment hi def link rustCommentLineDoc SpecialComment
hi def link rustCommentML rustComment hi def link rustCommentBlock rustCommentLine
hi def link rustComment Comment hi def link rustCommentBlockDoc rustCommentLineDoc
hi def link rustAssert PreCondit hi def link rustAssert PreCondit
hi def link rustFail PreCondit hi def link rustFail PreCondit
hi def link rustMacro Macro hi def link rustMacro Macro
@@ -236,6 +249,7 @@ hi def link rustTodo Todo
hi def link rustAttribute PreProc hi def link rustAttribute PreProc
hi def link rustDeriving PreProc hi def link rustDeriving PreProc
hi def link rustStorage StorageClass hi def link rustStorage StorageClass
hi def link rustObsoleteStorage Error
hi def link rustLifetime Special hi def link rustLifetime Special
" Other Suggestions: " Other Suggestions:

View File

@@ -1,7 +1,7 @@
" Vim syntax file " Vim syntax file
" Language: sbt " Language: sbt
" Maintainer: Derek Wyatt <derek@{myfirstname}{mylastname}.org> " Maintainer: Derek Wyatt <derek@{myfirstname}{mylastname}.org>
" Last Change: 2012 Jan 19 " Last Change: 2013 Oct 20
if exists("b:current_syntax") if exists("b:current_syntax")
finish finish
@@ -15,6 +15,7 @@ syn match sbtStringEscape "\\[nrfvb\\\"]" contained
syn match sbtIdentitifer "^\S\+\ze\s*\(:=\|++=\|+=\|<<=\|<+=\)" syn match sbtIdentitifer "^\S\+\ze\s*\(:=\|++=\|+=\|<<=\|<+=\)"
syn match sbtBeginningSeq "^[Ss]eq\>" syn match sbtBeginningSeq "^[Ss]eq\>"
syn match sbtAddPlugin "^addSbtPlugin\>"
syn match sbtSpecial "\(:=\|++=\|+=\|<<=\|<+=\)" syn match sbtSpecial "\(:=\|++=\|+=\|<<=\|<+=\)"
@@ -25,6 +26,7 @@ syn region sbtDocComment start="/\*\*" end="\*/" keepend
hi link sbtString String hi link sbtString String
hi link sbtIdentitifer Keyword hi link sbtIdentitifer Keyword
hi link sbtBeginningSeq Keyword hi link sbtBeginningSeq Keyword
hi link sbtAddPlugin Keyword
hi link sbtSpecial Special hi link sbtSpecial Special
hi link sbtComment Comment hi link sbtComment Comment
hi link sbtLineComment Comment hi link sbtLineComment Comment

View File

@@ -1,192 +1,104 @@
" Vim syntax file
" Language : Scala (http://scala-lang.org/)
" Maintainers: Stefan Matthias Aust, Julien Wetterwald
" Last Change: 2007 June 13
if version < 600 if version < 600
syntax clear syntax clear
elseif exists("b:current_syntax") elseif exists("b:current_syntax")
finish finish
endif endif
syn case match
syn sync minlines=50 maxlines=100
" most Scala keywords
syn keyword scalaKeyword case
syn keyword scalaKeyword catch
syn keyword scalaKeyword do
syn keyword scalaKeyword else
syn keyword scalaKeyword extends
syn keyword scalaKeyword final
syn keyword scalaKeyword finally
syn keyword scalaKeyword for
syn keyword scalaKeyword forSome
syn keyword scalaKeyword if
syn keyword scalaKeyword match
syn keyword scalaKeyword new
syn keyword scalaKeyword null
syn keyword scalaKeyword require
syn keyword scalaKeyword return
syn keyword scalaKeyword super
syn keyword scalaKeyword this
syn keyword scalaKeyword throw
syn keyword scalaKeyword try
syn keyword scalaKeyword type
syn keyword scalaKeyword while
syn keyword scalaKeyword with
syn keyword scalaKeyword yield
syn keyword scalaKeywordModifier abstract
syn keyword scalaKeywordModifier override
syn keyword scalaKeywordModifier final
syn keyword scalaKeywordModifier implicit
syn keyword scalaKeywordModifier lazy
syn keyword scalaKeywordModifier private
syn keyword scalaKeywordModifier protected
syn keyword scalaKeywordModifier sealed
syn match scalaKeyword "=>"
syn match scalaKeyword "<-"
syn match scalaKeyword "\<_\>"
syn match scalaOperator ":\{2,\}" "this is not a type
" package and import statements
syn keyword scalaPackage package nextgroup=scalaFqn skipwhite
syn keyword scalaImport import nextgroup=scalaFqn skipwhite
syn match scalaFqn "\<[._$a-zA-Z0-9,]*" contained nextgroup=scalaFqnSet
syn region scalaFqnSet start="{" end="}" contained
" boolean literals
syn keyword scalaBoolean true false
" definitions
syn keyword scalaDef def nextgroup=scalaDefName skipwhite
syn keyword scalaVal val nextgroup=scalaValName skipwhite
syn keyword scalaVar var nextgroup=scalaVarName skipwhite
syn keyword scalaClass class nextgroup=scalaClassName skipwhite
syn keyword scalaObject object nextgroup=scalaClassName skipwhite
syn keyword scalaTrait trait nextgroup=scalaClassName skipwhite
syn match scalaDefName "[^ =:;([]\+" contained nextgroup=scalaDefSpecializer skipwhite
syn match scalaValName "[^ =:;([]\+" contained
syn match scalaVarName "[^ =:;([]\+" contained
syn match scalaClassName "[^ =:;(\[]\+" contained nextgroup=scalaClassSpecializer skipwhite
syn region scalaDefSpecializer start="\[" end="\]" contained contains=scalaDefSpecializer
syn region scalaClassSpecializer start="\[" end="\]" contained contains=scalaClassSpecializer
syn match scalaBackTick "`[^`]\+`"
" type constructor (actually anything with an uppercase letter)
syn match scalaConstructor "\<[A-Z][_$a-zA-Z0-9]*\>" nextgroup=scalaConstructorSpecializer
syn region scalaConstructorSpecializer start="\[" end="\]" contained contains=scalaConstructorSpecializer
" method call
syn match scalaRoot "\<[a-zA-Z][_$a-zA-Z0-9]*\."me=e-1
syn match scalaMethodCall "\.[a-z][_$a-zA-Z0-9]*"ms=s+1
" type declarations in val/var/def
syn match scalaType ":\s*\%(=>\s*\)\?\%([\._$a-zA-Z0-9]\+\|([^)]\{-1,})\)\%(\[[^\]]\{-1,}\]\+\%([^)]*)\]\+\)\?\)\?\%(\s*\%(<:\|>:\|#\|=>\|⇒\)\s*\%([\._$a-zA-Z0-9]\+\|([^)]\{-1,})\)\%(\[[^\]]\{-1,}\]\+\%([^)]*)\]\+\)\?\)*\)*"ms=s+1
" type declarations in case statements
syn match scalaCaseType "\(case\s\+[_a-zA-Z0-9]\+\)\@<=:\s*[\._$a-zA-Z0-9]\+\(\[[^:]\{-1,}\]\+\)\?"ms=s+1
" comments
syn match scalaTodo "[tT][oO][dD][oO]" contained
syn match scalaLineComment "//.*" contains=scalaTodo
syn region scalaComment start="/\*" end="\*/" contains=scalaTodo
syn case ignore
syn include @scalaHtml syntax/html.vim
syn case match
syn region scalaDocComment start="/\*\*" end="\*/" contains=scalaDocTags,scalaTodo,@scalaHtml keepend
syn region scalaDocTags start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}" contained
syn match scalaDocTags "@[a-z]\+" contained
" annotations
syn match scalaAnnotation "@[a-zA-Z]\+"
syn match scalaEmptyString "\"\""
" multi-line string literals
syn region scalaMultiLineString start="\"\"\"" end="\"\"\"\"\@!" contains=scalaUnicode
syn match scalaUnicode "\\u[0-9a-fA-F]\{4}" contained
" string literals with escapes
syn region scalaString start="\"[^"]" skip="\\\"" end="\"" contains=scalaStringEscape " TODO end \n or not?
syn match scalaStringEscape "\\u[0-9a-fA-F]\{4}" contained
syn match scalaStringEscape "\\[nrfvb\\\"]" contained
" symbol and character literals
syn match scalaSymbol "'[_a-zA-Z0-9][_a-zA-Z0-9]*\>"
syn match scalaChar "'[^'\\]'\|'\\.'\|'\\u[0-9a-fA-F]\{4}'"
" number literals
syn match scalaNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
syn match scalaNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
syn match scalaNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
syn match scalaNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
" xml literals
syn match scalaXmlTag "<[a-zA-Z]\_[^>]*/>" contains=scalaXmlQuote,scalaXmlEscape,scalaXmlString
syn region scalaXmlString start="\"" end="\"" contained
syn match scalaXmlStart "<[a-zA-Z]\_[^>]*>" contained contains=scalaXmlQuote,scalaXmlEscape,scalaXmlString
syn region scalaXml start="<\([a-zA-Z]\_[^>]*\_[^/]\|[a-zA-Z]\)>" matchgroup=scalaXmlStart end="</\_[^>]\+>" contains=scalaXmlEscape,scalaXmlQuote,scalaXml,scalaXmlStart,scalaXmlComment
syn region scalaXmlEscape matchgroup=scalaXmlEscapeSpecial start="{" matchgroup=scalaXmlEscapeSpecial end="}" contained contains=TOP
syn match scalaXmlQuote "&[^;]\+;" contained
syn match scalaXmlComment "<!--\_[^>]*-->" contained
" REPL
syn match scalaREPLCmdLine "\<scala>\>"
" map Scala groups to standard groups
hi link scalaKeyword Keyword
hi link scalaKeywordModifier Function
hi link scalaAnnotation Include
hi link scalaPackage Include
hi link scalaImport Include
hi link scalaREPLCmdLine Include
hi link scalaDocTags Include
hi link scalaBackTick Include
hi link scalaBoolean Boolean
hi link scalaOperator Normal
hi link scalaNumber Number
hi link scalaEmptyString String
hi link scalaString String
hi link scalaChar String
hi link scalaMultiLineString String
hi link scalaStringEscape Special
hi link scalaSymbol Special
hi link scalaUnicode Special
hi link scalaComment Comment
hi link scalaLineComment Comment
hi link scalaDocComment Comment
hi link scalaTodo Todo
hi link scalaType Type
hi link scalaCaseType Type
hi link scalaTypeSpecializer scalaType
hi link scalaXml String
hi link scalaXmlTag Include
hi link scalaXmlString String
hi link scalaXmlStart Include
hi link scalaXmlEscape Normal
hi link scalaXmlEscapeSpecial Special
hi link scalaXmlQuote Special
hi link scalaXmlComment Comment
hi link scalaDef Keyword
hi link scalaVar Keyword
hi link scalaVal Keyword
hi link scalaClass Keyword
hi link scalaObject Keyword
hi link scalaTrait Keyword
hi link scalaDefName Function
hi link scalaDefSpecializer Function
hi link scalaClassName Special
hi link scalaClassSpecializer Special
hi link scalaConstructor Special
hi link scalaConstructorSpecializer scalaConstructor
let b:current_syntax = "scala" let b:current_syntax = "scala"
" you might like to put these lines in your .vimrc syn case match
" syn sync minlines=200 maxlines=1000
" customize colors a little bit (should be a different file)
" hi scalaNew gui=underline syn keyword scalaKeyword catch do else final finally for forSome if
" hi scalaMethodCall gui=italic syn keyword scalaKeyword match return throw try while yield
" hi scalaValName gui=underline syn keyword scalaKeyword class trait object extends with type nextgroup=scalaInstanceDeclaration skipwhite
" hi scalaVarName gui=underline syn keyword scalaKeyword case nextgroup=scalaCaseFollowing skipwhite
syn keyword scalaKeyword val nextgroup=scalaNameDefinition,scalaQuasiQuotes skipwhite
syn keyword scalaKeyword def var nextgroup=scalaNameDefinition skipwhite
hi link scalaKeyword Keyword
syn match scalaNameDefinition /\<[_A-Za-z0-9$]\+\>/ contained
syn match scalaNameDefinition /`[^`]\+`/ contained
hi link scalaNameDefinition Function
syn match scalaInstanceDeclaration /\<[_\.A-Za-z0-9$]\+\>/ contained
syn match scalaInstanceDeclaration /`[^`]\+`/ contained
hi link scalaInstanceDeclaration Special
syn match scalaCaseFollowing /\<[_\.A-Za-z0-9$]*\>/ contained
syn match scalaCaseFollowing /`[^`]\+`/ contained
hi link scalaCaseFollowing Special
syn keyword scalaKeywordModifier abstract override final implicit lazy private protected sealed null require super
hi link scalaKeywordModifier Function
syn keyword scalaSpecial this true false package import
syn keyword scalaSpecial new nextgroup=scalaInstanceDeclaration skipwhite
syn match scalaSpecial "\%(=>\|⇒\|<-\|←\|->\|→\)"
syn match scalaSpecial /`[^`]*`/ " Backtick literals
hi link scalaSpecial PreProc
syn region scalaString start=/"/ skip=/\\"/ end=/"/
hi link scalaString String
syn region scalaSString matchgroup=Special start=/s"/ skip=/\\"/ end=/"/ contains=scalaInterpolation
syn match scalaInterpolation /\$[a-zA-Z0-9_$]\+/ contained
syn match scalaInterpolation /\${[^}]\+}/ contained
hi link scalaSString String
hi link scalaInterpolation Function
syn region scalaFString matchgroup=Special start=/f"/ skip=/\\"/ end=/"/ contains=scalaInterpolation,scalaFInterpolation
syn match scalaFInterpolation /\$[a-zA-Z0-9_$]\+%[-A-Za-z0-9\.]\+/ contained
syn match scalaFInterpolation /\${[^}]\+}%[-A-Za-z0-9\.]\+/ contained
hi link scalaFString String
hi link scalaFInterpolation Function
syn region scalaQuasiQuotes matchgroup=Type start=/\<q"/ skip=/\\"/ end=/"/ contains=scalaInterpolation
syn region scalaQuasiQuotes matchgroup=Type start=/\<[tcp]q"/ skip=/\\"/ end=/"/ contains=scalaInterpolation
hi link scalaQuasiQuotes String
syn region scalaTripleQuasiQuotes matchgroup=Type start=/\<q"""/ end=/"""/ contains=scalaInterpolation
syn region scalaTripleQuasiQuotes matchgroup=Type start=/\<[tcp]q"""/ end=/"""/ contains=scalaInterpolation
hi link scalaTripleQuasiQuotes String
syn region scalaTripleString start=/"""/ end=/"""/
syn region scalaTripleSString matchgroup=PreProc start=/s"""/ end=/"""/
syn region scalaTripleFString matchgroup=PreProc start=/f"""/ end=/"""/
hi link scalaTripleString String
hi link scalaTripleSString String
hi link scalaTripleFString String
syn match scalaNumber /\<0[dDfFlL]\?\>/
syn match scalaNumber /\<[1-9]\d*[dDfFlL]\?\>/
syn match scalaNumber /\<0[xX][0-9a-fA-F]\+[dDfFlL]\?\>/
syn match scalaNumber "\%(\<\d\+\.\d*\|\.\d\+\)\%([eE][-+]\=\d\+\)\=[fFdD]\="
syn match scalaNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
syn match scalaNumber "\<\d\+\%([eE][-+]\=\d\+\)\=[fFdD]\>"
hi link scalaNumber Number
syn region scalaSquareBrackets matchgroup=Type start="\[" end="\]" contains=scalaSpecial,scalaTypeParameter,scalaSquareBrackets,scalaTypeOperator
syn match scalaTypeAnnotation /\%(:\s*\)\@<=[_\.A-Za-z0-9$]\+/
syn match scalaTypeParameter /[_\.A-Za-z0-9$]\+/ contained
syn match scalaTypeOperator /[=:<>]\+/ contained
hi link scalaTypeAnnotation Type
hi link scalaTypeParameter Type
hi link scalaTypeOperator Type
syn region scalaMultilineComment start="/\*" end="\*/" contains=scalaMultilineComment,scalaDocLinks,scalaParameterAnnotation,scalaCommentAnnotation,scalaCommentCodeBlock,@scalaHtml keepend
syn match scalaCommentAnnotation "@[_A-Za-z0-9$]\+" contained
syn match scalaParameterAnnotation "@param" nextgroup=scalaParamAnnotationValue skipwhite contained
syn match scalaParamAnnotationValue /[`_A-Za-z0-9$]\+/ contained
syn region scalaDocLinks start="\[\[" end="\]\]" contained
syn region scalaCommentCodeBlock matchgroup=Keyword start="{{{" end="}}}" contained
hi link scalaMultilineComment Comment
hi link scalaDocLinks Function
hi link scalaParameterAnnotation Function
hi link scalaParamAnnotationValue Keyword
hi link scalaCommentAnnotation Function
hi link scalaCommentCodeBlock String
syn match scalaAnnotation /@\<[`_A-Za-z0-9$]\+\>/
hi link scalaAnnotation PreProc
syn match scalaTrailingComment "//.*$"
hi link scalaTrailingComment Comment