Updated runtime files.

This commit is contained in:
Bram Moolenaar
2016-08-16 18:33:43 +02:00
parent 4f416e4124
commit dc1f1645cb
9 changed files with 1156 additions and 100 deletions

View File

@ -1,4 +1,4 @@
*eval.txt* For Vim version 7.4. Last change: 2016 Aug 14 *eval.txt* For Vim version 7.4. Last change: 2016 Aug 16
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -29,6 +29,7 @@ done, the features in this document are not available. See |+eval| and
10. No +eval feature |no-eval-feature| 10. No +eval feature |no-eval-feature|
11. The sandbox |eval-sandbox| 11. The sandbox |eval-sandbox|
12. Textlock |textlock| 12. Textlock |textlock|
13. Testing |testing|
{Vi does not have any of these commands} {Vi does not have any of these commands}
@ -1233,7 +1234,7 @@ The arguments are optional. Example: >
*closure* *closure*
Lambda expressions can access outer scope variables and arguments. This is Lambda expressions can access outer scope variables and arguments. This is
often called a closure. Example where "i" a and "a:arg" are used in a lambda often called a closure. Example where "i" a and "a:arg" are used in a lambda
while they exists in the function scope. They remain valid even after the while they exist in the function scope. They remain valid even after the
function returns: > function returns: >
:function Foo(arg) :function Foo(arg)
: let i = 3 : let i = 3
@ -2032,7 +2033,7 @@ cos({expr}) Float cosine of {expr}
cosh({expr}) Float hyperbolic cosine of {expr} cosh({expr}) Float hyperbolic cosine of {expr}
count({list}, {expr} [, {ic} [, {start}]]) count({list}, {expr} [, {ic} [, {start}]])
Number count how many {expr} are in {list} Number count how many {expr} are in {list}
cscope_connection([{num} , {dbpath} [, {prepend}]]) cscope_connection([{num}, {dbpath} [, {prepend}]])
Number checks existence of cscope connection Number checks existence of cscope connection
cursor({lnum}, {col} [, {off}]) cursor({lnum}, {col} [, {off}])
Number move cursor to {lnum}, {col}, {off} Number move cursor to {lnum}, {col}, {off}
@ -4492,7 +4493,7 @@ getreg([{regname} [, 1 [, {list}]]]) *getreg()*
The result is a String, which is the contents of register The result is a String, which is the contents of register
{regname}. Example: > {regname}. Example: >
:let cliptext = getreg('*') :let cliptext = getreg('*')
< When {regname} was not set the result is a empty string. < When {regname} was not set the result is an empty string.
getreg('=') returns the last evaluated value of the expression getreg('=') returns the last evaluated value of the expression
register. (For use in maps.) register. (For use in maps.)
@ -4529,8 +4530,8 @@ gettabinfo([{arg}]) *gettabinfo()*
Each List item is a Dictionary with the following entries: Each List item is a Dictionary with the following entries:
nr tab page number. nr tab page number.
windows List of window IDs in the tag page.
variables dictionary of tabpage local variables. variables dictionary of tabpage local variables.
windows List of window IDs in the tag page.
gettabvar({tabnr}, {varname} [, {def}]) *gettabvar()* gettabvar({tabnr}, {varname} [, {def}]) *gettabvar()*
Get the value of a tab-local variable {varname} in tab page Get the value of a tab-local variable {varname} in tab page
@ -4587,9 +4588,11 @@ getwininfo([{winid}]) *getwininfo()*
bufnum number of buffer in the window bufnum number of buffer in the window
height window height height window height
loclist 1 if showing a location list loclist 1 if showing a location list
{only with the +quickfix feature}
nr window number nr window number
options dictionary of window local options options dictionary of window local options
quickfix 1 if quickfix or location list window quickfix 1 if quickfix or location list window
{only with the +quickfix feature}
tpnr tab page number tpnr tab page number
variables dictionary of window local variables variables dictionary of window local variables
width window width width window width
@ -7520,7 +7523,7 @@ systemlist({expr} [, {input}]) *systemlist()*
tabpagebuflist([{arg}]) *tabpagebuflist()* tabpagebuflist([{arg}]) *tabpagebuflist()*
The result is a |List|, where each item is the number of the The result is a |List|, where each item is the number of the
buffer associated with each window in the current tab page. buffer associated with each window in the current tab page.
{arg} specifies the number of tab page to be used. When {arg} specifies the number of the tab page to be used. When
omitted the current tab page is used. omitted the current tab page is used.
When {arg} is invalid the number zero is returned. When {arg} is invalid the number zero is returned.
To get a list of all buffers in all tabs use this: > To get a list of all buffers in all tabs use this: >
@ -7703,9 +7706,9 @@ timer_info([{id}])
timer_pause({timer}, {paused}) *timer_pause()* timer_pause({timer}, {paused}) *timer_pause()*
Pause or unpause a timer. A paused timer does not invoke its Pause or unpause a timer. A paused timer does not invoke its
callback, while the time it would is not changed. Unpausing a callback when its time expires. Unpausing a timer may cause
timer may cause the callback to be invoked almost immediately the callback to be invoked almost immediately if enough time
if enough time has passed. has passed.
Pausing a timer is useful to avoid the callback to be called Pausing a timer is useful to avoid the callback to be called
for a short time. for a short time.
@ -7716,7 +7719,7 @@ timer_pause({timer}, {paused}) *timer_pause()*
{only available when compiled with the |+timers| feature} {only available when compiled with the |+timers| feature}
*timer_start()* *timer_start()* *timer* *timers*
timer_start({time}, {callback} [, {options}]) timer_start({time}, {callback} [, {options}])
Create a timer and return the timer ID. Create a timer and return the timer ID.
@ -10480,5 +10483,26 @@ This is not allowed when the textlock is active:
- closing a window or quitting Vim - closing a window or quitting Vim
- etc. - etc.
==============================================================================
13. Testing *testing*
Vim can be tested after building it, usually with "make test".
The tests are located in the directory "src/testdir".
There are several types of tests added over time:
test33.in oldest, don't add any more
test_something.in old style tests
test_something.vim new style tests
*new-style-testing*
New tests should be added as new style tests. These use functions such as
|assert_equal()| to keep the test commands and the expected result in one
place.
*old-style-testing*
In some cases an old style test needs to be used. E.g. when testing Vim
without the |+eval| feature.
Find more information in the file src/testdir/README.txt.
vim:tw=78:ts=8:ft=help:norl: vim:tw=78:ts=8:ft=help:norl:

