Update runtime files.
diff --git a/runtime/doc/vim9.txt b/runtime/doc/vim9.txt
index a7b91db..93c3ddd 100644
--- a/runtime/doc/vim9.txt
+++ b/runtime/doc/vim9.txt
@@ -1,4 +1,4 @@
-*vim9.txt* For Vim version 8.2. Last change: 2021 Jan 10
+*vim9.txt* For Vim version 8.2. Last change: 2021 Jan 15
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -487,6 +487,9 @@
file "_cb: Func})" and exit. To avoid this kind of mistake in Vim9 script
there must be white space between most command names and the argument.
+However, the argument of a command that is a command won't be recognized. For
+example, after "windo echo expr" a line break inside "expr" will not be seen.
+
Notes:
- "enddef" cannot be used at the start of a continuation line, it ends the
@@ -527,17 +530,17 @@
considering that JavaScript uses this syntax, using the {} form for dictionary
literals is considered a much more useful syntax. In Vim9 script the {} form
uses literal keys: >
- let dict = {key: value}
+ var dict = {key: value}
This works for alphanumeric characters, underscore and dash. If you want to
use another character, use a single or double quoted string: >
- let dict = {'key with space': value}
- let dict = {"key\twith\ttabs": value}
- let dict = {'': value} # empty key
+ var dict = {'key with space': value}
+ var dict = {"key\twith\ttabs": value}
+ var dict = {'': value} # empty key
In case the key needs to be an expression, square brackets can be used, just
like in JavaScript: >
- let dict = {["key" .. nr]: value}
+ var dict = {["key" .. nr]: value}
No :xit, :t, :append, :change or :insert ~
@@ -552,6 +555,29 @@
The 'ignorecase' option is not used for comparators that use strings.
+For loop ~
+
+Legacy Vim script has some tricks to make a for loop over a list handle
+deleting items at the current or previous item. In Vim9 script it just uses
+the index, if items are deleted then items in the list will be skipped.
+Example legacy script: >
+ let l = [1, 2, 3, 4]
+ for i in l
+ echo i
+ call remove(l, index(l, i))
+ endfor
+Would echo:
+ 1
+ 2
+ 3
+ 4
+In compiled Vim9 script you get:
+ 1
+ 3
+Generally, you should not change the list that is iterated over. Make a copy
+first if needed.
+
+
White space ~
Vim9 script enforces proper use of white space. This is no longer allowed: >
@@ -576,15 +602,17 @@
White space is not allowed:
- Between a function name and the "(": >
- call Func (arg) # Error!
- call Func
+ Func (arg) # Error!
+ Func
\ (arg) # Error!
- call Func(arg) # OK
- call Func(
- \ arg) # OK
- call Func(
- \ arg # OK
- \ )
+ Func
+ (arg) # Error!
+ Func(arg) # OK
+ Func(
+ arg) # OK
+ Func(
+ arg # OK
+ )
Conditions and expressions ~
@@ -648,12 +676,13 @@
used, not "v:false" and "v:true" like in legacy script. "v:none" is not
changed, it is only used in JSON and has no equivalent in other languages.
-Indexing a string with [idx] or [idx, idx] uses character indexes instead of
+Indexing a string with [idx] or [idx : idx] uses character indexes instead of
byte indexes. Example: >
echo 'bár'[1]
In legacy script this results in the character 0xc3 (an illegal byte), in Vim9
script this results in the string 'á'.
A negative index is counting from the end, "[-1]" is the last character.
+To exclude the last character use |slice()|.
If the index is out of range then an empty string results.
In legacy script "++var" and "--var" would be silently accepted and have no
@@ -670,21 +699,22 @@
be made. Here is a summary of what might be unexpected.
Ex command ranges need to be prefixed with a colon. >
- -> # legacy Vim: shifts the previous line to the right
- ->func() # Vim9: method call in continuation line
- :-> # Vim9: shifts the previous line to the right
+ -> legacy Vim: shifts the previous line to the right
+ ->func() Vim9: method call in a continuation line
+ :-> Vim9: shifts the previous line to the right
- %s/a/b # legacy Vim: substitute on all lines
+ %s/a/b legacy Vim: substitute on all lines
x = alongname
- % another # Vim9: line continuation without a backslash
- :%s/a/b # Vim9: substitute on all lines
- 'text'->func() # Vim9: method call
- :'t # legacy Vim: jump to mark m
+ % another Vim9: modulo operator in a continuation line
+ :%s/a/b Vim9: substitute on all lines
+ 't legacy Vim: jump to mark t
+ 'text'->func() Vim9: method call
+ :'t Vim9: jump to mark t
Some Ex commands can be confused with assignments in Vim9 script: >
- g:name = value # assignment
- g:pattern:cmd # invalid command - ERROR
- :g:pattern:cmd # :global command
+ g:name = value # assignment
+ g:pattern:cmd # invalid command - ERROR
+ :g:pattern:cmd # :global command
Functions defined with `:def` compile the whole function. Legacy functions
can bail out, and the following lines are not parsed: >
@@ -704,7 +734,7 @@
For a workaround, split it in two functions: >
func Maybe()
if has('feature')
- call MaybyInner()
+ call MaybeInner()
endif
endfunc
if has('feature')
@@ -720,7 +750,7 @@
endif
enddef
< *vim9-user-command*
-Another side effect of compiling a function is that the precense of a user
+Another side effect of compiling a function is that the presence of a user
command is checked at compile time. If the user command is defined later an
error will result. This works: >
command -nargs=1 MyCommand echom <q-args>
@@ -1090,7 +1120,7 @@
1. In the plugin define user commands, functions and/or mappings that refer to
an autoload script. >
- command -nargs=1 SearchForStuff call searchfor#Stuff(<f-args>)
+ command -nargs=1 SearchForStuff searchfor#Stuff(<f-args>)
< This goes in .../plugin/anyname.vim. "anyname.vim" can be freely chosen.
@@ -1183,12 +1213,12 @@
should be done at compile time. Postponing it to runtime makes the execution
slower and means mistakes are found only later. For example, when
encountering the "+" character and compiling this into a generic add
-instruction, at execution time the instruction would have to inspect the type
-of the arguments and decide what kind of addition to do. And when the
-type is dictionary throw an error. If the types are known to be numbers then
-an "add number" instruction can be used, which is faster. The error can be
-given at compile time, no error handling is needed at runtime, since adding
-two numbers cannot fail.
+instruction, at runtime the instruction would have to inspect the type of the
+arguments and decide what kind of addition to do. And when the type is
+dictionary throw an error. If the types are known to be numbers then an "add
+number" instruction can be used, which is faster. The error can be given at
+compile time, no error handling is needed at runtime, since adding two numbers
+cannot fail.
The syntax for types, using <type> for compound types, is similar to Java. It
is easy to understand and widely used. The type names are what were used in