diff options
| author | Adam Stankiewicz <sheerun@sher.pl> | 2013-11-02 23:27:57 +0100 | 
|---|---|---|
| committer | Adam Stankiewicz <sheerun@sher.pl> | 2013-11-02 23:27:57 +0100 | 
| commit | 30c1920e4fa4e612238e1f435907c40ecfa47f33 (patch) | |
| tree | f88ffb408895a5baf93fe81fdd12acba17f32d44 | |
| parent | 57cfac7ae384466c3ff2543a9200319dc1d459a0 (diff) | |
| download | vim-polyglot-30c1920e4fa4e612238e1f435907c40ecfa47f33.tar.gz vim-polyglot-30c1920e4fa4e612238e1f435907c40ecfa47f33.zip | |
Massive update :)v1.4.1
| -rw-r--r-- | after/indent/html.vim | 4 | ||||
| -rw-r--r-- | after/syntax/css.vim | 1 | ||||
| -rw-r--r-- | autoload/go/complete.vim | 70 | ||||
| -rw-r--r-- | ftplugin/go/fmt.vim | 16 | ||||
| -rw-r--r-- | ftplugin/go/import.vim | 35 | ||||
| -rw-r--r-- | ftplugin/latex-box/complete.vim | 2 | ||||
| -rw-r--r-- | ftplugin/latex-box/motion.vim | 2 | ||||
| -rw-r--r-- | ftplugin/latextoc.vim | 61 | ||||
| -rw-r--r-- | ftplugin/perl.vim | 8 | ||||
| -rw-r--r-- | ftplugin/typescript.vim | 4 | ||||
| -rw-r--r-- | indent/elixir.vim | 26 | ||||
| -rw-r--r-- | indent/html.vim | 42 | ||||
| -rw-r--r-- | indent/rust.vim | 19 | ||||
| -rw-r--r-- | syntax/clojure.vim | 2 | ||||
| -rwxr-xr-x | syntax/coffee.vim | 18 | ||||
| -rw-r--r-- | syntax/godoc.vim | 2 | ||||
| -rw-r--r-- | syntax/mason.vim | 105 | ||||
| -rw-r--r-- | syntax/perl.vim | 7 | ||||
| -rw-r--r-- | syntax/rust.vim | 52 | ||||
| -rw-r--r-- | syntax/sbt.vim | 4 | 
20 files changed, 355 insertions, 125 deletions
| diff --git a/after/indent/html.vim b/after/indent/html.vim index 10ca6ce5..e6377087 100644 --- a/after/indent/html.vim +++ b/after/indent/html.vim @@ -4,12 +4,12 @@  " License:     WTFPL  " Load the coffee and html indent functions. -unlet b:did_indent +silent! unlet b:did_indent  runtime indent/coffee.vim  let s:coffeeIndentExpr = &l:indentexpr  " Load html last so it can overwrite coffee settings. -unlet b:did_indent +silent! unlet b:did_indent  runtime indent/html.vim  let s:htmlIndentExpr = &l:indentexpr diff --git a/after/syntax/css.vim b/after/syntax/css.vim index e047d08d..b2931f73 100644 --- a/after/syntax/css.vim +++ b/after/syntax/css.vim @@ -97,6 +97,7 @@ if has("gui_running") || &t_Co==256        if out !~ '^cssDefinition ' | continue | endif        let out = substitute( out, ' \+xxx \+', ' ', '' )        let out = substitute( out, ' contains=\zs', '@cssColors,', '' ) +      syn clear cssDefinition        exe 'syn region' out      endfor    endif diff --git a/autoload/go/complete.vim b/autoload/go/complete.vim index cc1013b7..8dd43de4 100644 --- a/autoload/go/complete.vim +++ b/autoload/go/complete.vim @@ -28,43 +28,75 @@ if len(s:goarch) == 0    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)    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') -      let goroot = substitute(system('go env GOROOT'), '\n', '', 'g') -      if v:shell_error -          echo '\'go env GOROOT\' failed' -      endif +    let goroot = substitute(system('go env GOROOT'), '\n', '', 'g') +    if v:shell_error +      echomsg '\'go env GOROOT\' failed' +    endif    else -      let goroot = $GOROOT +    let goroot = $GOROOT    endif    if len(goroot) != 0 && isdirectory(goroot) -    let dirs += [ goroot ] +    let dirs += [goroot]    endif -  let workspaces = split($GOPATH, ':') +  let pathsep = ':' +  if s:goos == 'windows' +    let pathsep = ';' +  endif +  let workspaces = split($GOPATH, pathsep)    if workspaces != [] -      let dirs += workspaces +    let dirs += workspaces    endif    if len(dirs) == 0 -      " should not happen -      return [] +    " should not happen +    return []    endif    let ret = {}    for dir in dirs -    let root = expand(dir . '/pkg/' . s:goos . '_' . s:goarch) -    for i in split(globpath(root, a:ArgLead.'*'), "\n") -      if isdirectory(i) -        let i .= '/' -      elseif i !~ '\.a$' -        continue -      endif -      let i = substitute(substitute(i[len(root)+1:], '[\\]', '/', 'g'), '\.a$', '', 'g') -      let ret[i] = i +    " this may expand to multiple lines +    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) +          let i .= '/' +        elseif i !~ '\.a$' +          continue +        endif +        let i = substitute(substitute(i[len(r)+1:], '[\\]', '/', 'g'), '\.a$', '', 'g') +        let ret[i] = i +      endfor      endfor    endfor    return sort(keys(ret)) diff --git a/ftplugin/go/fmt.vim b/ftplugin/go/fmt.vim index 30814fdf..5447d457 100644 --- a/ftplugin/go/fmt.vim +++ b/ftplugin/go/fmt.vim @@ -12,11 +12,25 @@  "       It tries to preserve cursor position and avoids  "       replacing the buffer with stderr output.  " +" Options: +" +"   g:go_fmt_commands [default=1] +" +"       Flag to indicate whether to enable the commands listed above. +"  if exists("b:did_ftplugin_go_fmt")      finish  endif -command! -buffer Fmt call s:GoFormat() + +if !exists("g:go_fmt_commands") +    let g:go_fmt_commands = 1 +endif + + +if g:go_fmt_commands +    command! -buffer Fmt call s:GoFormat() +endif  function! s:GoFormat()      let view = winsaveview() diff --git a/ftplugin/go/import.vim b/ftplugin/go/import.vim index 1d969e46..91c8697a 100644 --- a/ftplugin/go/import.vim +++ b/ftplugin/go/import.vim @@ -24,23 +24,40 @@  "       imported, an error will be displayed and the buffer will be  "       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 -"   \F  -  Runs :Drop fmt +"   Import 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).  " +" Options: +" +"   g:go_import_commands [default=1] +" +"       Flag to indicate whether to enable the commands listed above. +"  if exists("b:did_ftplugin_go_import")      finish  endif -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>) -map <buffer> <LocalLeader>f :Import fmt<CR> -map <buffer> <LocalLeader>F :Drop fmt<CR> +if !exists("g:go_import_commands") +    let g:go_import_commands = 1 +endif + +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)      let view = winsaveview() diff --git a/ftplugin/latex-box/complete.vim b/ftplugin/latex-box/complete.vim index 2414be3c..af894777 100644 --- a/ftplugin/latex-box/complete.vim +++ b/ftplugin/latex-box/complete.vim @@ -457,7 +457,7 @@ function! s:GetLabelCache(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. -		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 ]  	endif diff --git a/ftplugin/latex-box/motion.vim b/ftplugin/latex-box/motion.vim index 72481753..04275aca 100644 --- a/ftplugin/latex-box/motion.vim +++ b/ftplugin/latex-box/motion.vim @@ -437,7 +437,7 @@ endfunction  function! s:FindClosestSection(toc, fileindices)  	let file = expand('%:p')  	if !has_key(a:fileindices, file) -		echoe 'Current file is not included in main tex file ' . LatexBox_GetMainTexFile() . '.' +		return 0  	endif  	let imax = len(a:fileindices[file]) diff --git a/ftplugin/latextoc.vim b/ftplugin/latextoc.vim index f753cea8..48f20e3b 100644 --- a/ftplugin/latextoc.vim +++ b/ftplugin/latextoc.vim @@ -80,24 +80,14 @@ function! s:TOCActivate(close)      execute b:calling_win . 'wincmd w' -    let bnr = bufnr(entry['file']) -    if bnr == -1 -        execute 'badd ' . entry['file'] -        let bnr = bufnr(entry['file']) -    endif - -    execute 'buffer! ' . bnr - -    " skip duplicates -    while duplicates > 0 -        if search('\\' . entry['level'] . '\_\s*{' . titlestr . '}', 'ws') -            let duplicates -= 1 -        endif -    endwhile +    let files = [entry['file']] +    for line in filter(readfile(entry['file']), 'v:val =~ ''\\input{''') +        call add(files, matchstr(line, '{\zs.*\ze\(\.tex\)\?}') . '.tex') +    endfor -    if search('\\' . entry['level'] . '\_\s*{' . titlestr . '}', 'ws') -        normal zv -    endif +    " Find section in buffer (or inputted files) +    call s:TOCFindMatch('\\' . entry['level'] . '\_\s*{' . titlestr . '}', +                \ duplicates, files)      if a:close          if g:LatexBox_split_resize @@ -109,6 +99,30 @@ function! s:TOCActivate(close)      endif  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  function! TOCFoldLevel(lnum)      let line  = getline(a:lnum) @@ -140,12 +154,25 @@ function! TOCFoldLevel(lnum)      " Return previous fold level      return "="  endfunction +  " {{{2 TOCFoldText  function! TOCFoldText()      let parts = matchlist(getline(v:foldstart), '^\(.*\)\t\(.*\)$')      return printf('%-8s%-72s', parts[1], parts[2])  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 Mappings diff --git a/ftplugin/perl.vim b/ftplugin/perl.vim index e31f8c0c..9e210428 100644 --- a/ftplugin/perl.vim +++ b/ftplugin/perl.vim @@ -33,14 +33,14 @@ endif  setlocal include=\\<\\(use\\\|require\\)\\>  setlocal includeexpr=substitute(substitute(substitute(v:fname,'::','/','g'),'->\*','',''),'$','.pm','')  setlocal define=[^A-Za-z_] +setlocal iskeyword+=:  " The following line changes a global variable but is necessary to make -" gf and similar commands work.  The change to iskeyword was incorrect. -" Thanks to Andrew Pimlott for pointing out the problem. If this causes a -" problem for you, add an after/ftplugin/perl.vim file that contains +" gf and similar commands work. Thanks to Andrew Pimlott for pointing +" out the problem. If this causes a problem for you, add an +" after/ftplugin/perl.vim file that contains  "       set isfname-=:  set isfname+=: -set iskeyword+=:  " Set this once, globally.  if !exists("perlpath") diff --git a/ftplugin/typescript.vim b/ftplugin/typescript.vim index 3726194a..e4e39b60 100644 --- a/ftplugin/typescript.vim +++ b/ftplugin/typescript.vim @@ -1,8 +1,10 @@  compiler typescript  setlocal autoindent -setlocal cindent  setlocal smartindent  setlocal indentexpr& +setlocal cindent +setlocal cino=j1J1 +  setlocal commentstring=//\ %s diff --git a/indent/elixir.vim b/indent/elixir.vim index e4798141..a71c466c 100644 --- a/indent/elixir.vim +++ b/indent/elixir.vim @@ -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_middle = 'else\|match\|elsif\|catch\|after\|rescue'  let s:block_end    = 'end' +let s:pipeline     = '^\s*|>.*$'  let s:indent_keywords   = '\<\%(' . s:block_start . '\|' . s:block_middle . '\)$'  let s:deindent_keywords = '^\s*\<\%(' . s:block_end . '\|' . s:block_middle . '\)\>' @@ -38,7 +39,7 @@ function! GetElixirIndent(...)      return 0    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 opened_symbol  = 0      let opened_symbol += count(splited_line, '[') - count(splited_line, ']') @@ -51,6 +52,29 @@ function! GetElixirIndent(...)        let ind += &sw      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        let bslnum = searchpair( '\<\%(' . s:block_start . '\):\@!\>',              \ '\<\%(' . s:block_middle . '\):\@!\>\zs', diff --git a/indent/html.vim b/indent/html.vim index d5b7c837..466c6bd8 100644 --- a/indent/html.vim +++ b/indent/html.vim @@ -343,27 +343,27 @@ fun! HtmlIndentGet(lnum)      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 +    " 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          setlocal noic diff --git a/indent/rust.vim b/indent/rust.vim index ae3ca403..1f08c519 100644 --- a/indent/rust.vim +++ b/indent/rust.vim @@ -1,7 +1,7 @@  " Vim indent file  " Language:         Rust  " 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.  if exists("b:did_indent") @@ -104,8 +104,23 @@ function GetRustIndent(lnum)  	let prevline = s:get_line_trimmed(prevnonblank(a:lnum - 1))  	if prevline[len(prevline) - 1] == ","  				\ && 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 -		" 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)  	endif diff --git a/syntax/clojure.vim b/syntax/clojure.vim index 873f3e5f..6bdff4f0 100644 --- a/syntax/clojure.vim +++ b/syntax/clojure.vim @@ -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 region clojureString start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=clojureStringEscape +syntax region clojureString start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=clojureStringEscape,@Spell  syntax match clojureCharacter "\\."  syntax match clojureCharacter "\\o\%([0-3]\o\{2\}\|\o\{1,2\}\)" diff --git a/syntax/coffee.vim b/syntax/coffee.vim index eea50840..7f8df73c 100755 --- a/syntax/coffee.vim +++ b/syntax/coffee.vim @@ -15,9 +15,6 @@ silent! unlet b:current_syntax  " Highlight long strings.  syntax sync fromstart -" CoffeeScript identifiers can have dollar signs. -setlocal isident+=$ -  " These are `matches` instead of `keywords` because vim's highlighting  " 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 -- @@ -67,7 +64,7 @@ syn match coffeeSpecialVar /\<\%(this\|prototype\|arguments\)\>/ display  hi def link coffeeSpecialVar Special  " An @-variable -syn match coffeeSpecialIdent /@\%(\I\i*\)\?/ display +syn match coffeeSpecialIdent /@\%(\%(\I\|\$\)\%(\i\|\$\)*\)\?/ display  hi def link coffeeSpecialIdent Identifier  " 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  " 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  syn match coffeeNumber /\<0[xX]\x\+\>/ display  syn match coffeeNumber /\<0[bB][01]\+\>/ display  syn match coffeeNumber /\<0[oO][0-7]\+\>/ display +syn match coffeeNumber /\<\%(Infinity\|NaN\)\>/ display  hi def link coffeeNumber Number  " 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  hi def link coffeeFloat Float @@ -114,7 +112,7 @@ syn match coffeeReservedError /\<\%(case\|default\|function\|var\|void\|with\|co  hi def link coffeeReservedError Error  " 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  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  " 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\@!#  \                      oneline contains=@coffeeBasicString,coffeeRegexCharSet  syn region coffeeRegexCharSet start=/\[/ end=/]/ contained @@ -182,11 +180,11 @@ syn match coffeeSemicolonError /;$/ display  hi def link coffeeSemicolonError Error  " 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  " 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  " This is required for interpolations to work. diff --git a/syntax/godoc.vim b/syntax/godoc.vim index 82f78aa3..bd4443f7 100644 --- a/syntax/godoc.vim +++ b/syntax/godoc.vim @@ -7,7 +7,7 @@ if exists("b:current_syntax")  endif  syn case match -syn match  godocTitle "^\([A-Z]*\)$" +syn match  godocTitle "^\([A-Z][A-Z ]*\)$"  command -nargs=+ HiLink hi def link <args> diff --git a/syntax/mason.vim b/syntax/mason.vim new file mode 100644 index 00000000..71a1e37e --- /dev/null +++ b/syntax/mason.vim @@ -0,0 +1,105 @@ +" 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 region masonPerlBraces start="{" end="}" contained +syn region masonLine matchgroup=Delimiter start="^%" end="$" keepend contains=@perlTop,masonPerlBraces +syn region masonExpr matchgroup=Delimiter start="<%" end="%>" contains=@perlTop +syn region masonPerl matchgroup=Delimiter start="<%perl>" end="</%perl>" contains=masonPod,@perlTop +syn region masonComp keepend matchgroup=Delimiter start="<&\s*\%(\a\+:\)\?[._/[:alnum:]]*" end="&>" contains=@perlTop + +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 + +	delc HiLink +endif + +let b:current_syntax = "mason" + +if main_syntax == 'mason' +	unlet main_syntax +endif diff --git a/syntax/perl.vim b/syntax/perl.vim index bb19a41f..fc8f4472 100644 --- a/syntax/perl.vim +++ b/syntax/perl.vim @@ -371,13 +371,6 @@ syn match perlSubName +\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\_s*\|+ contained nextgr  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  " a string  syn match  perlString "\I\@<!-\?\I\i*\%(\s*=>\)\@=" diff --git a/syntax/rust.vim b/syntax/rust.vim index 7d51c3b8..a0a23928 100644 --- a/syntax/rust.vim +++ b/syntax/rust.vim @@ -3,7 +3,7 @@  " Maintainer:   Patrick Walton <pcwalton@mozilla.com>  " Maintainer:   Ben Blum <bblum@cs.cmu.edu>  " Maintainer:   Chris Morgan <me@chrismorgan.info> -" Last Change:  2013 Sep 4 +" Last Change:  2013 Oct 29  if version < 600    syntax clear @@ -61,48 +61,48 @@ syn keyword   rustEnumVariant Ok Err  " Functions {{{3  "syn keyword rustFunction print println  "syn keyword rustFunction range +"syn keyword rustFunction from_str  " 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 Char  syn keyword rustTrait Clone DeepClone  syn keyword rustTrait Eq ApproxEq Ord TotalEq TotalOrd Ordering Equiv  syn keyword rustEnumVariant Less Equal Greater -syn keyword rustTrait Char  syn keyword rustTrait Container Mutable Map MutableMap Set MutableSet +syn keyword rustTrait Default  syn keyword rustTrait Hash -syn keyword rustTrait Times +syn keyword rustTrait FromStr  syn keyword rustTrait FromIterator Extendable  syn keyword rustTrait Iterator DoubleEndedIterator RandomAccessIterator ClonableIterator  syn keyword rustTrait OrdIterator MutableDoubleEndedIterator ExactSize -syn keyword rustTrait Num NumCast CheckedAdd CheckedSub CheckedMul -syn keyword rustTrait Orderable Signed Unsigned Round +syn keyword rustTrait Times +  syn keyword rustTrait Algebraic Trigonometric Exponential Hyperbolic -syn keyword rustTrait Integer Fractional Real RealExt  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 Integer Fractional Real RealExt +syn keyword rustTrait Num NumCast CheckedAdd CheckedSub CheckedMul +syn keyword rustTrait Orderable Signed Unsigned Round +syn keyword rustTrait Primitive Int Float ToStrRadix ToPrimitive FromPrimitive +syn keyword rustTrait GenericPath Path PosixPath WindowsPath  syn keyword rustTrait RawPtr -syn keyword rustTrait Ascii AsciiCast OwnedAsciiCast AsciiStr ToBytesConsume +syn keyword rustTrait SendStr SendStrOwned SendStrStatic IntoSendStr  syn keyword rustTrait Str StrVector StrSlice OwnedStr -syn keyword rustTrait FromStr  syn keyword rustTrait IterBytes  syn keyword rustTrait ToStr ToStrConsume  syn keyword rustTrait CopyableTuple ImmutableTuple -syn keyword rustTrait CloneableTuple1 ImmutableTuple1 -syn keyword rustTrait CloneableTuple2 CloneableTuple3 CloneableTuple4 CloneableTuple5 -syn keyword rustTrait CloneableTuple6 CloneableTuple7 CloneableTuple8 CloneableTuple9 -syn keyword rustTrait CloneableTuple10 CloneableTuple11 CloneableTuple12 -syn keyword rustTrait ImmutableTuple2 ImmutableTuple3 ImmutableTuple4 ImmutableTuple5 -syn keyword rustTrait ImmutableTuple6 ImmutableTuple7 ImmutableTuple8 ImmutableTuple9 -syn keyword rustTrait ImmutableTuple10 ImmutableTuple11 ImmutableTuple12 -syn keyword rustTrait Vector VectorVector CopyableVector ImmutableVector +syn keyword rustTrait Tuple1 Tuple2 Tuple3 Tuple4 +syn keyword rustTrait Tuple5 Tuple6 Tuple7 Tuple8 +syn keyword rustTrait Tuple9 Tuple10 Tuple11 Tuple12 +syn keyword rustTrait ImmutableTuple1 ImmutableTuple2 ImmutableTuple3 ImmutableTuple4 +syn keyword rustTrait ImmutableTuple5 ImmutableTuple6 ImmutableTuple7 ImmutableTuple8 +syn keyword rustTrait ImmutableTuple9 ImmutableTuple10 ImmutableTuple11 ImmutableTuple12  syn keyword rustTrait ImmutableEqVector ImmutableTotalOrdVector ImmutableCopyableVector  syn keyword rustTrait OwnedVector OwnedCopyableVector OwnedEqVector MutableVector -syn keyword rustTrait Reader ReaderUtil Writer WriterUtil -syn keyword rustTrait Default +syn keyword rustTrait Vector VectorVector CopyableVector ImmutableVector  "syn keyword rustFunction stream  syn keyword rustTrait Port Chan GenericChan GenericSmartChan GenericPort Peekable @@ -145,7 +145,7 @@ 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     rustFormat      display "%%" contained -syn match     rustSpecial     display contained /\\\([nrt\\'"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)/ +syn match     rustSpecial     display contained /\\\([nrt0\\'"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)/  syn match     rustStringContinuation display contained /\\\n\s*/  syn region    rustString      start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=rustTodo,rustFormat,rustSpecial,rustStringContinuation  syn region    rustString      start='r\z(#*\)"' end='"\z1' @@ -174,13 +174,13 @@ 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 -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 rustGenericLifetimeCandidate display start=/\%(<\|,\s*\)\@<='/ end=/[[:cntrl:][:space:][:punct:]]\@=\|$/ contains=rustSigil,rustLifetime  "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   rustCharacter   /'\([^'\\]\|\\\([nrt\\'"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)\)'/ contains=rustSpecial +syn match   rustCharacter   /'\([^'\\]\|\\\([nrt0\\'"]\|x\x\{2}\|u\x\{4}\|U\x\{8}\)\)'/ contains=rustSpecial  syn region    rustCommentML   start="/\*" end="\*/" contains=rustTodo  syn region    rustComment     start="//" end="$" contains=rustTodo keepend diff --git a/syntax/sbt.vim b/syntax/sbt.vim index 1af382e1..68dcd954 100644 --- a/syntax/sbt.vim +++ b/syntax/sbt.vim @@ -1,7 +1,7 @@  " Vim syntax file  " Language:     sbt  " Maintainer:   Derek Wyatt <derek@{myfirstname}{mylastname}.org> -" Last Change:  2012 Jan 19 +" Last Change:  2013 Oct 20  if exists("b:current_syntax")    finish @@ -15,6 +15,7 @@ syn match sbtStringEscape "\\[nrfvb\\\"]" contained  syn match sbtIdentitifer "^\S\+\ze\s*\(:=\|++=\|+=\|<<=\|<+=\)"  syn match sbtBeginningSeq "^[Ss]eq\>" +syn match sbtAddPlugin "^addSbtPlugin\>"  syn match sbtSpecial "\(:=\|++=\|+=\|<<=\|<+=\)" @@ -25,6 +26,7 @@ syn region sbtDocComment start="/\*\*" end="\*/" keepend  hi link sbtString String  hi link sbtIdentitifer Keyword  hi link sbtBeginningSeq Keyword +hi link sbtAddPlugin Keyword  hi link sbtSpecial Special  hi link sbtComment Comment  hi link sbtLineComment Comment | 