View File

@ -1,4 +1,4 @@
*index.txt* For Vim version 7.4. Last change: 2016 Jul 16 *index.txt* For Vim version 7.4. Last change: 2016 Aug 16
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -1207,7 +1207,7 @@ tag command action ~
|:display| :di[splay] display registers |:display| :di[splay] display registers
|:djump| :dj[ump] jump to #define |:djump| :dj[ump] jump to #define
|:dl| :dl short for |:delete| with the 'l' flag |:dl| :dl short for |:delete| with the 'l' flag
|:dl| :del[ete]l short for |:delete| with the 'l' flag |:del| :del[ete]l short for |:delete| with the 'l' flag
|:dlist| :dli[st] list #defines |:dlist| :dli[st] list #defines
|:doautocmd| :do[autocmd] apply autocommands to current buffer |:doautocmd| :do[autocmd] apply autocommands to current buffer
|:doautoall| :doautoa[ll] apply autocommands for all loaded buffers |:doautoall| :doautoa[ll] apply autocommands for all loaded buffers

View File

@ -3646,7 +3646,7 @@ A jump table for the options with a short description can be found at |Q_op|.
qXX - quality XX. Valid quality names are: PROOF, DRAFT, qXX - quality XX. Valid quality names are: PROOF, DRAFT,
ANTIALIASED, NONANTIALIASED, CLEARTYPE, DEFAULT. ANTIALIASED, NONANTIALIASED, CLEARTYPE, DEFAULT.
Normally you would use "qDEFAULT". Normally you would use "qDEFAULT".
Some quality values isn't supported in legacy OSs. Some quality values are not supported in legacy OSs.
Use a ':' to separate the options. Use a ':' to separate the options.
- A '_' can be used in the place of a space, so you don't need to use - A '_' can be used in the place of a space, so you don't need to use
@ -4403,7 +4403,7 @@ A jump table for the options with a short description can be found at |Q_op|.
if you want to use Vim as a modeless editor. Used for |evim|. if you want to use Vim as a modeless editor. Used for |evim|.
These Insert mode commands will be useful: These Insert mode commands will be useful:
- Use the cursor keys to move around. - Use the cursor keys to move around.
- Use CTRL-O to execute one Normal mode command |i_CTRL-O|). When - Use CTRL-O to execute one Normal mode command |i_CTRL-O|. When
this is a mapping, it is executed as if 'insertmode' was off. this is a mapping, it is executed as if 'insertmode' was off.
Normal mode remains active until the mapping is finished. Normal mode remains active until the mapping is finished.
- Use CTRL-L to execute a number of Normal mode commands, then use - Use CTRL-L to execute a number of Normal mode commands, then use
@ -4751,7 +4751,7 @@ A jump table for the options with a short description can be found at |Q_op|.
use this command to get the tallest window possible: > use this command to get the tallest window possible: >
:set lines=999 :set lines=999
< Minimum value is 2, maximum value is 1000. < Minimum value is 2, maximum value is 1000.
If you get less lines than expected, check the 'guiheadroom' option. If you get fewer lines than expected, check the 'guiheadroom' option.
When you set this option and Vim is unable to change the physical When you set this option and Vim is unable to change the physical
number of lines of the display, the display may be messed up. number of lines of the display, the display may be messed up.

