0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

Updated runtime files.

This commit is contained in:
Bram Moolenaar 2017-01-10 13:31:15 +01:00
parent 6abda995a5
commit 68563937f5
10 changed files with 352 additions and 171 deletions

View File

@ -1,4 +1,4 @@
*develop.txt* For Vim version 8.0. Last change: 2016 Jan 31 *develop.txt* For Vim version 8.0. Last change: 2017 Jan 05
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -177,7 +177,7 @@ The basic steps to make changes to the code:
5. Make a patch with "git diff". You can also create a pull request on 5. Make a patch with "git diff". You can also create a pull request on
github, but it's the diff that matters. github, but it's the diff that matters.
6. Make a note about what changed, preferably mentioning the problem and the 6. Make a note about what changed, preferably mentioning the problem and the
solution. Send an email to the vim-dev maillist with an explanation and solution. Send an email to the |vim-dev| maillist with an explanation and
include the diff. Or create a pull request on github. include the diff. Or create a pull request on github.

View File

@ -1,4 +1,4 @@
*eval.txt* For Vim version 8.0. Last change: 2016 Nov 29 *eval.txt* For Vim version 8.0. Last change: 2017 Jan 08
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -7615,7 +7615,8 @@ systemlist({expr} [, {input}]) *systemlist()*
Same as |system()|, but returns a |List| with lines (parts of Same as |system()|, but returns a |List| with lines (parts of
output separated by NL) with NULs transformed into NLs. Output output separated by NL) with NULs transformed into NLs. Output
is the same as |readfile()| will output with {binary} argument is the same as |readfile()| will output with {binary} argument
set to "b". set to "b". Note that on MS-Windows you may get trailing CR
characters.
Returns an empty string on error. Returns an empty string on error.

View File

@ -1,4 +1,4 @@
*filetype.txt* For Vim version 8.0. Last change: 2016 Sep 09 *filetype.txt* For Vim version 8.0. Last change: 2017 Jan 04
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -573,6 +573,8 @@ Man {number} {name}
Global mapping: Global mapping:
<Leader>K Displays the manual page for the word under the cursor. <Leader>K Displays the manual page for the word under the cursor.
<Plug>ManPreGetPage idem, allows for using a mapping: >
nmap <F1> <Plug>ManPreGetPage<CR>
Local mappings: Local mappings:
CTRL-] Jump to the manual page for the word under the cursor. CTRL-] Jump to the manual page for the word under the cursor.

View File

@ -96,21 +96,18 @@ mention that.
*mail-list* *maillist* *mail-list* *maillist*
There are several mailing lists for Vim: There are several mailing lists for Vim:
<vim@vim.org> <vim@vim.org> *vim-use* *vim_use*
For discussions about using existing versions of Vim: Useful mappings, For discussions about using existing versions of Vim: Useful mappings,
questions, answers, where to get a specific version, etc. There are questions, answers, where to get a specific version, etc. There are
quite a few people watching this list and answering questions, also quite a few people watching this list and answering questions, also
for beginners. Don't hesitate to ask your question here. for beginners. Don't hesitate to ask your question here.
<vim-dev@vim.org> *vim-dev* *vimdev* <vim-dev@vim.org> *vim-dev* *vim_dev* *vimdev*
For discussions about changing Vim: New features, porting, patches, For discussions about changing Vim: New features, porting, patches,
beta-test versions, etc. beta-test versions, etc.
<vim-announce@vim.org> *vim-announce* <vim-announce@vim.org> *vim-announce* *vim_announce*
Announcements about new versions of Vim; also for beta-test versions Announcements about new versions of Vim; also for beta-test versions
and ports to different systems. This is a read-only list. and ports to different systems. This is a read-only list.
<vim-multibyte@vim.org> *vim-multibyte* <vim-mac@vim.org> *vim-mac* *vim_mac*
For discussions about using and improving the multi-byte aspects of
Vim.
<vim-mac@vim.org> *vim-mac*
For discussions about using and improving the Macintosh version of For discussions about using and improving the Macintosh version of
Vim. Vim.

View File

