diff --git a/after/indent/html.vim b/after/indent/html.vim index 10ca6ce..e637708 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 e047d08..b2931f7 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 cc1013b..8dd43de 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 30814fd..5447d45 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 1d969e4..91c8697 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 f :Import fmt " -" The backslash is the default maplocalleader, so it is possible that +" Drop fmt +" au Filetype go nnoremap F :Drop fmt +" +" Import the word under your cursor +" au Filetype go nnoremap k +" \ :exe 'Import ' . expand('') +" +" 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, '', ) -command! -buffer -nargs=1 -complete=customlist,go#complete#Package Import call s:SwitchImport(1, '', ) -command! -buffer -nargs=* -complete=customlist,go#complete#Package ImportAs call s:SwitchImport(1, ) -map f :Import fmt -map F :Drop fmt +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, '', ) + command! -buffer -nargs=1 -complete=customlist,go#complete#Package Import call s:SwitchImport(1, '', ) + command! -buffer -nargs=* -complete=customlist,go#complete#Package ImportAs call s:SwitchImport(1, ) +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 2414be3..af89477 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 7248175..04275ac 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 f753cea..48f20e3 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 + let files = [entry['file']] + for line in filter(readfile(entry['file']), 'v:val =~ ''\\input{''') + call add(files, matchstr(line, '{\zs.*\ze\(\.tex\)\?}') . '.tex') + endfor - execute 'buffer! ' . bnr - - " skip duplicates - 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 + " 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 e31f8c0..9e21042 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 3726194..e4e39b6 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 e479814..a71c466 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 d5b7c83..466c6bd 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 = '' - 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 + " for tags in s:omittable + " let tags_exp = '<\(' . join(tags, '\|') . '\)>' + " let close_tags_exp = '' + " 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) =~ '' - 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 getline(a:lnum) =~ '' + " 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 ae3ca40..1f08c51 100644 --- a/indent/rust.vim +++ b/indent/rust.vim @@ -1,7 +1,7 @@ " Vim indent file " Language: Rust " Author: Chris Morgan -" 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 873f3e5..6bdff4f 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 eea5084..7f8df73 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\@/ 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\@ diff --git a/syntax/mason.vim b/syntax/mason.vim new file mode 100644 index 0000000..71a1e37 --- /dev/null +++ b/syntax/mason.vim @@ -0,0 +1,105 @@ +" Vim syntax file +" Language: Mason (Perl embedded in HTML) +" Maintainer: vim-perl +" 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 +" Andrew Smith +" +" 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 :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 :p:h/perl.vim + unlet b:current_syntax + syn include @podTop :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="" contains=masonPod,@perlTop +syn region masonComp keepend matchgroup=Delimiter start="<&\s*\%(\a\+:\)\?[._/[:alnum:]]*" end="&>" contains=@perlTop + +syn region masonArgs matchgroup=Delimiter start="<%args>" end="" contains=masonPod,@perlTop + +syn region masonInit matchgroup=Delimiter start="<%init>" end="" contains=masonPod,@perlTop +syn region masonCleanup matchgroup=Delimiter start="<%cleanup>" end="" contains=masonPod,@perlTop +syn region masonOnce matchgroup=Delimiter start="<%once>" end="" contains=masonPod,@perlTop +syn region masonClass matchgroup=Delimiter start="<%class>" end="" contains=masonPod,@perlTop +syn region masonShared matchgroup=Delimiter start="<%shared>" end="" contains=masonPod,@perlTop + +syn region masonDef matchgroup=Delimiter start="<%def\s*[._/[:alnum:]]\+\s*>" end="" contains=@htmlTop +syn region masonMethod matchgroup=Delimiter start="<%method\s*[._/[:alnum:]]\+\s*>" end="" contains=@htmlTop + +syn region masonFlags matchgroup=Delimiter start="<%flags>" end="" contains=masonPod,@perlTop +syn region masonAttr matchgroup=Delimiter start="<%attr>" end="" contains=masonPod,@perlTop + +syn region masonFilter matchgroup=Delimiter start="<%filter>" end="" contains=masonPod,@perlTop + +syn region masonDoc matchgroup=Delimiter start="<%doc>" end="" +syn region masonText matchgroup=Delimiter start="<%text>" end="" + +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 + else + com -nargs=+ HiLink hi def link + 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 bb19a41..fc8f447 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 +\\_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\@\)\@=" diff --git a/syntax/rust.vim b/syntax/rust.vim index 7d51c3b..a0a2392 100644 --- a/syntax/rust.vim +++ b/syntax/rust.vim @@ -3,7 +3,7 @@ " Maintainer: Patrick Walton " Maintainer: Ben Blum " Maintainer: Chris Morgan -" 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 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 Orderable Signed Unsigned Round -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 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 1af382e..68dcd95 100644 --- a/syntax/sbt.vim +++ b/syntax/sbt.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: sbt " Maintainer: Derek Wyatt -" 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