View File

@ -1,4 +1,4 @@
*syntax.txt* For Vim version 7.4. Last change: 2016 Aug 10 *syntax.txt* For Vim version 7.4. Last change: 2016 Aug 16
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -3764,7 +3764,7 @@ Whether or not it is actually concealed depends on the value of the
'conceallevel' option. The 'concealcursor' option is used to decide whether 'conceallevel' option. The 'concealcursor' option is used to decide whether
concealable items in the current line are displayed unconcealed to be able to concealable items in the current line are displayed unconcealed to be able to
edit the line. edit the line.
Another way to conceal text with with |matchadd()|. Another way to conceal text is with |matchadd()|.
concealends *:syn-concealends* concealends *:syn-concealends*
@ -4870,7 +4870,7 @@ DiffChange diff mode: Changed line |diff.txt|
DiffDelete diff mode: Deleted line |diff.txt| DiffDelete diff mode: Deleted line |diff.txt|
*hl-DiffText* *hl-DiffText*
DiffText diff mode: Changed text within a changed line |diff.txt| DiffText diff mode: Changed text within a changed line |diff.txt|
*hl-EndofBuffer* *hl-EndOfBuffer*
EndOfBuffer filler lines (~) after the last line in the buffer. EndOfBuffer filler lines (~) after the last line in the buffer.
By default, this is highlighted like |hl-NonText|. By default, this is highlighted like |hl-NonText|.
*hl-ErrorMsg* *hl-ErrorMsg*

View File

