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 = '\(' . 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
+ " 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 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 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="%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
+ 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