aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2018-10-28 13:51:36 +0100
committerJustin M. Keyes <justinkz@gmail.com>2018-10-28 13:57:08 +0100
commitdae1213e57da36aaa805425636d11712c746fe49 (patch)
tree74046abf006f00abd62579a97818747aeeaeab2e
parentb9a6df58cc7674153728605f48029c4c7bbe1a84 (diff)
downloadrneovim-dae1213e57da36aaa805425636d11712c746fe49.tar.gz
rneovim-dae1213e57da36aaa805425636d11712c746fe49.tar.bz2
rneovim-dae1213e57da36aaa805425636d11712c746fe49.zip
vim-patch:f0b03c4e98f8
Update runtime files https://github.com/vim/vim/commit/f0b03c4e98f8a7184d8b4a5d702cbcd602426923 Note: haskell changes were included in 942f3587c38a83cf6486a0b779765b54a1648493
-rw-r--r--runtime/autoload/dist/ft.vim8
-rw-r--r--runtime/doc/eval.txt27
-rw-r--r--runtime/doc/filetype.txt19
-rw-r--r--runtime/doc/repeat.txt4
-rw-r--r--runtime/doc/usr_41.txt1
-rw-r--r--runtime/filetype.vim3
-rw-r--r--runtime/ftplugin/vim.vim34
-rw-r--r--runtime/ftplugin/zimbu.vim8
-rw-r--r--runtime/indent/javascript.vim183
-rw-r--r--runtime/syntax/apachestyle.vim8
-rw-r--r--runtime/syntax/html.vim14
-rw-r--r--runtime/syntax/tex.vim23
-rw-r--r--runtime/syntax/vim.vim7
13 files changed, 214 insertions, 125 deletions
diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim
index 2603c6822f..81fdc9d956 100644
--- a/runtime/autoload/dist/ft.vim
+++ b/runtime/autoload/dist/ft.vim
@@ -1,7 +1,7 @@
" Vim functions for file type detection
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2017 Nov 11
+" Last Change: 2017 Dec 05
" These functions are moved here from runtime/filetype.vim to make startup
" faster.
@@ -618,7 +618,11 @@ func dist#ft#FTperl()
setf perl
return 1
endif
- if search('^use\s\s*\k', 'nc', 30)
+ let save_cursor = getpos('.')
+ call cursor(1,1)
+ let has_use = search('^use\s\s*\k', 'c', 30)
+ call setpos('.', save_cursor)
+ if has_use
setf perl
return 1
endif
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 6e678790bb..7b1857883b 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -2194,6 +2194,8 @@ msgpackdump({list}) List dump a list of objects to msgpack
msgpackparse({list}) List parse msgpack to a list of objects
nextnonblank({lnum}) Number line nr of non-blank line >= {lnum}
nr2char({expr}[, {utf8}]) String single char with ASCII/UTF8 value {expr}
+option_restore({list}) none restore options saved by option_save()
+option_save({list}) List save options values
nvim_...({args}...) any call nvim |api| functions
or({expr}, {expr}) Number bitwise OR
pathshorten({expr}) String shorten directory names in a path
@@ -5882,6 +5884,31 @@ nvim_...({...}) *nvim_...()* *eval-api*
also take the numerical value 0 to indicate the current
(focused) object.
+option_restore({list}) *option_restore()*
+ Restore options previously saved by option_save().
+ When buffer-local options have been saved, this function must
+ be called when the same buffer is the current buffer.
+ When window-local options have been saved, this function must
+ be called when the same window is the current window.
+ When in the wrong buffer and/or window an error is given and
+ the local options won't be restored.
+ NOT IMPLEMENTED YET!
+
+option_save({list}) *option_save()*
+ Saves the options named in {list}. The returned value can be
+ passed to option_restore(). Example: >
+ let s:saved_options = option_save([
+ \ 'ignorecase',
+ \ 'iskeyword',
+ \ ])
+ au <buffer> BufLeave *
+ \ call option_restore(s:saved_options)
+< The advantage over using `:let` is that global and local
+ values are handled and the script ID is restored, so that
+ `:verbose set` will show where the option was originally set,
+ not where it was restored.
+ NOT IMPLEMENTED YET!
+
or({expr}, {expr}) *or()*
Bitwise OR on the two arguments. The arguments are converted
to a number. A List, Dict or Float argument causes an error.
diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt
index 6ac14e4122..4d16a2eaf6 100644
--- a/runtime/doc/filetype.txt
+++ b/runtime/doc/filetype.txt
@@ -750,4 +750,23 @@ You can change the default by defining the variable g:tex_flavor to the format
Currently no other formats are recognized.
+VIM *ft-vim-plugin*
+
+The Vim filetype plugin defines mappings to move to the start and end of
+functions with [[ and ]]. Move around comments with ]" and [".
+
+The mappings can be disabled with: >
+ let g:no_vim_maps = 1
+
+
+ZIMBU *ft-zimbu-plugin*
+
+The Zimbu filetype plugin defines mappings to move to the start and end of
+functions with [[ and ]].
+
+The mappings can be disabled with: >
+ let g:no_zimbu_maps = 1
+<
+
+
vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/repeat.txt b/runtime/doc/repeat.txt
index 42889cca50..b63ece7d2d 100644
--- a/runtime/doc/repeat.txt
+++ b/runtime/doc/repeat.txt
@@ -226,6 +226,10 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
If the directory pack/*/opt/{name}/after exists it is
added at the end of 'runtimepath'.
+ If loading packages from "pack/*/start" was skipped,
+ then this directory is searched first:
+ pack/*/start/{name} ~
+
Note that {name} is the directory name, not the name
of the .vim file. All the files matching the pattern
pack/*/opt/{name}/plugin/**/*.vim ~
diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt
index 83d3106bf9..95d1813104 100644
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -901,6 +901,7 @@ Vim server: *server-functions*
Window size and position: *window-size-functions*
winheight() get height of a specific window
winwidth() get width of a specific window
+ win_screenpos() get screen position of a window
winrestcmd() return command to restore window sizes
winsaveview() get view of current window
winrestview() restore saved view of current window
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index deab1f0f58..bb8d210539 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -1924,6 +1924,9 @@ au StdinReadPost * if !did_filetype() | runtime! scripts.vim | endif
" Most of these should call s:StarSetf() to avoid names ending in .gz and the
" like are used.
+" More Apache style config files
+au BufNewFile,BufRead */etc/proftpd/*.conf*,*/etc/proftpd/conf.*/* call s:StarSetf('apachestyle')
+
" More Apache config files
au BufNewFile,BufRead access.conf*,apache.conf*,apache2.conf*,httpd.conf*,srm.conf* call s:StarSetf('apache')
au BufNewFile,BufRead */etc/apache2/*.conf*,*/etc/apache2/conf.*/*,*/etc/apache2/mods-*/*,*/etc/apache2/sites-*/*,*/etc/httpd/conf.d/*.conf* call s:StarSetf('apache')
diff --git a/runtime/ftplugin/vim.vim b/runtime/ftplugin/vim.vim
index f34655f330..59ea349710 100644
--- a/runtime/ftplugin/vim.vim
+++ b/runtime/ftplugin/vim.vim
@@ -1,7 +1,7 @@
" Vim filetype plugin
" Language: Vim
" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2017 Nov 06
+" Last Change: 2017 Dec 05
" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
@@ -42,21 +42,23 @@ setlocal commentstring=\"%s
" Prefer Vim help instead of manpages.
setlocal keywordprg=:help
-" Move around functions.
-nnoremap <silent><buffer> [[ m':call search('^\s*fu\%[nction]\>', "bW")<CR>
-vnoremap <silent><buffer> [[ m':<C-U>exe "normal! gv"<Bar>call search('^\s*fu\%[nction]\>', "bW")<CR>
-nnoremap <silent><buffer> ]] m':call search('^\s*fu\%[nction]\>', "W")<CR>
-vnoremap <silent><buffer> ]] m':<C-U>exe "normal! gv"<Bar>call search('^\s*fu\%[nction]\>', "W")<CR>
-nnoremap <silent><buffer> [] m':call search('^\s*endf*\%[unction]\>', "bW")<CR>
-vnoremap <silent><buffer> [] m':<C-U>exe "normal! gv"<Bar>call search('^\s*endf*\%[unction]\>', "bW")<CR>
-nnoremap <silent><buffer> ][ m':call search('^\s*endf*\%[unction]\>', "W")<CR>
-vnoremap <silent><buffer> ][ m':<C-U>exe "normal! gv"<Bar>call search('^\s*endf*\%[unction]\>', "W")<CR>
-
-" Move around comments
-nnoremap <silent><buffer> ]" :call search('^\(\s*".*\n\)\@<!\(\s*"\)', "W")<CR>
-vnoremap <silent><buffer> ]" :<C-U>exe "normal! gv"<Bar>call search('^\(\s*".*\n\)\@<!\(\s*"\)', "W")<CR>
-nnoremap <silent><buffer> [" :call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW")<CR>
-vnoremap <silent><buffer> [" :<C-U>exe "normal! gv"<Bar>call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW")<CR>
+if !exists("no_plugin_maps") && !exists("no_vim_maps")
+ " Move around functions.
+ nnoremap <silent><buffer> [[ m':call search('^\s*fu\%[nction]\>', "bW")<CR>
+ vnoremap <silent><buffer> [[ m':<C-U>exe "normal! gv"<Bar>call search('^\s*fu\%[nction]\>', "bW")<CR>
+ nnoremap <silent><buffer> ]] m':call search('^\s*fu\%[nction]\>', "W")<CR>
+ vnoremap <silent><buffer> ]] m':<C-U>exe "normal! gv"<Bar>call search('^\s*fu\%[nction]\>', "W")<CR>
+ nnoremap <silent><buffer> [] m':call search('^\s*endf*\%[unction]\>', "bW")<CR>
+ vnoremap <silent><buffer> [] m':<C-U>exe "normal! gv"<Bar>call search('^\s*endf*\%[unction]\>', "bW")<CR>
+ nnoremap <silent><buffer> ][ m':call search('^\s*endf*\%[unction]\>', "W")<CR>
+ vnoremap <silent><buffer> ][ m':<C-U>exe "normal! gv"<Bar>call search('^\s*endf*\%[unction]\>', "W")<CR>
+
+ " Move around comments
+ nnoremap <silent><buffer> ]" :call search('^\(\s*".*\n\)\@<!\(\s*"\)', "W")<CR>
+ vnoremap <silent><buffer> ]" :<C-U>exe "normal! gv"<Bar>call search('^\(\s*".*\n\)\@<!\(\s*"\)', "W")<CR>
+ nnoremap <silent><buffer> [" :call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW")<CR>
+ vnoremap <silent><buffer> [" :<C-U>exe "normal! gv"<Bar>call search('\%(^\s*".*\n\)\%(^\s*"\)\@!', "bW")<CR>
+endif
" Let the matchit plugin know what items can be matched.
if exists("loaded_matchit")
diff --git a/runtime/ftplugin/zimbu.vim b/runtime/ftplugin/zimbu.vim
index 558aea7df0..24674776cb 100644
--- a/runtime/ftplugin/zimbu.vim
+++ b/runtime/ftplugin/zimbu.vim
@@ -1,7 +1,7 @@
" Vim filetype plugin file
" Language: Zimbu
" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2012 Sep 08
+" Last Change: 2017 Dec 05
" Only do this when not done yet for this buffer
if exists("b:did_ftplugin")
@@ -135,8 +135,10 @@ iabbr <buffer> <expr> until GCUpperSpace("until")
iabbr <buffer> <expr> while GCUpperSpace("while")
iabbr <buffer> <expr> repeat GCUpper("repeat")
-nnoremap <silent> <buffer> [[ m`:call ZimbuGoStartBlock()<CR>
-nnoremap <silent> <buffer> ]] m`:call ZimbuGoEndBlock()<CR>
+if !exists("no_plugin_maps") && !exists("no_zimbu_maps")
+ nnoremap <silent> <buffer> [[ m`:call ZimbuGoStartBlock()<CR>
+ nnoremap <silent> <buffer> ]] m`:call ZimbuGoEndBlock()<CR>
+endif
" Using a function makes sure the search pattern is restored
func! ZimbuGoStartBlock()
diff --git a/runtime/indent/javascript.vim b/runtime/indent/javascript.vim
index 2861716287..f3bf96aa97 100644
--- a/runtime/indent/javascript.vim
+++ b/runtime/indent/javascript.vim
@@ -2,7 +2,7 @@
" Language: Javascript
" Maintainer: Chris Paul ( https://github.com/bounceme )
" URL: https://github.com/pangloss/vim-javascript
-" Last Change: September 18, 2017
+" Last Change: December 4, 2017
" Only load this indent file when no other was loaded.
if exists('b:did_indent')
@@ -10,10 +10,6 @@ if exists('b:did_indent')
endif
let b:did_indent = 1
-" indent correctly if inside <script>
-" vim/vim@690afe1 for the switch from cindent
-let b:html_indent_script1 = 'inc'
-
" Now, set up our indentation expression and keys that trigger it.
setlocal indentexpr=GetJavascriptIndent()
setlocal autoindent nolisp nosmartindent
@@ -25,13 +21,6 @@ setlocal indentkeys+=0],0)
let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys<'
-" Regex of syntax group names that are or delimit string or are comments.
-let b:syng_strcom = get(b:,'syng_strcom','string\|comment\|regex\|special\|doc\|template\%(braces\)\@!')
-let b:syng_str = get(b:,'syng_str','string\|template\|special')
-" template strings may want to be excluded when editing graphql:
-" au! Filetype javascript let b:syng_str = '^\%(.*template\)\@!.*string\|special'
-" au! Filetype javascript let b:syng_strcom = '^\%(.*template\)\@!.*string\|comment\|regex\|special\|doc'
-
" Only define the function once.
if exists('*GetJavascriptIndent')
finish
@@ -40,6 +29,23 @@ endif
let s:cpo_save = &cpo
set cpo&vim
+" indent correctly if inside <script>
+" vim/vim@690afe1 for the switch from cindent
+" overridden with b:html_indent_script1
+call extend(g:,{'html_indent_script1': 'inc'},'keep')
+
+" Regex of syntax group names that are or delimit string or are comments.
+let s:bvars = {
+ \ 'syng_strcom': 'string\|comment\|regex\|special\|doc\|template\%(braces\)\@!',
+ \ 'syng_str': 'string\|template\|special' }
+" template strings may want to be excluded when editing graphql:
+" au! Filetype javascript let b:syng_str = '^\%(.*template\)\@!.*string\|special'
+" au! Filetype javascript let b:syng_strcom = '^\%(.*template\)\@!.*string\|comment\|regex\|special\|doc'
+
+function s:GetVars()
+ call extend(b:,extend(s:bvars,{'js_cache': [0,0,0]}),'keep')
+endfunction
+
" Get shiftwidth value
if exists('*shiftwidth')
function s:sw()
@@ -104,21 +110,22 @@ endfunction
function s:SkipFunc()
if s:top_col == 1
throw 'out of bounds'
- endif
- let s:top_col = 0
- if s:check_in
+ elseif s:check_in
if eval(s:skip_expr)
return 1
endif
let s:check_in = 0
elseif getline('.') =~ '\%<'.col('.').'c\/.\{-}\/\|\%>'.col('.').'c[''"]\|\\$'
if eval(s:skip_expr)
- let s:looksyn = a:firstline
return 1
endif
- elseif search('\m`\|\${\|\*\/','nW'.s:z,s:looksyn) && eval(s:skip_expr)
- let s:check_in = 1
- return 1
+ elseif search('\m`\|\${\|\*\/','nW'.s:z,s:looksyn)
+ if eval(s:skip_expr)
+ let s:check_in = 1
+ return 1
+ endif
+ else
+ let s:synid_cache[:] += [[line2byte('.') + col('.') - 1], ['']]
endif
let [s:looksyn, s:top_col] = getpos('.')[1:2]
endfunction
@@ -159,19 +166,29 @@ function s:Token()
return s:LookingAt() =~ '\k' ? expand('<cword>') : s:LookingAt()
endfunction
-function s:PreviousToken()
- let l:col = col('.')
+function s:PreviousToken(...)
+ let [l:pos, tok] = [getpos('.'), '']
if search('\m\k\{1,}\|\S','ebW')
- if search('\m\*\%#\/\|\/\/\%<'.a:firstline.'l','nbW',line('.')) && eval(s:in_comm)
- if s:SearchLoop('\S\ze\_s*\/[/*]','bW',s:in_comm)
- return s:Token()
+ if getline('.')[col('.')-2:col('.')-1] == '*/'
+ if eval(s:in_comm) && !s:SearchLoop('\S\ze\_s*\/[/*]','bW',s:in_comm)
+ call setpos('.',l:pos)
+ else
+ let tok = s:Token()
endif
- call cursor(a:firstline, l:col)
else
- return s:Token()
+ let two = a:0 || line('.') != l:pos[1] ? strridx(getline('.')[:col('.')],'//') + 1 : 0
+ if two && eval(s:in_comm)
+ call cursor(0,two)
+ let tok = s:PreviousToken(1)
+ if tok is ''
+ call setpos('.',l:pos)
+ endif
+ else
+ let tok = s:Token()
+ endif
endif
endif
- return ''
+ return tok
endfunction
function s:Pure(f,...)
@@ -183,23 +200,30 @@ function s:SearchLoop(pat,flags,expr)
endfunction
function s:ExprCol()
+ if getline('.')[col('.')-2] == ':'
+ return 1
+ endif
let bal = 0
- while s:SearchLoop('[{}?]\|\_[^:]\zs::\@!','bW',s:skip_expr)
+ while s:SearchLoop('[{}?:]','bW',s:skip_expr)
if s:LookingAt() == ':'
+ if getline('.')[col('.')-2] == ':'
+ call cursor(0,col('.')-1)
+ continue
+ endif
let bal -= 1
elseif s:LookingAt() == '?'
- let bal += 1
- if bal == 1
- break
+ if getline('.')[col('.'):col('.')+1] =~ '^\.\d\@!'
+ continue
+ elseif !bal
+ return 1
endif
+ let bal += 1
elseif s:LookingAt() == '{'
- let bal = !s:IsBlock()
- break
+ return !s:IsBlock()
elseif !s:GetPair('{','}','bW',s:skip_expr)
break
endif
endwhile
- return s:Nat(bal)
endfunction
" configurable regexes that define continuation lines, not including (, {, or [.
@@ -208,30 +232,29 @@ let s:opfirst = '^' . get(g:,'javascript_opfirst',
let s:continuation = get(g:,'javascript_continuation',
\ '\C\%([<=,.~!?/*^%|&:]\|+\@<!+\|-\@<!-\|=\@<!>\|\<\%(typeof\|new\|delete\|void\|in\|instanceof\|await\)\)') . '$'
-function s:Continues(ln,con)
- let tok = matchstr(a:con[-15:],s:continuation)
+function s:Continues()
+ let tok = matchstr(strpart(getline('.'),col('.')-15,15),s:continuation)
if tok =~ '[a-z:]'
- call cursor(a:ln, len(a:con))
return tok == ':' ? s:ExprCol() : s:PreviousToken() != '.'
elseif tok !~ '[/>]'
return tok isnot ''
endif
- return s:SynAt(a:ln, len(a:con)) !~? (tok == '>' ? 'jsflow\|^html' : 'regex')
+ return s:SynAt(line('.'),col('.')) !~? (tok == '>' ? 'jsflow\|^html' : 'regex')
endfunction
" Check if line 'lnum' has a balanced amount of parentheses.
-function s:Balanced(lnum)
- let [l:open, l:line] = [0, getline(a:lnum)]
- let pos = match(l:line, '[][(){}]')
+function s:Balanced(lnum,line)
+ let l:open = 0
+ let pos = match(a:line, '[][(){}]')
while pos != -1
if s:SynAt(a:lnum,pos + 1) !~? b:syng_strcom
- let l:open += match(' ' . l:line[pos],'[[({]')
+ let l:open += match(' ' . a:line[pos],'[[({]')
if l:open < 0
return
endif
endif
- let pos = match(l:line, !l:open ? '[][(){}]' : '()' =~ l:line[pos] ?
- \ '[()]' : '{}' =~ l:line[pos] ? '[{}]' : '[][]', pos + 1)
+ let pos = match(a:line, !l:open ? '[][(){}]' : '()' =~ a:line[pos] ?
+ \ '[()]' : '{}' =~ a:line[pos] ? '[{}]' : '[][]', pos + 1)
endwhile
return !l:open
endfunction
@@ -244,27 +267,38 @@ function s:OneScope()
\ s:Pure('s:PreviousToken') != '.' && !(tok == 'while' && s:DoWhile())
elseif s:Token() =~# '^else$\|^do$'
return s:Pure('s:PreviousToken') != '.'
+ elseif strpart(getline('.'),col('.')-2,2) == '=>'
+ call cursor(0,col('.')-1)
+ if s:PreviousToken() == ')'
+ return s:GetPair('(', ')', 'bW', s:skip_expr)
+ endif
+ return 1
endif
- return strpart(getline('.'),col('.')-2,2) == '=>'
endfunction
function s:DoWhile()
let cpos = searchpos('\m\<','cbW')
- if s:SearchLoop('\C[{}]\|\<\%(do\|while\)\>','bW',s:skip_expr)
- if s:{s:LookingAt() == '}' && s:GetPair('{','}','bW',s:skip_expr) ?
- \ 'Previous' : ''}Token() ==# 'do' && s:IsBlock()
- return 1
+ while s:SearchLoop('\C[{}]\|\<\%(do\|while\)\>','bW',s:skip_expr)
+ if s:LookingAt() =~ '\a'
+ if s:Pure('s:IsBlock')
+ if s:LookingAt() ==# 'd'
+ return 1
+ endif
+ break
+ endif
+ elseif s:LookingAt() != '}' || !s:GetPair('{','}','bW',s:skip_expr)
+ break
endif
- call call('cursor',cpos)
- endif
+ endwhile
+ call call('cursor',cpos)
endfunction
" returns total offset from braceless contexts. 'num' is the lineNr which
" encloses the entire context, 'cont' if whether a:firstline is a continued
" expression, which could have started in a braceless context
-function s:IsContOne(num,cont)
- let [l:num, b_l] = [a:num + !a:num, 0]
- let pind = a:num ? indent(a:num) + s:sw() : 0
+function s:IsContOne(cont)
+ let [l:num, b_l] = [b:js_cache[1] + !b:js_cache[1], 0]
+ let pind = b:js_cache[1] ? indent(b:js_cache[1]) + s:sw() : 0
let ind = indent('.') + !a:cont
while line('.') > l:num && ind > pind || line('.') == l:num
if indent('.') < ind && s:OneScope()
@@ -282,20 +316,16 @@ function s:IsContOne(num,cont)
return b_l
endfunction
-function s:Class()
- return (s:Token() ==# 'class' || s:PreviousToken() =~# '^class$\|^extends$') &&
- \ s:PreviousToken() != '.'
-endfunction
-
function s:IsSwitch()
- return s:PreviousToken() !~ '[.*]' &&
- \ (!s:GetPair('{','}','cbW',s:skip_expr) || s:IsBlock() && !s:Class())
+ call call('cursor',b:js_cache[1:])
+ return search('\m\C\%#.\_s*\%(\%(\/\/.*\_$\|\/\*\_.\{-}\*\/\)\@>\_s*\)*\%(case\|default\)\>','nWc'.s:z)
endfunction
" https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader
function s:IsBlock()
let tok = s:PreviousToken()
if join(s:stack) =~? 'xml\|jsx' && s:SynAt(line('.'),col('.')-1) =~? 'xml\|jsx'
+ let s:in_jsx = 1
return tok != '{'
elseif tok =~ '\k'
if tok ==# 'type'
@@ -320,7 +350,7 @@ function s:IsBlock()
endfunction
function GetJavascriptIndent()
- let b:js_cache = get(b:,'js_cache',[0,0,0])
+ call s:GetVars()
let s:synid_cache = [[],[]]
let l:line = getline(v:lnum)
" use synstack as it validates syn state and works in an empty line
@@ -334,7 +364,7 @@ function GetJavascriptIndent()
return -1
endif
elseif s:stack[-1] =~? b:syng_str
- if b:js_cache[0] == v:lnum - 1 && s:Balanced(v:lnum-1)
+ if b:js_cache[0] == v:lnum - 1 && s:Balanced(v:lnum-1,getline(v:lnum-1))
let b:js_cache[0] = v:lnum
endif
return -1
@@ -361,7 +391,7 @@ function GetJavascriptIndent()
call cursor(v:lnum,1)
let idx = index([']',')','}'],l:line[0])
if b:js_cache[0] > l:lnum && b:js_cache[0] < v:lnum ||
- \ b:js_cache[0] == l:lnum && s:Balanced(l:lnum)
+ \ b:js_cache[0] == l:lnum && s:Balanced(l:lnum,pline)
call call('cursor',b:js_cache[1:])
else
let [s:looksyn, s:top_col, s:check_in, s:l1] = [v:lnum - 1,0,0,
@@ -382,10 +412,10 @@ function GetJavascriptIndent()
let [b:js_cache[0], num] = [v:lnum, b:js_cache[1]]
- let [num_ind, is_op, b_l, l:switch_offset] = [s:Nat(indent(num)),0,0,0]
+ let [num_ind, is_op, b_l, l:switch_offset, s:in_jsx] = [s:Nat(indent(num)),0,0,0,0]
if !num || s:LookingAt() == '{' && s:IsBlock()
let ilnum = line('.')
- if num && s:LookingAt() == ')' && s:GetPair('(',')','bW',s:skip_expr)
+ if num && !s:in_jsx && s:LookingAt() == ')' && s:GetPair('(',')','bW',s:skip_expr)
if ilnum == num
let [num, num_ind] = [line('.'), indent('.')]
endif
@@ -399,23 +429,24 @@ function GetJavascriptIndent()
endif
endif
if idx == -1 && pline[-1:] !~ '[{;]'
+ call cursor(l:lnum, len(pline))
let sol = matchstr(l:line,s:opfirst)
if sol is '' || sol == '/' && s:SynAt(v:lnum,
\ 1 + len(getline(v:lnum)) - len(l:line)) =~? 'regex'
- if s:Continues(l:lnum,pline)
+ if s:Continues()
let is_op = s:sw()
endif
- elseif num && sol =~# '^\%(in\%(stanceof\)\=\|\*\)$'
- call call('cursor',b:js_cache[1:])
- if s:PreviousToken() =~ '\k' && s:Class()
- return num_ind + s:sw()
- endif
- let is_op = s:sw()
+ elseif num && sol =~# '^\%(in\%(stanceof\)\=\|\*\)$' &&
+ \ s:LookingAt() == '}' && s:GetPair('{','}','bW',s:skip_expr) &&
+ \ s:PreviousToken() == ')' && s:GetPair('(',')','bW',s:skip_expr) &&
+ \ (s:PreviousToken() == ']' || s:LookingAt() =~ '\k' &&
+ \ s:{s:PreviousToken() == '*' ? 'Previous' : ''}Token() !=# 'function')
+ return num_ind + s:sw()
else
let is_op = s:sw()
endif
call cursor(l:lnum, len(pline))
- let b_l = s:Nat(s:IsContOne(b:js_cache[1],is_op) - (!is_op && l:line =~ '^{')) * s:sw()
+ let b_l = s:Nat(s:IsContOne(is_op) - (!is_op && l:line =~ '^{')) * s:sw()
endif
elseif idx.s:LookingAt().&cino =~ '^-1(.*(' && (search('\m\S','nbW',num) || s:ParseCino('U'))
let pval = s:ParseCino('(')
@@ -431,10 +462,10 @@ function GetJavascriptIndent()
" main return
if l:line =~ '^[])}]\|^|}'
- if l:line_raw[0] == ')' && getline(num)[b:js_cache[2]-1] == '('
+ if l:line_raw[0] == ')'
if s:ParseCino('M')
return indent(l:lnum)
- elseif &cino =~# 'm' && !s:ParseCino('m')
+ elseif num && &cino =~# 'm' && !s:ParseCino('m')
return virtcol('.') - 1
endif
endif
diff --git a/runtime/syntax/apachestyle.vim b/runtime/syntax/apachestyle.vim
index 3695a11421..bd5c89d30f 100644
--- a/runtime/syntax/apachestyle.vim
+++ b/runtime/syntax/apachestyle.vim
@@ -1,8 +1,10 @@
" Vim syntax file
" Language: Apache-Style configuration files (proftpd.conf/apache.conf/..)
-" Maintainer: Christian Hammers <ch@westend.com>
-" URL: none
+" Maintainer: Ben RUBSON <ben.rubson@gmail.com>
+" Former Maintainer: Christian Hammers <ch@westend.com>
" ChangeLog:
+" 2017-12-17,ch
+" correctly detect comments
" 2001-05-04,ch
" adopted Vim 6.0 syntax style
" 1999-10-28,ch
@@ -27,8 +29,8 @@ endif
syn case ignore
-syn match apComment /^\s*#.*$/
syn match apOption /^\s*[^ \t#<=]*/
+syn match apComment /^\s*#.*$/
"syn match apLastValue /[^ \t<=#]*$/ contains=apComment ugly
" tags
diff --git a/runtime/syntax/html.vim b/runtime/syntax/html.vim
index 5f943a9496..991fd8af39 100644
--- a/runtime/syntax/html.vim
+++ b/runtime/syntax/html.vim
@@ -3,8 +3,8 @@
" Maintainer: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
" Previous Maintainer: Claudio Fleiner <claudio@fleiner.com>
" Repository: https://notabug.org/jorgesumle/vim-html-syntax
-" Last Change: 2017 Sep 30
-" included patch from Christian Brabandt to make use of the strikethrough attributes
+" Last Change: 2017 Dec 16
+" Included patch from Jorge Maldonado Ventura to add the dialog element
"
" Please check :help html.vim for some comments and a description of the options
@@ -100,11 +100,11 @@ syn keyword htmlArg contained summary tabindex valuetype version
" html 5 arg names
syn keyword htmlArg contained allowfullscreen async autocomplete autofocus
syn keyword htmlArg contained autoplay challenge contenteditable contextmenu
-syn keyword htmlArg contained controls crossorigin default dirname download
-syn keyword htmlArg contained draggable dropzone form formaction formenctype
-syn keyword htmlArg contained formmethod formnovalidate formtarget hidden
-syn keyword htmlArg contained high icon inputmode keytype kind list loop low
-syn keyword htmlArg contained max min minlength muted nonce novalidate open
+syn keyword htmlArg contained controls crossorigin default dialog dirname
+syn keyword htmlArg contained download draggable dropzone form formaction
+syn keyword htmlArg contained formenctype formmethod formnovalidate formtarget
+syn keyword htmlArg contained hidden high icon inputmode keytype kind list loop
+syn keyword htmlArg contained low max min minlength muted nonce novalidate open
syn keyword htmlArg contained optimum pattern placeholder poster preload
syn keyword htmlArg contained radiogroup required reversed sandbox spellcheck
syn keyword htmlArg contained sizes srcset srcdoc srclang step title translate
diff --git a/runtime/syntax/tex.vim b/runtime/syntax/tex.vim
index d5a5de65c8..1d777f8022 100644
--- a/runtime/syntax/tex.vim
+++ b/runtime/syntax/tex.vim
@@ -1,8 +1,8 @@
" Vim syntax file
" Language: TeX
" Maintainer: Charles E. Campbell <NdrchipO@ScampbellPfamily.AbizM>
-" Last Change: Oct 12, 2017
-" Version: 105
+" Last Change: Dec 11, 2017
+" Version: 107
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
"
" Notes: {{{1
@@ -396,8 +396,8 @@ endif
" Bad Math (mismatched): {{{1
if !exists("g:tex_no_math") && !s:tex_no_error
- syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
- syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
+ syn match texBadMath "\\end\s*{\s*\(array\|bBpvV]matrix\|split\|smallmatrix\)\s*}"
+ syn match texBadMath "\\end\s*{\s*\(displaymath\|equation\|eqnarray\|math\)\*\=\s*}"
syn match texBadMath "\\[\])]"
endif
@@ -436,17 +436,10 @@ if !exists("g:tex_no_math")
endfun
" Standard Math Zones: {{{2
- call TexNewMathZone("A","align",1)
- call TexNewMathZone("B","alignat",1)
- call TexNewMathZone("C","displaymath",1)
- call TexNewMathZone("D","eqnarray",1)
- call TexNewMathZone("E","equation",1)
- call TexNewMathZone("F","flalign",1)
- call TexNewMathZone("G","gather",1)
- call TexNewMathZone("H","math",1)
- call TexNewMathZone("I","multline",1)
- call TexNewMathZone("J","xalignat",1)
- call TexNewMathZone("K","xxalignat",0)
+ call TexNewMathZone("A","displaymath",1)
+ call TexNewMathZone("B","eqnarray",1)
+ call TexNewMathZone("C","equation",1)
+ call TexNewMathZone("D","math",1)
" Inline Math Zones: {{{2
if s:tex_fast =~# 'M'
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index 1551a314a3..60dd0e1227 100644
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -175,7 +175,7 @@ syn keyword vimFTOption contained detect indent off on plugin
" Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2
" ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking.
-syn cluster vimAugroupList contains=vimAugroup,vimIsCommand,vimCommand,vimUserCmd,vimExecute,vimNotFunc,vimFuncName,vimFunction,vimFunctionError,vimLineComment,vimMap,vimSpecFile,vimOper,vimNumber,vimOperParen,vimComment,vimString,vimSubst,vimMark,vimRegister,vimAddress,vimFilter,vimCmplxRepeat,vimComment,vimLet,vimSet,vimAutoCmd,vimRegion,vimSynLine,vimNotation,vimCtrlChar,vimFuncVar,vimContinue
+syn cluster vimAugroupList contains=vimAugroup,vimIsCommand,vimCommand,vimUserCmd,vimExecute,vimNotFunc,vimFuncName,vimFunction,vimFunctionError,vimLineComment,vimMap,vimSpecFile,vimOper,vimNumber,vimOperParen,vimComment,vimString,vimSubst,vimMark,vimRegister,vimAddress,vimFilter,vimCmplxRepeat,vimComment,vimLet,vimSet,vimAutoCmd,vimRegion,vimSynLine,vimNotation,vimCtrlChar,vimFuncVar,vimContinue,vimSetEqual,vimOption
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'a'
syn region vimAugroup fold matchgroup=vimAugroupKey start="\<aug\%[roup]\>\ze\s\+\K\k*" end="\<aug\%[roup]\>\ze\s\+[eE][nN][dD]\>" contains=vimAutoCmd,@vimAugroupList
else
@@ -191,7 +191,8 @@ syn keyword vimAugroupKey contained aug[roup]
" =========
syn cluster vimOperGroup contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,vimContinue
syn match vimOper "\(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\)[?#]\{0,2}" skipwhite nextgroup=vimString,vimSpecFile
-syn match vimOper "||\|&&\|[-+.]" skipwhite nextgroup=vimString,vimSpecFile
+syn match vimOper "\(\<is\>\|\<isnot\>\)[?#]\{0,2}" skipwhite nextgroup=vimString,vimSpecFile
+syn match vimOper "||\|&&\|[-+.]" skipwhite nextgroup=vimString,vimSpecFile
syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=@vimOperGroup
syn region vimOperParen matchgroup=vimSep start="{" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
@@ -537,7 +538,7 @@ syn match vimHiBang contained "!" skipwhite nextgroup=@vimHighlightCluster
syn match vimHiGroup contained "\i\+"
syn case ignore
-syn keyword vimHiAttrib contained none bold inverse italic reverse standout underline undercurl
+syn keyword vimHiAttrib contained none bold inverse italic nocombine reverse standout strikethrough underline undercurl
syn keyword vimFgBgAttrib contained none bg background fg foreground
syn case match
syn match vimHiAttribList contained "\i\+" contains=vimHiAttrib