@ -6638,6 +6638,7 @@ hl-DiffChange syntax.txt /*hl-DiffChange*
hl-DiffDelete syntax.txt /*hl-DiffDelete* hl-DiffDelete syntax.txt /*hl-DiffDelete*
hl-DiffText syntax.txt /*hl-DiffText* hl-DiffText syntax.txt /*hl-DiffText*
hl-Directory syntax.txt /*hl-Directory* hl-Directory syntax.txt /*hl-Directory*
hl-EndOfBuffer syntax.txt /*hl-EndOfBuffer*
hl-ErrorMsg syntax.txt /*hl-ErrorMsg* hl-ErrorMsg syntax.txt /*hl-ErrorMsg*
hl-FoldColumn syntax.txt /*hl-FoldColumn* hl-FoldColumn syntax.txt /*hl-FoldColumn*
hl-Folded syntax.txt /*hl-Folded* hl-Folded syntax.txt /*hl-Folded*
@ -7591,6 +7592,7 @@ new-search-path version6.txt /*new-search-path*
new-searchpat version6.txt /*new-searchpat* new-searchpat version6.txt /*new-searchpat*
new-session-files version5.txt /*new-session-files* new-session-files version5.txt /*new-session-files*
new-spell version7.txt /*new-spell* new-spell version7.txt /*new-spell*
new-style-testing eval.txt /*new-style-testing*
new-tab-pages version7.txt /*new-tab-pages* new-tab-pages version7.txt /*new-tab-pages*
new-undo-branches version7.txt /*new-undo-branches* new-undo-branches version7.txt /*new-undo-branches*
new-unlisted-buffers version6.txt /*new-unlisted-buffers* new-unlisted-buffers version6.txt /*new-unlisted-buffers*
@ -7634,6 +7636,7 @@ ocaml.vim syntax.txt /*ocaml.vim*
octal eval.txt /*octal* octal eval.txt /*octal*
octal-nrformats options.txt /*octal-nrformats* octal-nrformats options.txt /*octal-nrformats*
octal-number eval.txt /*octal-number* octal-number eval.txt /*octal-number*
old-style-testing eval.txt /*old-style-testing*
oldfiles-variable eval.txt /*oldfiles-variable* oldfiles-variable eval.txt /*oldfiles-variable*
ole-activation if_ole.txt /*ole-activation* ole-activation if_ole.txt /*ole-activation*
ole-eval if_ole.txt /*ole-eval* ole-eval if_ole.txt /*ole-eval*
@ -8678,6 +8681,7 @@ test_null_list() eval.txt /*test_null_list()*
test_null_partial() eval.txt /*test_null_partial()* test_null_partial() eval.txt /*test_null_partial()*
test_null_string() eval.txt /*test_null_string()* test_null_string() eval.txt /*test_null_string()*
test_settime() eval.txt /*test_settime()* test_settime() eval.txt /*test_settime()*
testing eval.txt /*testing*
testing-variable eval.txt /*testing-variable* testing-variable eval.txt /*testing-variable*
tex-cchar syntax.txt /*tex-cchar* tex-cchar syntax.txt /*tex-cchar*
tex-cole syntax.txt /*tex-cole* tex-cole syntax.txt /*tex-cole*
@ -8708,12 +8712,14 @@ throw-from-catch eval.txt /*throw-from-catch*
throw-variables eval.txt /*throw-variables* throw-variables eval.txt /*throw-variables*
throwpoint-variable eval.txt /*throwpoint-variable* throwpoint-variable eval.txt /*throwpoint-variable*
time-functions usr_41.txt /*time-functions* time-functions usr_41.txt /*time-functions*
timer eval.txt /*timer*
timer-functions usr_41.txt /*timer-functions* timer-functions usr_41.txt /*timer-functions*
timer_info() eval.txt /*timer_info()* timer_info() eval.txt /*timer_info()*
timer_pause() eval.txt /*timer_pause()* timer_pause() eval.txt /*timer_pause()*
timer_start() eval.txt /*timer_start()* timer_start() eval.txt /*timer_start()*
timer_stop() eval.txt /*timer_stop()* timer_stop() eval.txt /*timer_stop()*
timer_stopall() eval.txt /*timer_stopall()* timer_stopall() eval.txt /*timer_stopall()*
timers eval.txt /*timers*
timestamp editing.txt /*timestamp* timestamp editing.txt /*timestamp*
timestamps editing.txt /*timestamps* timestamps editing.txt /*timestamps*
tips tips.txt /*tips* tips tips.txt /*tips*

View File

@ -1,4 +1,4 @@
*todo.txt* For Vim version 7.4. Last change: 2016 Aug 12 *todo.txt* For Vim version 7.4. Last change: 2016 Aug 16
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -105,9 +105,6 @@ What if there is an invalid character?
Should json_encode()/json_decode() restrict recursiveness? Should json_encode()/json_decode() restrict recursiveness?
Or avoid recursiveness. Or avoid recursiveness.
Patch to test popupmenu. Fails, possibly due to a bug.
(Christian Brabandt, 2016 Jul 23)
Once .exe with updated installer is available: Add remark to download page Once .exe with updated installer is available: Add remark to download page
about /S and /D options (Ken Takata, 2016 Apr 13) about /S and /D options (Ken Takata, 2016 Apr 13)
Or point to nightly builds: https://github.com/vim/vim-win32-installer/releases Or point to nightly builds: https://github.com/vim/vim-win32-installer/releases
@ -136,60 +133,19 @@ Problem with whitespace in errorformat. (Gerd Wachsmuth, 2016 May 15, #807)
Undo problem: "g-" doesn't go back, gets stuck. (Björn Linse, 2016 Jul 18) Undo problem: "g-" doesn't go back, gets stuck. (Björn Linse, 2016 Jul 18)
Also return quickfix vs location list in getwininfo().
Patch to detect st terminal supporting xterm mouse. (Manuel Schiller, 2016 Aug
2, #963)
Patch to fix that " mark is not stored in viminfo when closing a window in
another tab. (Hirohito Higashi, 2016 Aug 11, #974)
Syntax highlighting for messages with RFC3339 timestamp (#946) Syntax highlighting for messages with RFC3339 timestamp (#946)
Did maintainer reply? Did maintainer reply?
Patch to add filtering of the quickfix list. (Yegappan Lakshmanan, 2016 Mar
13, last version) Update June 26, #830.
Instead use a Vim script implementation, invoked from a Vim command.
ml_get errors when reloading file. (Chris Desjardins, 2016 Apr 19) ml_get errors when reloading file. (Chris Desjardins, 2016 Apr 19)
Also with latest version. Also with latest version.
Still problems with 'emoji'. See issue #721. Patch 7.4.1697 half-fixes it.
Avoid PLAN_WRITE in windgoto() ?
Should already never use utf-8 chars to position the cursor.
Cannot delete a file with square brackets with delete(). (#696) Cannot delete a file with square brackets with delete(). (#696)
Patch to add the EndOfBuffer highlight group, used instead of NonText for "~"
lines. (Marco Hinz, 2014 Nov 2)
Update from James McCoy, 2016 Aug 3.
No autocommand for when changing directory. Patch from allen haim, 2016 Jun
27, #888
Justin M Keyes: use "global" or "window" for the pattern. Can add "tab"
later. What if entering a window where ":lcd" was used?
Completion for input() does not expand environment variables. (chdiza, 2016 Completion for input() does not expand environment variables. (chdiza, 2016
Jul 25, #948) Jul 25, #948)
Patch to improve GTK shaping. (Manuel Schiller, 2016 Aug 7)
Patch to make matchaddpos() not highlight the character after the line.
(Hirohito Higashi, 2016 Aug 7)
'hlsearch' interferes with a Conceal match. (Rom Grk, 2016 Aug 9) 'hlsearch' interferes with a Conceal match. (Rom Grk, 2016 Aug 9)
Patch to have text objects defined by arbitrary single characters. (Daniel
Thau, 2013 Nov 20, 2014 Jan 29, 2014 Jan 31)
Ben Fritz: problem with 'selection' set to "exclusive".
Updated to current Vim, not quite right yet. (Ben Fritz, 2014 Mar 27)
Updated to current Vim (James McCoy, 2016 Jul 30, #958)
Still a bit of work left. Check if "vimx" works.
Added tests, Aug 3.
Patch to add CTRL-N / CTRL-P while searching. (Christian Brabandt, 2016 Aug
3) Problem: two matches in one line and using CTRL-P does not move back.
's$^$\=capture("s/^//gn")' locks Vim in sandbox mode (#950) 's$^$\=capture("s/^//gn")' locks Vim in sandbox mode (#950)
Patch by Christian Brabandt, 2016 Jul 27. Patch by Christian Brabandt, 2016 Jul 27.
@ -330,6 +286,16 @@ 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 test popupmenu. Fails, possibly due to a bug.
(Christian Brabandt, 2016 Jul 23)
Patch to have text objects defined by arbitrary single characters. (Daniel
Thau, 2013 Nov 20, 2014 Jan 29, 2014 Jan 31)
Added tests (James McCoy, 2016 Aug 3). Still needs more work.
Patch to add CTRL-N / CTRL-P while searching. (Christian Brabandt, 2016 Aug
3) Problem: two matches in one line and using CTRL-P does not move back.
Access to uninitialized memory in match_backref() regexp_nda.c:4882 Access to uninitialized memory in match_backref() regexp_nda.c:4882
(Dominique Pelle, 2015 Nov 6) (Dominique Pelle, 2015 Nov 6)
@ -653,8 +619,7 @@ xterm should be able to pass focus changes to Vim, so that Vim can check for
buffers that changed. Perhaps in misc.c, function selectwindow(). buffers that changed. Perhaps in misc.c, function selectwindow().
Xterm 224 supports it! Xterm 224 supports it!
Patch to make FocusGained and FocusLost work in modern terminals. (Hayaki Patch to make FocusGained and FocusLost work in modern terminals. (Hayaki
Saito, 2013 Apr 24) Has a problem (email 2015 Jan 7). Saito, 2013 Apr 24) Update 2016 Aug 12.
Update 2015 Jan 10.
Also see issue #609. Also see issue #609.
We could add the enable/disable sequences to t_ti/t_te or t_ks/t_ke. We could add the enable/disable sequences to t_ti/t_te or t_ks/t_ke.

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
*vi_diff.txt* For Vim version 7.4. Last change: 2016 Feb 12 *vi_diff.txt* For Vim version 7.4. Last change: 2016 Aug 16
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -147,7 +147,7 @@ Support for different systems.
resource usage, esp. on MS-DOS. For some outdated systems you need to resource usage, esp. on MS-DOS. For some outdated systems you need to
use an older Vim version. use an older Vim version.
Multi level undo. |undo| Multi level persistent undo. |undo|
'u' goes backward in time, 'CTRL-R' goes forward again. Set option 'u' goes backward in time, 'CTRL-R' goes forward again. Set option
'undolevels' to the number of changes to be remembered (default 1000). 'undolevels' to the number of changes to be remembered (default 1000).
Set 'undolevels' to 0 for a Vi-compatible one level undo. Set it to Set 'undolevels' to 0 for a Vi-compatible one level undo. Set it to
@ -158,6 +158,9 @@ Multi level undo. |undo|
create a branch in the undo tree. This means you can go back to any create a branch in the undo tree. This means you can go back to any
state of the text, there is no risk of a change causing text to be state of the text, there is no risk of a change causing text to be
lost forever. |undo-tree| lost forever. |undo-tree|
The undo information is stored in a file when the 'undofile' option is
set. This means you can exit Vim, start Vim on a previously edited
file and undo changes that were made before exiting Vim.
Graphical User Interface (GUI). |gui| Graphical User Interface (GUI). |gui|
Included support for GUI: menu's, mouse, scrollbars, etc. You can Included support for GUI: menu's, mouse, scrollbars, etc. You can
@ -212,6 +215,15 @@ Plugins. |add-plugin|
right directory. That's an easy way to start using Vim scripts right directory. That's an easy way to start using Vim scripts
written by others. Plugins can be for all kind of files, or written by others. Plugins can be for all kind of files, or
specifically for a filetype. specifically for a filetype.
Packages make this even easier. |packages|
Asynchronous communication and timers. |channel| |job| |timer|
Vim can exchange messages with other processes in the background.
This makes it possible to have servers do work and send back the
results to Vim. |channel|
Vim can start a job, communicate with it and stop it. |job|
Timers can fire once or repeatedly and invoke a function to do any
work. |timer|
Repeat a series of commands. |q| Repeat a series of commands. |q|
"q{c}" starts recording typed characters into named register {c}. "q{c}" starts recording typed characters into named register {c}.

View File

@ -37,7 +37,7 @@ function s:FindPrevLessIndentedLine(lnum, ...)
let curindent = a:0 ? a:1 : indent(a:lnum) let curindent = a:0 ? a:1 : indent(a:lnum)
while prevlnum while prevlnum
\&& indent(prevlnum) >= curindent \&& indent(prevlnum) >= curindent
\&& getline(prevlnum) !~# '^\s*#' \&& getline(prevlnum) =~# '^\s*#'
let prevlnum = prevnonblank(prevlnum-1) let prevlnum = prevnonblank(prevlnum-1)
endwhile endwhile
return prevlnum return prevlnum
@ -51,11 +51,33 @@ function s:FindPrevLEIndentedLineMatchingRegex(lnum, regex)
return plilnum return plilnum
endfunction endfunction
let s:mapkeyregex='\v^\s*%(\''%([^'']|'''')*\'''. let s:mapkeyregex='\v^\s*\#@!\S@=%(\''%([^'']|\''\'')*\'''.
\ '|\"%([^"\\]|\\.)*\"'. \ '|\"%([^"\\]|\\.)*\"'.
\ '|%(%(\:\ )@!.)*)\:%(\ |$)' \ '|%(%(\:\ )@!.)*)\:%(\ |$)'
let s:liststartregex='\v^\s*%(\-%(\ |$))' let s:liststartregex='\v^\s*%(\-%(\ |$))'
let s:c_ns_anchor_char = '\v%([\n\r\uFEFF \t,[\]{}]@!\p)'
let s:c_ns_anchor_name = s:c_ns_anchor_char.'+'
let s:c_ns_anchor_property = '\v\&'.s:c_ns_anchor_name
let s:ns_word_char = '\v[[:alnum:]_\-]'
let s:ns_tag_char = '\v%(%\x\x|'.s:ns_word_char.'|[#/;?:@&=+$.~*''()])'
let s:c_named_tag_handle = '\v\!'.s:ns_word_char.'+\!'
let s:c_secondary_tag_handle = '\v\!\!'
let s:c_primary_tag_handle = '\v\!'
let s:c_tag_handle = '\v%('.s:c_named_tag_handle.
\ '|'.s:c_secondary_tag_handle.
\ '|'.s:c_primary_tag_handle.')'
let s:c_ns_shorthand_tag = '\v'.s:c_tag_handle . s:ns_tag_char.'+'
let s:c_non_specific_tag = '\v\!'
let s:ns_uri_char = '\v%(%\x\x|'.s:ns_word_char.'\v|[#/;?:@&=+$,.!~*''()[\]])'
let s:c_verbatim_tag = '\v\!\<'.s:ns_uri_char.'+\>'
let s:c_ns_tag_property = '\v'.s:c_verbatim_tag.
\ '\v|'.s:c_ns_shorthand_tag.
\ '\v|'.s:c_non_specific_tag
let s:block_scalar_header = '\v[|>]%([+-]?[1-9]|[1-9]?[+-])?'
function GetYAMLIndent(lnum) function GetYAMLIndent(lnum)
if a:lnum == 1 || !prevnonblank(a:lnum-1) if a:lnum == 1 || !prevnonblank(a:lnum-1)
return 0 return 0
@ -127,7 +149,10 @@ function GetYAMLIndent(lnum)
" - List with " - List with
" multiline scalar " multiline scalar
return previndent+2 return previndent+2
elseif prevline =~# s:mapkeyregex elseif prevline =~# s:mapkeyregex . '\v\s*%(%('.s:c_ns_tag_property.
\ '\v|'.s:c_ns_anchor_property.
\ '\v|'.s:block_scalar_header.
\ '\v)%(\s+|\s*%(\#.*)?$))*'
" Mapping with: value " Mapping with: value
" that is multiline scalar " that is multiline scalar
return previndent+s:shiftwidth() return previndent+s:shiftwidth()