@ -9124,15 +9124,19 @@ vim-dev intro.txt /*vim-dev*
vim-mac intro.txt /*vim-mac* vim-mac intro.txt /*vim-mac*
vim-modes intro.txt /*vim-modes* vim-modes intro.txt /*vim-modes*
vim-modes-intro intro.txt /*vim-modes-intro* vim-modes-intro intro.txt /*vim-modes-intro*
vim-multibyte intro.txt /*vim-multibyte*
vim-script-intro usr_41.txt /*vim-script-intro* vim-script-intro usr_41.txt /*vim-script-intro*
vim-use intro.txt /*vim-use*
vim-variable eval.txt /*vim-variable* vim-variable eval.txt /*vim-variable*
vim.vim syntax.txt /*vim.vim* vim.vim syntax.txt /*vim.vim*
vim7 version7.txt /*vim7* vim7 version7.txt /*vim7*
vim8 version8.txt /*vim8* vim8 version8.txt /*vim8*
vim: options.txt /*vim:* vim: options.txt /*vim:*
vim_announce intro.txt /*vim_announce*
vim_dev intro.txt /*vim_dev*
vim_did_enter-variable eval.txt /*vim_did_enter-variable* vim_did_enter-variable eval.txt /*vim_did_enter-variable*
vim_mac intro.txt /*vim_mac*
vim_starting eval.txt /*vim_starting* vim_starting eval.txt /*vim_starting*
vim_use intro.txt /*vim_use*
vimball pi_vimball.txt /*vimball* vimball pi_vimball.txt /*vimball*
vimball-contents pi_vimball.txt /*vimball-contents* vimball-contents pi_vimball.txt /*vimball-contents*
vimball-extract pi_vimball.txt /*vimball-extract* vimball-extract pi_vimball.txt /*vimball-extract*

View File

@ -1,4 +1,4 @@
*todo.txt* For Vim version 8.0. Last change: 2017 Jan 02 *todo.txt* For Vim version 8.0. Last change: 2017 Jan 09
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -29,8 +29,8 @@ be worked on, but only if you sponsor Vim development. See |sponsor|.
Issues can also be entered online: https://github.com/vim/vim/issues Issues can also be entered online: https://github.com/vim/vim/issues
Only use this for bug reports, not for questions! Those belong on the Only use this for bug reports, not for questions! Those belong on the
maillist. Updates will be forwarded to the vim_dev maillist. Issues entered maillist. Updates will be forwarded to the |vim_dev| maillist. Issues
there will not be repeated below, unless there is extra information. entered there will not be repeated below, unless there is extra information.
*known-bugs* *known-bugs*
-------------------- Known bugs and current work ----------------------- -------------------- Known bugs and current work -----------------------
@ -109,11 +109,6 @@ Regexp problems:
Make html indent file use javascript indent, now that it's not just cindent. Make html indent file use javascript indent, now that it's not just cindent.
#1220 #1220
Patch to fix completion of :filter command. (Ichizok, 2016 Dec 3, #1299)
Patch to use buffer id for system() and systemlist() (LemonBoy, 2016 Nov 7,
#1240)
Concatenation with null string causes an error: 'a'[1:0] .. 'b' Concatenation with null string causes an error: 'a'[1:0] .. 'b'
Might as well handle it like an empty string. Might as well handle it like an empty string.
@ -123,27 +118,12 @@ position in 'runtimepath'. (Dugan Chen, 2016 Nov 18)
json_encode(): should convert to utf-8. (Nikolai Pavlov, 2016 Jan 23) json_encode(): should convert to utf-8. (Nikolai Pavlov, 2016 Jan 23)
What if there is an invalid character? What if there is an invalid character?
Putting "k" early in 'complete' does not use dictionary first? Include rust files. (Klabnik, #1356)
(RubenGZ, 2016 Dec 10, #1316)
patch proposed by Hirohito Higashi, 2016 Dec 11.
Patch to fix NULL pointer when sorting zero elements. (Dominique, 2016 Dec 15) More float tests. (Dominique, #1364)
Patch to test float functions. (Dominique, 2016 Dec 16)
Patch to improve completion of :syntax command. (Dominique, 2016 Dec 12)
Patch to use IEMSG() in more places. (Dominique, 2016 Dec 27)
Patch to avoid ubsan warning for integer overflow. (Dominique, 2016 Dec 26) Patch to avoid ubsan warning for integer overflow. (Dominique, 2016 Dec 26)
Bug: ":earlier 100d" doesn't work after using undo file.
(Pavol Juhas, 2016 Nov 15, #1254)
Fix by Christian, but lacks a test.
Test in testdir/test_undo.vim doesn't catch the problem.
Test by Pavol Juhas, Nov 22.
Patch with test (Pavol Juhas,, 2016 Dec 3, #1300)
Bug: Json with same key should not give internal error. (Lcd, 2016 Oct 26) Bug: Json with same key should not give internal error. (Lcd, 2016 Oct 26)
Make dict_add give a duplicate key error. Make dict_add give a duplicate key error.
@ -166,11 +146,16 @@ Patch to deal with changed configure events in GTK 3. (Jan Alexander Steffens,
2016 Oct 23 #1193) 2016 Oct 23 #1193)
Remarks from nuko8, 2016 Nov 2. Remarks from nuko8, 2016 Nov 2.
Multi-byte bug: dv} splits char. (Urtica Dioica, 2017 Jan 9)
Patch to change order of compiler flags. (Yousong Zhou, 2016 Sep 19, #1100) Patch to change order of compiler flags. (Yousong Zhou, 2016 Sep 19, #1100)
Patch to add command line completion for :cexpr commands. (Yegappan Patch to add command line completion for :cexpr commands. (Yegappan
Lakshmanan, 2016 Dec 13) Lakshmanan, 2016 Dec 13)
Patch for :pyx, run python commands depending on the supported version.
(Marc Weber, update from Ken Takata, 2016 Sep 19, 2017 Jan 6)
Patch to avoid warnings for overflow. (Mike Williams, 2016 Dec 16) Patch to avoid warnings for overflow. (Mike Williams, 2016 Dec 16)
Update Dec 19. Update Dec 19.
@ -195,6 +180,9 @@ https://github.com/neovim/neovim/pull/5737#issuecomment-266055165
Patch for better explanation of 'compatible' side effects. Patch for better explanation of 'compatible' side effects.
https://github.com/vim/vim/pull/1161/files https://github.com/vim/vim/pull/1161/files
Patch to add 'makeencoding', useful when the system encoding differs from
Vim's 'encoding' setting. (Ken Takata, 2017 Jan 6)
Patch to adjust marks when adding a new line to the end of buffer in diff Patch to adjust marks when adding a new line to the end of buffer in diff
mode. (James McCoy, 2016 Dec 14, #1329) mode. (James McCoy, 2016 Dec 14, #1329)
@ -240,6 +228,9 @@ Add tests for using number larger than number of lines in buffer.
Patch to make v:shell_error writable. (Christian Brabandt, 2016 Sep 27) Patch to make v:shell_error writable. (Christian Brabandt, 2016 Sep 27)
Useful to restore it. Is there another solution? Useful to restore it. Is there another solution?
"ci[" does not look for next [ like ci" does look for next ".
(J.F. 2017 Jan 7)
On MS-Windows with 'clipboard' set to "unnamed" this doesn't work to double On MS-Windows with 'clipboard' set to "unnamed" this doesn't work to double
lines: :g/^/normal yyp On Unix it works OK. (Bryce Orgill, 2016 Nov 5) lines: :g/^/normal yyp On Unix it works OK. (Bryce Orgill, 2016 Nov 5)
@ -248,6 +239,10 @@ Patch for wrong cursor position on wrapped line, involving breakindent.
Patch for 'cursorlinenr' option. (Ozaki Kiichi, 2016 Nov 30) Patch for 'cursorlinenr' option. (Ozaki Kiichi, 2016 Nov 30)
When adding an item to a new quickfix list make ":cnext" jump to that item.
Make a difference being at the first item and not having used :cnext at all.
(Afanasiy Fet, 2017 Jan 3)
Invalid behavior with NULL list. (Nikolai Pavlov, #768) Invalid behavior with NULL list. (Nikolai Pavlov, #768)
E.g. deepcopy(test_null_list()) E.g. deepcopy(test_null_list())
@ -280,6 +275,9 @@ sort() is not stable when using numeric/float sort (Nikolay Pavlov, 2016 Sep
Patch to add "cmdline" completion to getcompletion(). (Shougo, Oct 1, #1140) Patch to add "cmdline" completion to getcompletion(). (Shougo, Oct 1, #1140)
Feature request: Complete members of a dictionary. (Luc Hermitte, 2017 Jan 4,
#1350)
Patch for systemlist(), add empty item. (thinca, Sep 30, #1135) Patch for systemlist(), add empty item. (thinca, Sep 30, #1135)
Add an argument to choose binary or non-binary (like readfile()), when omitted Add an argument to choose binary or non-binary (like readfile()), when omitted
use the current behavior. use the current behavior.
@ -307,9 +305,6 @@ Patch to order results from taglist(). (Duncan McDougall, 2016 Oct 25)
patch for 'spellcamelcase' option: spellcheck each CamelCased word. patch for 'spellcamelcase' option: spellcheck each CamelCased word.
(Ben Tucker, 2016 Dec 2) (Ben Tucker, 2016 Dec 2)
Patch for :pyx, run python commands depending on the supported version.
(Marc Weber, update from Ken Takata, 2016 Sep 19)
When using ":diffput" through a mapping, undo in the target buffer isn't When using ":diffput" through a mapping, undo in the target buffer isn't
synced. (Ryan Carney, 2016 Sep 14) synced. (Ryan Carney, 2016 Sep 14)
@ -333,6 +328,19 @@ Jul 25, #948)
Patch to fix wrong encoding of error message on Cygwin/MSYS terminal. Patch to fix wrong encoding of error message on Cygwin/MSYS terminal.
(Ken Takata, 2016 Oct 4) (Ken Takata, 2016 Oct 4)
Patch to introduce 'cmdencoding'. (Ken Takata, Aug 18?)
Better help Aug 19.
Problem: applies to too many commands, such as :cbuffer.
Updated patch with three options, 2016 Sep 8.
Win32: When running ":make" and 'encoding' differs from the system locale,
the output should be converted. Esp. when 'encoding' is "utf-8". (Yongwei
Wu) Should we use 'termencoding' for this?
Patch to add 'systemencoding', convert between 'encoding' and this for file
names, shell commands and the like. (Kikuchan, 2010 Oct 14)
Assume the system converts between the actual encoding of the filesystem to
the system encoding (usually utf-8).
'hlsearch' interferes with a Conceal match. (Rom Grk, 2016 Aug 9) 'hlsearch' interferes with a Conceal match. (Rom Grk, 2016 Aug 9)
Patch to add context information to quickfix/location list. (Yegappan Patch to add context information to quickfix/location list. (Yegappan
@ -467,14 +475,6 @@ Should use /usr/local/share/applications or /usr/share/applications.
Or use $XDG_DATA_DIRS. Or use $XDG_DATA_DIRS.
Also need to run update-desktop-database (Kuriyama Kazunobu, 2015 Nov 4) Also need to run update-desktop-database (Kuriyama Kazunobu, 2015 Nov 4)
Patch to introduce 'cmdencoding'. (Ken Takata, Aug 18?)
Better help Aug 19.
Problem: applies to too many commands, such as :cbuffer.
Updated patch with three options, 2016 Sep 8.
Win32: When running ":make" and 'encoding' differs from the system locale,
the output should be converted. Esp. when 'encoding' is "utf-8". (Yongwei
Wu) Should we use 'termencoding' for this?
Patch to have text objects defined by arbitrary single characters. (Daniel Patch to have text objects defined by arbitrary single characters. (Daniel
Thau, 2013 Nov 20, 2014 Jan 29, 2014 Jan 31) Thau, 2013 Nov 20, 2014 Jan 29, 2014 Jan 31)
Added tests (James McCoy, 2016 Aug 3). Still needs more work. Added tests (James McCoy, 2016 Aug 3). Still needs more work.
@ -488,6 +488,9 @@ Access to uninitialized memory in match_backref() regexp_nda.c:4882
":cd C:\Windows\System32\drivers\etc*" does not work, even though the ":cd C:\Windows\System32\drivers\etc*" does not work, even though the
directory exists. (Sergio Gallelli, 2013 Dec 29) directory exists. (Sergio Gallelli, 2013 Dec 29)
In debug mode one can inspect variables, but not the function parameters
(starting with a:). (Luc Hermitte, 2017 Jan 4, #1352)
7 Add a watchpoint in the debug mode: An expression that breaks execution 7 Add a watchpoint in the debug mode: An expression that breaks execution
when evaluating to non-zero. Add the "watchadd expr" command, stop when when evaluating to non-zero. Add the "watchadd expr" command, stop when
the value of the expression changes. ":watchdel" deletes an item, the value of the expression changes. ":watchdel" deletes an item,
@ -1355,11 +1358,6 @@ Regexp engine performance:
7.2.274. (Christian Brabandt, 2010 May 27) Generally, folding with 7.2.274. (Christian Brabandt, 2010 May 27) Generally, folding with
'foldmethod' set to "syntax" is slow. Do profiling to find out why. 'foldmethod' set to "syntax" is slow. Do profiling to find out why.
Patch to add 'systemencoding', convert between 'encoding' and this for file
names, shell commands and the like. (Kikuchan, 2010 Oct 14)
Assume the system converts between the actual encoding of the filesystem to
the system encoding (usually utf-8).
Problem producing tags file when hebrew.frx is present. It has a BOM. Problem producing tags file when hebrew.frx is present. It has a BOM.
Results in E670. (Tony Mechelynck, 2010 May 2) Results in E670. (Tony Mechelynck, 2010 May 2)

View File

@ -1,7 +1,7 @@
" Vim support file to detect file types " Vim support file to detect file types
" "
" Maintainer: Bram Moolenaar <Bram@vim.org> " Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2016 Oct 31 " Last Change: 2017 Jan 06
" Listen very carefully, I will say this only once " Listen very carefully, I will say this only once
if exists("did_load_filetypes") if exists("did_load_filetypes")
@ -309,7 +309,10 @@ au BufNewFile,BufRead *.bl setf blank
au BufNewFile,BufRead */etc/blkid.tab,*/etc/blkid.tab.old setf xml au BufNewFile,BufRead */etc/blkid.tab,*/etc/blkid.tab.old setf xml
" Bazel (http://bazel.io) " Bazel (http://bazel.io)
autocmd BufRead,BufNewFile *.bzl,BUILD,WORKSPACE setfiletype bzl autocmd BufRead,BufNewFile *.bzl,WORKSPACE setfiletype bzl
if has("fname_case")
autocmd BufRead,BufNewFile BUILD setfiletype bzl
endif
" C or lpc " C or lpc
au BufNewFile,BufRead *.c call s:FTlpc() au BufNewFile,BufRead *.c call s:FTlpc()

View File

@ -1,7 +1,7 @@
" Vim filetype plugin file " Vim filetype plugin file
" Language: man " Language: man
" Maintainer: SungHyun Nam <goweol@gmail.com> " Maintainer: SungHyun Nam <goweol@gmail.com>
" Last Change: 2016 Jun 20 " Last Change: 2017 Jan 04
" To make the ":Man" command available before editing a manual page, source " To make the ":Man" command available before editing a manual page, source
" this script from your startup vimrc file. " this script from your startup vimrc file.
@ -47,6 +47,7 @@ endif
if exists(":Man") != 2 if exists(":Man") != 2
com -nargs=+ Man call s:GetPage(<f-args>) com -nargs=+ Man call s:GetPage(<f-args>)
nmap <Leader>K :call <SID>PreGetPage(0)<CR> nmap <Leader>K :call <SID>PreGetPage(0)<CR>
nmap <Plug>ManPreGetPage :call <SID>PreGetPage(0)<CR>
endif endif
" Define functions only once. " Define functions only once.

View File

@ -2,7 +2,7 @@
" Language: Javascript " Language: Javascript
" Maintainer: Chris Paul ( https://github.com/bounceme ) " Maintainer: Chris Paul ( https://github.com/bounceme )
" URL: https://github.com/pangloss/vim-javascript " URL: https://github.com/pangloss/vim-javascript
" Last Change: August 25, 2016 " Last Change: December 31, 2016
" Only load this indent file when no other was loaded. " Only load this indent file when no other was loaded.
if exists('b:did_indent') if exists('b:did_indent')
@ -12,11 +12,10 @@ let b:did_indent = 1
" Now, set up our indentation expression and keys that trigger it. " Now, set up our indentation expression and keys that trigger it.
setlocal indentexpr=GetJavascriptIndent() setlocal indentexpr=GetJavascriptIndent()
setlocal nolisp noautoindent nosmartindent setlocal autoindent nolisp nosmartindent
setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e setlocal indentkeys+=0],0)
setlocal cinoptions+=j1,J1
let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys< cinoptions<' let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys<'
" Only define the function once. " Only define the function once.
if exists('*GetJavascriptIndent') if exists('*GetJavascriptIndent')
@ -37,158 +36,329 @@ else
endfunction endfunction
endif endif
let s:line_pre = '^\s*\%(\%(\%(\/\*.\{-}\)\=\*\+\/\s*\)\=\)\@>' " searchpair() wrapper
let s:expr_case = s:line_pre . '\%(\%(case\>.\+\)\|default\)\s*:' if has('reltime')
function s:GetPair(start,end,flags,skip,time,...)
return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 2000,0] + a:000),a:time)
endfunction
else
function s:GetPair(start,end,flags,skip,...)
return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 1000,get(a:000,1)]))
endfunction
endif
" Regex of syntax group names that are or delimit string or are comments. " Regex of syntax group names that are or delimit string or are comments.
let s:syng_strcom = '\%(s\%(tring\|pecial\)\|comment\|regex\|doc\|template\)' let s:syng_strcom = 'string\|comment\|regex\|special\|doc\|template'
let s:syng_str = 'string\|template'
" Regex of syntax group names that are strings or documentation. let s:syng_com = 'comment\|doc'
let s:syng_comment = '\%(comment\|doc\)'
" Expression used to check whether we should skip a match with searchpair(). " Expression used to check whether we should skip a match with searchpair().
let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'"
if has('reltime') function s:skip_func()
function s:GetPair(start,end,flags,time) if !s:free || search('\m`\|\*\/','nW',s:looksyn)
return searchpair(a:start,'',a:end,a:flags,s:skip_expr,max([prevnonblank(v:lnum) - 2000,0]),a:time) let s:free = !eval(s:skip_expr)
endfunction let s:looksyn = s:free ? line('.') : s:looksyn
else return !s:free
function s:GetPair(start,end,flags,n) endif
return searchpair(a:start,'',a:end,a:flags,0,max([prevnonblank(v:lnum) - 2000,0])) let s:looksyn = line('.')
endfunction return (search('\m\/','nbW',s:looksyn) || search('\m[''"]\|\\$','nW',s:looksyn)) && eval(s:skip_expr)
endif endfunction
let s:line_term = '\s*\%(\%(\/\%(\%(\*.\{-}\*\/\)\|\%(\*\+\)\)\)\s*\)\=$' function s:alternatePair(stop)
let pos = getpos('.')[1:2]
while search('\m[][(){}]','bW',a:stop)
if !s:skip_func()
let idx = stridx('])}',s:looking_at())
if idx + 1
if !s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,a:stop)
break
endif
else
return
endif
endif
endwhile
call call('cursor',pos)
endfunction
function s:save_pos(f,...)
let l:pos = getpos('.')[1:2]
let ret = call(a:f,a:000)
call call('cursor',l:pos)
return ret
endfunction
function s:syn_at(l,c)
return synIDattr(synID(a:l,a:c,0),'name')
endfunction
function s:looking_at()
return getline('.')[col('.')-1]
endfunction
function s:token()
return s:looking_at() =~ '\k' ? expand('<cword>') : s:looking_at()
endfunction
function s:b_token()
if s:looking_at() =~ '\k'
call search('\m\<','cbW')
endif
return search('\m\S','bW')
endfunction
function s:previous_token()
let l:n = line('.')
while s:b_token()
if (s:looking_at() == '/' || line('.') != l:n && search('\m\/\/','nbW',
\ line('.'))) && s:syn_at(line('.'),col('.')) =~? s:syng_com
call search('\m\_[^/]\zs\/[/*]','bW')
else
return s:token()
endif
endwhile
return ''
endfunction
function s:others(p)
return "((line2byte(line('.')) + col('.')) <= ".(line2byte(a:p[0]) + a:p[1]).") || ".s:skip_expr
endfunction
function s:tern_skip(p)
return s:GetPair('{','}','nbW',s:others(a:p),200,a:p[0]) > 0
endfunction
function s:tern_col(p)
return s:GetPair('?',':\@<!::\@!','nbW',s:others(a:p)
\ .' || s:tern_skip('.string(a:p).')',200,a:p[0]) > 0
endfunction
function s:label_col()
let pos = getpos('.')[1:2]
let [s:looksyn,s:free] = pos
call s:alternatePair(0)
if s:save_pos('s:IsBlock')
let poss = getpos('.')[1:2]
return call('cursor',pos) || !s:tern_col(poss)
elseif s:looking_at() == ':'
return !s:tern_col([0,0])
endif
endfunction
" configurable regexes that define continuation lines, not including (, {, or [. " configurable regexes that define continuation lines, not including (, {, or [.
if !exists('g:javascript_opfirst') let s:opfirst = '^' . get(g:,'javascript_opfirst',
let g:javascript_opfirst = '\%([<>,:?^%|*&]\|\/[^/*]\|\([-.+]\)\1\@!\|=>\@!\|in\%(stanceof\)\=\>\)' \ '\%([<>=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)')
endif let s:continuation = get(g:,'javascript_continuation',
if !exists('g:javascript_continuation') \ '\%([<=,.~!?/*^%|&:]\|+\@<!+\|-\@<!-\|=\@<!>\|\<\%(typeof\|delete\|void\|in\|instanceof\)\)') . '$'
let g:javascript_continuation = '\%([<=,.?/*:^%|&]\|+\@<!+\|-\@<!-\|=\@<!>\|\<in\%(stanceof\)\=\)'
endif
let g:javascript_opfirst = s:line_pre . g:javascript_opfirst function s:continues(ln,con)
let g:javascript_continuation .= s:line_term return !cursor(a:ln, match(' '.a:con,s:continuation)) &&
\ eval((['s:syn_at(line("."),col(".")) !~? "regex"'] +
function s:OneScope(lnum,text,add) \ repeat(['s:previous_token() != "."'],5) + [1])[
return a:text =~# '\%(\<else\|\<do\|=>\)' . s:line_term ? 'no b' : \ index(split('/ typeof in instanceof void delete'),s:token())])
\ ((a:add && a:text =~ s:line_pre . '$' && search('\%' . s:PrevCodeLine(a:lnum - 1) . 'l.)' . s:line_term)) ||
\ cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1) &&
\ s:GetPair('(', ')', 'cbW', 100) > 0 && search('\C\l\+\_s*\%#','bW') &&
\ (a:add || ((expand('<cword>') !=# 'while' || !s:GetPair('\C\<do\>', '\C\<while\>','nbW',100)) &&
\ (expand('<cword>') !=# 'each' || search('\C\<for\_s\+\%#','nbW')))) ? expand('<cword>') : ''
endfunction endfunction
" https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader " get the line of code stripped of comments and move cursor to the last
function s:IsBlock() " non-comment char.
return getline(line('.'))[col('.')-1] == '{' && !search( function s:Trim(ln)
\ '\C\%(\<return\s*\|\%([-=~!<*+,.?^%|&\[(]\|=\@<!>\|\*\@<!\/\|\<\%(var\|const\|let\|import\|export\%(\_s\+default\)\=\|yield\|delete\|void\|t\%(ypeof\|hrow\)\|new\|in\%(stanceof\)\=\)\)\_s*\)\%#','bnW') && let pline = substitute(getline(a:ln),'\s*$','','')
\ (!search(':\_s*\%#','bW') || (!s:GetPair('[({[]','[])}]','bW',200) || s:IsBlock())) let l:max = max([match(pline,'.*[^/]\zs\/[/*]'),0])
while l:max && s:syn_at(a:ln, strlen(pline)) =~? s:syng_com
let pline = substitute(strpart(pline, 0, l:max),'\s*$','','')
let l:max = max([match(pline,'.*[^/]\zs\/[/*]'),0])
endwhile
return cursor(a:ln,strlen(pline)) ? pline : pline
endfunction endfunction
" Auxiliary Functions {{{2 " Find line above 'lnum' that isn't empty or in a comment
" Find line above 'lnum' that isn't empty, in a comment, or in a string.
function s:PrevCodeLine(lnum) function s:PrevCodeLine(lnum)
let l:lnum = prevnonblank(a:lnum) let l:n = prevnonblank(a:lnum)
while l:lnum while l:n
if synIDattr(synID(l:lnum,matchend(getline(l:lnum), '^\s*[^''"]'),0),'name') !~? s:syng_strcom if getline(l:n) =~ '^\s*\/[/*]'
return l:lnum if (stridx(getline(l:n),'`') > 0 || getline(l:n-1)[-1:] == '\') &&
\ s:syn_at(l:n,1) =~? s:syng_str
return l:n
endif
let l:n = prevnonblank(l:n-1)
elseif s:syn_at(l:n,1) =~? s:syng_com
let l:n = s:save_pos('eval',
\ 'cursor('.l:n.',1) + search(''\m\/\*'',"bW")')
else
return l:n
endif endif
let l:lnum = prevnonblank(l:lnum - 1)
endwhile endwhile
endfunction endfunction
" Check if line 'lnum' has a balanced amount of parentheses. " Check if line 'lnum' has a balanced amount of parentheses.
function s:Balanced(lnum) function s:Balanced(lnum)
let [open_0,open_2,open_4] = [0,0,0] let l:open = 0
let l:line = getline(a:lnum) let l:line = getline(a:lnum)
let pos = match(l:line, '[][(){}]', 0) let pos = match(l:line, '[][(){}]', 0)
while pos != -1 while pos != -1
if synIDattr(synID(a:lnum,pos + 1,0),'name') !~? s:syng_strcom if s:syn_at(a:lnum,pos + 1) !~? s:syng_strcom
let idx = stridx('(){}[]', l:line[pos]) let l:open += match(' ' . l:line[pos],'[[({]')
if idx % 2 == 0 if l:open < 0
let open_{idx} = open_{idx} + 1 return
else
let open_{idx - 1} = open_{idx - 1} - 1
endif endif
endif endif
let pos = match(l:line, '[][(){}]', pos + 1) let pos = match(l:line, '[][(){}]', pos + 1)
endwhile endwhile
return (!open_4 + !open_2 + !open_0) - 2 return !l:open
endfunction
function s:OneScope(lnum)
let pline = s:Trim(a:lnum)
let kw = 'else do'
if pline[-1:] == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0
call s:previous_token()
let kw = 'for if let while with'
if index(split('await each'),s:token()) + 1
call s:previous_token()
let kw = 'for'
endif
endif
return pline[-2:] == '=>' || index(split(kw),s:token()) + 1 &&
\ s:save_pos('s:previous_token') != '.'
endfunction
" returns braceless levels started by 'i' and above lines * &sw. 'num' is the
" lineNr which encloses the entire context, 'cont' if whether line 'i' + 1 is
" a continued expression, which could have started in a braceless context
function s:iscontOne(i,num,cont)
let [l:i, l:num, bL] = [a:i, a:num + !a:num, 0]
let pind = a:num ? indent(l:num) + s:W : 0
let ind = indent(l:i) + (a:cont ? 0 : s:W)
while l:i >= l:num && (ind > pind || l:i == l:num)
if indent(l:i) < ind && s:OneScope(l:i)
let bL += s:W
let l:i = line('.')
elseif !a:cont || bL || ind < indent(a:i)
break
endif
let ind = min([ind, indent(l:i)])
let l:i = s:PrevCodeLine(l:i - 1)
endwhile
return bL
endfunction
" https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader
function s:IsBlock()
if s:looking_at() == '{'
let l:n = line('.')
let char = s:previous_token()
let syn = char =~ '[{>/]' ? s:syn_at(line('.'),col('.')-(char == '{')) : ''
if syn =~? 'xml\|jsx'
return char != '{'
elseif char =~ '\k'
return index(split('return const let import export yield default delete var await void typeof throw case new in instanceof')
\ ,char) < (line('.') != l:n) || s:previous_token() == '.'
elseif char == '>'
return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow'
elseif char == ':'
return getline('.')[col('.')-2] != ':' && s:label_col()
endif
return syn =~? 'regex' || char !~ '[-=~!<*+,/?^%|&([]'
endif
endfunction endfunction
" }}}
function GetJavascriptIndent() function GetJavascriptIndent()
if !exists('b:js_cache') let b:js_cache = get(b:,'js_cache',[0,0,0])
let b:js_cache = [0,0,0]
endif
" Get the current line. " Get the current line.
let l:line = getline(v:lnum) call cursor(v:lnum,1)
let syns = synIDattr(synID(v:lnum, 1, 0), 'name') let l:line = getline('.')
let syns = s:syn_at(v:lnum, 1)
" start with strings,comments,etc.{{{2 " start with strings,comments,etc.
if (l:line !~ '^[''"`]' && syns =~? '\%(string\|template\)') || if syns =~? s:syng_com
\ (l:line !~ '^\s*[/*]' && syns =~? s:syng_comment) if l:line =~ '^\s*\*'
return cindent(v:lnum)
elseif l:line !~ '^\s*\/[/*]'
return -1
endif
elseif syns =~? s:syng_str && l:line !~ '^[''"]'
if b:js_cache[0] == v:lnum - 1 && s:Balanced(v:lnum-1)
let b:js_cache[0] = v:lnum
endif
return -1 return -1
endif endif
if l:line !~ '^\%(\/\*\|\s*\/\/\)' && syns =~? s:syng_comment
return cindent(v:lnum)
endif
let l:lnum = s:PrevCodeLine(v:lnum - 1) let l:lnum = s:PrevCodeLine(v:lnum - 1)
if l:lnum == 0 if !l:lnum
return 0 return
endif endif
if (l:line =~# s:expr_case) let l:line = substitute(l:line,'^\s*','','')
let cpo_switch = &cpo if l:line[:1] == '/*'
set cpo+=% let l:line = substitute(l:line,'^\%(\/\*.\{-}\*\/\s*\)*','','')
let ind = cindent(v:lnum) endif
let &cpo = cpo_switch if l:line =~ '^\/[/*]'
return ind let l:line = ''
endif endif
"}}}
" the containing paren, bracket, curly. Memoize, last lineNr either has the " the containing paren, bracket, or curly. Many hacks for performance
" same scope or starts a new one, unless if it closed a scope. let idx = strlen(l:line) ? stridx('])}',l:line[0]) : -1
call cursor(v:lnum,1) if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum &&
if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && b:js_cache[0] && \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum))
\ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum) > 0) call call('cursor',b:js_cache[1:])
let num = b:js_cache[1]
elseif syns != '' && l:line[0] =~ '\s'
let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] :
\ syns =~? 'jsbracket'? ['\[','\]'] : ['[({[]','[])}]']
let num = s:GetPair(pattern[0],pattern[1],'bW',2000)
else else
let num = s:GetPair('[({[]','[])}]','bW',2000) let [s:looksyn, s:free, top] = [v:lnum - 1, 1, (!indent(l:lnum) &&
endif \ s:syn_at(l:lnum,1) !~? s:syng_str) * l:lnum]
let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] if idx + 1
call s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,top)
if l:line =~ s:line_pre . '[])}]' elseif indent(v:lnum) && syns =~? 'block'
return indent(num) call s:GetPair('{','}','bW','s:skip_func()',2000,top)
else
call s:alternatePair(top)
endif
endif endif
call cursor(b:js_cache[1],b:js_cache[2]) if idx + 1 || l:line[:1] == '|}'
if idx == 2 && search('\m\S','bW',line('.')) && s:looking_at() == ')'
let swcase = getline(l:lnum) =~# s:expr_case call s:GetPair('(',')','bW',s:skip_expr,200)
let pline = swcase ? getline(l:lnum) : substitute(getline(l:lnum), '\%(:\@<!\/\/.*\)$', '','') endif
let inb = num == 0 || num < l:lnum && ((l:line !~ s:line_pre . ',' && pline !~ ',' . s:line_term) || s:IsBlock()) return indent('.')
let switch_offset = num == 0 || s:OneScope(num, strpart(getline(num),0,b:js_cache[2] - 1),1) !=# 'switch' ? 0 :
\ &cino !~ ':' || !has('float') ? s:sw() :
\ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '.*:[^,]*s' ? s:sw() : 1))
" most significant, find the indent amount
if inb && !swcase && ((l:line =~# g:javascript_opfirst || pline =~# g:javascript_continuation) ||
\ num < l:lnum && s:OneScope(l:lnum,pline,0) =~# '\<\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)\>' &&
\ l:line !~ s:line_pre . '{')
return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset
elseif num > 0
return indent(num) + s:sw() + switch_offset
endif endif
let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [0,0] : getpos('.')[1:2])
let num = b:js_cache[1]
let [s:W, isOp, bL, switch_offset] = [s:sw(),0,0,0]
if !num || s:IsBlock()
let pline = s:save_pos('s:Trim',l:lnum)
if num && s:looking_at() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0
let num = line('.')
if s:previous_token() ==# 'switch' && s:previous_token() != '.'
if &cino !~ ':' || !has('float')
let switch_offset = s:W
else
let cinc = matchlist(&cino,'.*:\(-\)\=\([0-9.]*\)\(s\)\=\C')
let switch_offset = float2nr(str2float(cinc[1].(strlen(cinc[2]) ? cinc[2] : strlen(cinc[3])))
\ * (strlen(cinc[3]) ? s:W : 1))
endif
if pline[-1:] != '.' && l:line =~# '^\%(default\|case\)\>'
return indent(num) + switch_offset
endif
endif
endif
if pline[-1:] !~ '[{;]'
if pline =~# ':\@<!:$'
call cursor(l:lnum,strlen(pline))
let isOp = s:tern_col(b:js_cache[1:2])
else
let isOp = l:line =~# s:opfirst || s:continues(l:lnum,pline)
endif
let bL = s:iscontOne(l:lnum,num,isOp)
let bL -= (bL && l:line[0] == '{') * s:W
endif
endif
" main return
if isOp
return (num ? indent(num) : -s:W) + (s:W * 2) + switch_offset + bL
elseif num
return indent(num) + s:W + switch_offset + bL
endif
return bL
endfunction endfunction
let &cpo = s:cpo_save let &cpo = s:cpo_save
unlet s:cpo_save unlet s:cpo_save

View File

@ -2,7 +2,8 @@
" Language: HTML " Language: HTML
" Maintainer: Jorge Maldonado Ventura <jorgesumle@freakspot.net> " Maintainer: Jorge Maldonado Ventura <jorgesumle@freakspot.net>
" Previous Maintainer: Claudio Fleiner <claudio@fleiner.com> " Previous Maintainer: Claudio Fleiner <claudio@fleiner.com>
" Last Change: 2016 Dec 29 " Repository: https://notabug.org/jorgesumle/vim-html-syntax
" Last Change: 2017 Jan 04
" included patch from Jorge Maldonado Ventura " included patch from Jorge Maldonado Ventura
" Please check :help html.vim for some comments and a description of the options " Please check :help html.vim for some comments and a description of the options
@ -95,6 +96,10 @@ syn keyword htmlArg contained multiple nohref nowrap object profile readonly
syn keyword htmlArg contained rules scheme scope span standby style syn keyword htmlArg contained rules scheme scope span standby style
syn keyword htmlArg contained summary tabindex valuetype version syn keyword htmlArg contained summary tabindex valuetype version
" html 5 arg names
syn keyword htmlArg contained contenteditable contextmenu draggable dropzone
syn keyword htmlArg contained hidden spellcheck title translate
" special characters " special characters
syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};" syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};"