summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2023-01-09 20:12:45 +0000
committerBram Moolenaar <Bram@vim.org>2023-01-09 20:12:45 +0000
commit1b5f03ec9c5551047d5de8d845541dd3201abe7c (patch)
tree10618372a4087823169258cef47673cc03a64205
parentd41262ed06564cef98a3800e2928e6e0db91abbf (diff)
Update runtime files
-rw-r--r--.github/CODEOWNERS2
-rw-r--r--runtime/autoload/dist/vimindent.vim7
-rw-r--r--runtime/doc/eval.txt4
-rw-r--r--runtime/doc/index.txt6
-rw-r--r--runtime/doc/map.txt6
-rw-r--r--runtime/doc/options.txt4
-rw-r--r--runtime/doc/tags20
-rw-r--r--runtime/doc/term.txt24
-rw-r--r--runtime/doc/todo.txt25
-rw-r--r--runtime/doc/userfunc.txt15
-rw-r--r--runtime/doc/vim9class.txt126
-rw-r--r--runtime/syntax/editorconfig.vim21
-rw-r--r--runtime/syntax/vim.vim7
13 files changed, 210 insertions, 57 deletions
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 735cce3ab6..0963685ae7 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -334,6 +334,7 @@ runtime/syntax/dot.vim @mmottl
runtime/syntax/doxygen.vim @frogonwheels
runtime/syntax/dtd.vim @chrisbra
runtime/syntax/dts.vim @zonque
+runtime/syntax/editorconfig.vim @gpanders
runtime/syntax/eiffel.vim @jocelyn
runtime/syntax/elmfilt.vim @cecamp
runtime/syntax/erlang.vim @hcs42
@@ -374,6 +375,7 @@ runtime/syntax/indent.vim @dkearns
runtime/syntax/j.vim @glts
runtime/syntax/jargon.vim @h3xx
runtime/syntax/java.vim @fleiner
+runtime/syntax/javascript.vim @fleiner
runtime/syntax/jsonc.vim @izhakjakov
runtime/syntax/julia.vim @carlobaldassi
runtime/syntax/kconfig.vim @chrisbra
diff --git a/runtime/autoload/dist/vimindent.vim b/runtime/autoload/dist/vimindent.vim
index 24e2c93964..898f22f65c 100644
--- a/runtime/autoload/dist/vimindent.vim
+++ b/runtime/autoload/dist/vimindent.vim
@@ -2,7 +2,7 @@ vim9script
# Language: Vim script
# Maintainer: github user lacygoill
-# Last Change: 2022 Oct 15
+# Last Change: 2023 Jan 03
# NOTE: Whenever you change the code, make sure the tests are still passing:
#
@@ -201,6 +201,7 @@ const ENDS_BLOCK: string = '^\s*\%('
.. '\|' .. 'endw\%[hile]'
.. '\|' .. 'endt\%[ry]'
.. '\|' .. 'enddef'
+ .. '\|' .. 'endclass'
.. '\|' .. 'endf\%[unction]'
.. '\|' .. 'aug\%[roup]\s\+[eE][nN][dD]'
.. '\|' .. CLOSING_BRACKET
@@ -212,6 +213,7 @@ patterns =<< trim END
en\%[dif]
el\%[se]
endfor\=
+ endclass
endw\%[hile]
endt\%[ry]
fina\|finally\=
@@ -251,6 +253,7 @@ patterns =<< trim END
el\%[se]
elseif\=
for
+ class
wh\%[ile]
try
cat\%[ch]
@@ -278,6 +281,8 @@ const START_MIDDLE_END: dict<list<string>> = {
endif: ['if', 'el\%[se]\|elseif\=', 'en\%[dif]'],
for: ['for', '', 'endfor\='],
endfor: ['for', '', 'endfor\='],
+ class: ['class', '', 'endclass'],
+ endclass: ['class', '', 'endclass'],
while: ['wh\%[ile]', '', 'endw\%[hile]'],
endwhile: ['wh\%[ile]', '', 'endw\%[hile]'],
try: ['try', 'cat\%[ch]\|fina\|finally\=', 'endt\%[ry]'],
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 98c48699cc..556b171561 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt* For Vim version 9.0. Last change: 2022 Dec 11
+*eval.txt* For Vim version 9.0. Last change: 2023 Jan 03
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -2970,6 +2970,8 @@ text...
deleted when the script ends). Function-local
variables are automatically deleted when the function
ends.
+ In |Vim9| script variables declared in a function or
+ script cannot be removed.
:unl[et] ${env-name} ... *:unlet-environment* *:unlet-$*
Remove environment variable {env-name}.
diff --git a/runtime/doc/index.txt b/runtime/doc/index.txt
index 9de498b373..c4363a89fc 100644
--- a/runtime/doc/index.txt
+++ b/runtime/doc/index.txt
@@ -1,4 +1,4 @@
-*index.txt* For Vim version 9.0. Last change: 2022 Oct 15
+*index.txt* For Vim version 9.0. Last change: 2023 Jan 09
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1239,6 +1239,7 @@ tag command action ~
|:checkpath| :che[ckpath] list included files
|:checktime| :checkt[ime] check timestamp of loaded buffers
|:chistory| :chi[story] list the error lists
+|:class| :class start of a class specification
|:clast| :cla[st] go to the specified error, default last one
|:clearjumps| :cle[arjumps] clear the jump list
|:clist| :cl[ist] list all errors
@@ -1313,6 +1314,7 @@ tag command action ~
|:else| :el[se] part of an :if command
|:elseif| :elsei[f] part of an :if command
|:emenu| :em[enu] execute a menu by name
+|:endclass| :endclass end of a class specification
|:enddef| :enddef end of a user function started with :def
|:endif| :en[dif] end previous :if
|:endfor| :endfo[r] end previous :for
@@ -1529,6 +1531,7 @@ tag command action ~
|:ptprevious| :ptp[revious] |:tprevious| in preview window
|:ptrewind| :ptr[ewind] |:trewind| in preview window
|:ptselect| :pts[elect] |:tselect| and show tag in preview window
+|:public| :public prefix for a class or object member
|:put| :pu[t] insert contents of register in the text
|:pwd| :pw[d] print current directory
|:py3| :py3 execute Python 3 command
@@ -1639,6 +1642,7 @@ tag command action ~
|:startinsert| :star[tinsert] start Insert mode
|:startgreplace| :startg[replace] start Virtual Replace mode
|:startreplace| :startr[eplace] start Replace mode
+|:static| :static prefix for a class member or function
|:stopinsert| :stopi[nsert] stop Insert mode
|:stjump| :stj[ump] do ":tjump" and split window
|:stselect| :sts[elect] do ":tselect" and split window
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
index 5c7b4f8a6a..175643644b 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1,4 +1,4 @@
-*map.txt* For Vim version 9.0. Last change: 2022 Dec 01
+*map.txt* For Vim version 9.0. Last change: 2023 Jan 09
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -777,8 +777,8 @@ To avoid mapping of the characters you type in insert or Command-line mode,
type a CTRL-V first. The mapping in Insert mode is disabled if the 'paste'
option is on.
*map-error*
-Note that when an error is encountered (that causes an error message or beep)
-the rest of the mapping is not executed. This is Vi-compatible.
+Note that when an error is encountered (that causes an error message or might
+cause a beep) the rest of the mapping is not executed. This is Vi-compatible.
Note that the second character (argument) of the commands @zZtTfF[]rm'`"v
and CTRL-X is not mapped. This was done to be able to use all the named
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index dc6e16bc75..a514b6f28a 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt* For Vim version 9.0. Last change: 2022 Dec 31
+*options.txt* For Vim version 9.0. Last change: 2023 Jan 02
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -7686,6 +7686,8 @@ A jump table for the options with a short description can be found at |Q_op|.
When there is error while evaluating the option then it will be made
empty to avoid further errors. Otherwise screen updating would loop.
+ When the result contains unprintable characters the result is
+ unpredictable.
Note that the only effect of 'ruler' when this option is set (and
'laststatus' is 2) is controlling the output of |CTRL-G|.
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 66dd96a144..49cabaa0e2 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -1082,6 +1082,7 @@ $quote eval.txt /*$quote*
't_VS' term.txt /*'t_VS'*
't_WP' term.txt /*'t_WP'*
't_WS' term.txt /*'t_WS'*
+'t_XM' term.txt /*'t_XM'*
't_ZH' term.txt /*'t_ZH'*
't_ZR' term.txt /*'t_ZR'*
't_al' term.txt /*'t_al'*
@@ -4399,7 +4400,22 @@ E1337 vim9class.txt /*E1337*
E1338 vim9class.txt /*E1338*
E1339 textprop.txt /*E1339*
E134 change.txt /*E134*
+E1340 vim9class.txt /*E1340*
+E1341 vim9class.txt /*E1341*
+E1342 vim9class.txt /*E1342*
+E1343 vim9class.txt /*E1343*
+E1344 vim9class.txt /*E1344*
+E1345 vim9class.txt /*E1345*
+E1346 vim9class.txt /*E1346*
+E1347 vim9class.txt /*E1347*
+E1348 vim9class.txt /*E1348*
+E1349 vim9class.txt /*E1349*
E135 autocmd.txt /*E135*
+E1350 vim9class.txt /*E1350*
+E1351 vim9class.txt /*E1351*
+E1352 vim9class.txt /*E1352*
+E1353 vim9class.txt /*E1353*
+E1354 vim9class.txt /*E1354*
E136 starting.txt /*E136*
E137 starting.txt /*E137*
E138 starting.txt /*E138*
@@ -6294,8 +6310,8 @@ cino-{ indent.txt /*cino-{*
cino-} indent.txt /*cino-}*
cinoptions-values indent.txt /*cinoptions-values*
class vim9class.txt /*class*
+class-function vim9class.txt /*class-function*
class-member vim9class.txt /*class-member*
-class-method vim9class.txt /*class-method*
clear-undo undo.txt /*clear-undo*
clearmatches() builtin.txt /*clearmatches()*
client-server remote.txt /*client-server*
@@ -8492,6 +8508,7 @@ motion-count-multiplied motion.txt /*motion-count-multiplied*
motion.txt motion.txt /*motion.txt*
mouse-mode-table term.txt /*mouse-mode-table*
mouse-overview term.txt /*mouse-overview*
+mouse-reporting term.txt /*mouse-reporting*
mouse-scrolling-off scroll.txt /*mouse-scrolling-off*
mouse-swap-buttons term.txt /*mouse-swap-buttons*
mouse-using term.txt /*mouse-using*
@@ -10011,6 +10028,7 @@ t_Us term.txt /*t_Us*
t_VS term.txt /*t_VS*
t_WP term.txt /*t_WP*
t_WS term.txt /*t_WS*
+t_XM term.txt /*t_XM*
t_ZH term.txt /*t_ZH*
t_ZR term.txt /*t_ZR*
t_al term.txt /*t_al*
diff --git a/runtime/doc/term.txt b/runtime/doc/term.txt
index 8b8214c300..3336889852 100644
--- a/runtime/doc/term.txt
+++ b/runtime/doc/term.txt
@@ -1,4 +1,4 @@
-*term.txt* For Vim version 9.0. Last change: 2023 Jan 01
+*term.txt* For Vim version 9.0. Last change: 2023 Jan 09
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -322,6 +322,9 @@ using the "xterm" workaround. These are the relevant entries (so far):
PS "\033[200~" pasted text start |t_PS|
PE "\033[201~" pasted text end |t_PE|
+ XM "\033[?1006;1000%?%p1%{1}%=%th%el%;"
+ mouse enable / disable |t_XM|
+
*xterm-kitty* *kitty-terminal*
The Kitty terminal is a special case. Mainly because it works differently
from most other terminals, but also because, instead of trying the fit in and
@@ -337,7 +340,7 @@ this. However, Kitty is not fully xterm compatible. The author suggested to
ignore the "xterm-" prefix and use the terminfo entry anyway, so that is what
happens now, the builtin xterm termcap entries are not used. However, the
t_RV is set, otherwise other things would not work, such as automatically
-setting 'ttymouse' to "sgr".
+setting 'ttymouse' to "sgr" (at least until |t_XM| is being used for this).
It is not clear why kitty sets $TERM to "xterm-kitty", the terminal isn't
really xterm compatible. "kitty" would be more appropriate, but a terminfo
@@ -446,6 +449,8 @@ Added by Vim (there are no standard codes for these):
xterm and other terminal emulators) The
response is stored in |v:termresponse| |xterm-8bit|
|'ttymouse'| |xterm-codes|
+ t_XM enable/disable mouse reporting, *t_XM* *'t_XM'*
+ see |mouse-reporting| below
t_RK request terminal keyboard protocol state; *t_RK* *'t_RK'*
sent after |t_TI|
t_u7 request cursor position (for xterm) *t_u7* *'t_u7'*
@@ -499,6 +504,21 @@ t_SH must take one argument:
t_RS is sent only if the response to t_RV has been received. It is not used
on Mac OS when Terminal.app could be recognized from the termresponse.
+ *mouse-reporting*
+Many terminals can report mouse clicks and some can report mouse movement and
+dragging. Vim needs to know what codes are being used for this.
+
+The "XM" terminfo/termcap entry is used for this. Vim also has the 'ttymouse'
+option to specify the mouse protocol being used. See the option for the
+possible values.
+
+If Vim can read the "XM" terminfo/termcap entry then it will be used for
+enabling and disabling the mouse reporting. If it is missing, then the value
+from 'ttymouse' is used to decide how to do this.
+
+If the "XM" entry exists and the first number is "1006" then 'ttymouse' will
+be set to "sgr", unless it was already set earlier.
+
KEY CODES *terminal-key-codes*
Note: Use the <> form if possible
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index c7fefa6d82..be14871779 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt* For Vim version 9.0. Last change: 2022 Dec 31
+*todo.txt* For Vim version 9.0. Last change: 2023 Jan 09
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -54,20 +54,15 @@ Upcoming larger works:
Further Vim9 improvements, possibly after launch:
- implement :class and :interface: See |vim9-classes| #11544
- class members: add test for read/write access
- Test for E1337
- Should object members be declared with "var"? Looks more normal.
- Don't use "class method" in the help but use "class function", more people
- are used to that.
- implement class functions: static def Method()
- Disallow shadowing class members, e.g. by function arguments.
- tv_equal() should compare values, not identity.
+ inheritance: how about super()?
+ inheritance: new() method from parent used in child?
import/export of a class
- using a class name as a type
- garbage collection: set_ref_in_item(): Mark items in class as used ?
type() should return different type for each class?
+ give error for shadowing (variable and argument) when defining a class or
+ interface, not later when compiling it.
object empty(), len() - can class define a method to be used for them?
how about lock/unlock?
+ When checking "implements" also check types of members and function args.
- implement :type
- implement :enum
- Use Vim9 for more runtime files.
@@ -79,6 +74,10 @@ Further Vim9 improvements, possibly after launch:
Information missing in terminfo:
Priority:
- t_RV request terminal version string; xterm: "\033[>c"
+ change in terminfo for "RV" uses the wrong escape sequence... ?
+Mouse support:
+ on/off: hard coded in mch_setmouse() - use "XM" terminfo/termcap entry;
+ If it starts with "\E[?1006;1000%" then set 'ttymouse' to "sgr".
Codes used for focus gained and lost (currently using use_xterm_like_mouse())
termcodes are hard-coded in set_termname(), not named.
- t_fe enable focus-event tracking
@@ -233,9 +232,7 @@ Terminal emulator window:
- When 'encoding' is not utf-8, or the job is using another encoding, setup
conversions.
-Patch adds showcmd() function #11708 - tests missing StopVimInTerminal()
-
-Some setaf/setab/t_AF/t_AB values support RGB somehow? Can we use that?
+Patch adds showcmd() function #11708
Crash when a variable is removed while listing variables (Issue #11435)
diff --git a/runtime/doc/userfunc.txt b/runtime/doc/userfunc.txt
index ab2005ef50..fe7e906ccb 100644
--- a/runtime/doc/userfunc.txt
+++ b/runtime/doc/userfunc.txt
@@ -1,4 +1,4 @@
-*userfunc.txt* For Vim version 9.0. Last change: 2022 Nov 17
+*userfunc.txt* For Vim version 9.0. Last change: 2023 Jan 09
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -187,12 +187,21 @@ See |:verbose-cmd| for more information.
If "[expr]" is not given, the number 0 is returned.
When a function ends without an explicit ":return",
the number 0 is returned.
+
In a :def function *E1095* is given if unreachable
code follows after the `:return`.
In legacy script there is no check for unreachable
lines, thus there is no warning if commands follow
- `:return`.
-
+ `:return`. Also, there is no check if the following
+ line contains a valid command. Forgetting the line
+ continuation backslash may go unnoticed: >
+ return 'some text'
+ .. ' some more text'
+< Will happily return "some text" without an error. It
+ should have been: >
+ return 'some text'
+ \ .. ' some more text'
+<
If the ":return" is used after a |:try| but before the
matching |:finally| (if present), the commands
following the ":finally" up to the matching |:endtry|
diff --git a/runtime/doc/vim9class.txt b/runtime/doc/vim9class.txt
index cabe55b316..135b3093bb 100644
--- a/runtime/doc/vim9class.txt
+++ b/runtime/doc/vim9class.txt
@@ -1,4 +1,4 @@
-*vim9class.txt* For Vim version 9.0. Last change: 2022 Dec 20
+*vim9class.txt* For Vim version 9.0. Last change: 2023 Jan 09
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -261,10 +261,22 @@ prefix: >
totalSize += this.size
enddef
endclass
+< *E1340* *E1341*
+Since the name is used as-is, shadowing the name by a function argument name
+or variable name is not allowed.
+
+Just like object members the access can be made private by using an underscore
+as the first character in the name, and it can be made public by prefixing
+"public": >
+ class OtherThing
+ static total: number # anybody can read, only class can write
+ static _sum: number # only class can read and write
+ public static result: number # anybody can read and write
+ endclass
<
- *class-method*
-Class methods are also declared with "static". They have no access to object
-members, they cannot use the "this" keyword. >
+ *class-function*
+Class functions are also declared with "static". They have no access to
+object members, they cannot use the "this" keyword. >
class OtherThing
this.size: number
@@ -320,6 +332,9 @@ a number. This example extends the one above: >
enddef
endclass
+If a class declares to implement an interface, all the items specified in the
+interface must appear in the class, with the same types. *E1348* *E1349*
+
The interface name can be used as a type: >
var shapes: list<HasSurface> = [
@@ -372,9 +387,11 @@ once. They can appear in any order, although this order is recommended: >
implements InterfaceName, OtherInterface
specifies SomeInterface
< *extends*
-A class can extend one other class.
- *implements*
-A class can implement one or more interfaces.
+A class can extend one other class. *E1352* *E1353* *E1354*
+ *implements* *E1346* *E1347*
+A class can implement one or more interfaces. The "implements" keyword can
+only appear once *E1350* . Multiple interfaces can be specified, separated by
+commas. Each interface name can appear only once. *E1351*
*specifies*
A class can declare its interface, the object members and methods, with a
named interface. This avoids the need for separately specifying the
@@ -416,10 +433,10 @@ prefixed with `:export`: >
export interface InterfaceName
endinterface
-
+< *E1344*
An interface can declare object members, just like in a class but without any
initializer.
-
+ *E1345*
An interface can declare methods with `:def`, including the arguments and
return type, but without the body and without `:enddef`. Example: >
@@ -428,8 +445,10 @@ return type, but without the body and without `:enddef`. Example: >
def Surface(): number
endinterface
+An interface name must start with an uppercase letter. *E1343*
The "Has" prefix can be used to make it easier to guess this is an interface
name, with a hint about what it provides.
+An interface can only be defined in a |Vim9| script file. *E1342*
Default constructor ~
@@ -449,8 +468,6 @@ Then The default constructor will be: >
def new(this.name = v:none, this.age = v:none, this.gender = v:none)
enddef
-All object members will be used, also private access ones.
-
The "= v:none" default values make the arguments optional. Thus you can also
call `new()` without any arguments. No assignment will happen and the default
value for the object members will be used. This is a more useful example,
@@ -472,6 +489,12 @@ Note that you cannot use another default value than "v:none" here. If you
want to initialize the object members, do it where they are declared. This
way you only need to look in one place for the default values.
+All object members will be used in the default constructor, also private
+access ones.
+
+If the class extends another one, the object members of that class will come
+first.
+
Multiple constructors ~
@@ -610,6 +633,22 @@ type checking will make sure it works as you intended. This rules out
polymorphism, which we don't really need anyway.
+Single inheritance and interfaces ~
+
+Some languages support multiple inheritance. Although that can be useful in
+some cases, it makes the rules of how a class works quite complicated.
+Instead, using interfaces to declare what is supported is much simpler. The
+very popular Java language does it this way, and it should be good enough for
+Vim. The "keep it simple" rule applies here.
+
+Explicitly declaring that a class supports an interface makes it easy to see
+what a class is intended for. It also makes it possible to do proper type
+checking. When an interface is changed any class that declares to implement
+it will be checked if that change was also changed. The mechanism to assume a
+class implements an interface just because the methods happen to match is
+brittle and leads to obscure problems, let's not do that.
+
+
Using "this.member" everywhere ~
The object members in various programming languages can often be accessed in
@@ -628,22 +667,6 @@ also directly clear which variable references are object members and which
aren't.
-Single inheritance and interfaces ~
-
-Some languages support multiple inheritance. Although that can be useful in
-some cases, it makes the rules of how a class works quite complicated.
-Instead, using interfaces to declare what is supported is much simpler. The
-very popular Java language does it this way, and it should be good enough for
-Vim. The "keep it simple" rule applies here.
-
-Explicitly declaring that a class supports an interface makes it easy to see
-what a class is intended for. It also makes it possible to do proper type
-checking. When an interface is changed any class that declares to implement
-it will be checked if that change was also changed. The mechanism to assume a
-class implements an interface just because the methods happen to match is
-brittle and leads to obscure problems, let's not do that.
-
-
Using class members ~
Using "static member" to declare a class member is very common, nothing new
@@ -658,6 +681,55 @@ quite a bit of space, and when the class is renamed all these places need to
be changed too.
+Declaring object and class members ~
+
+The main choice is whether to use "var" as with variable declarations.
+TypeScript does not use it: >
+ class Point {
+ x: number;
+ y = 0;
+ }
+
+Following that Vim object members could be declared like this: >
+ class Point
+ this.x: number
+ this.y = 0
+ endclass
+
+Some users pointed out that this looks more like an assignment than a
+declaration. Adding "var" changes that: >
+ class Point
+ var this.x: number
+ var this.y = 0
+ endclass
+
+We also need to be able to declare class members using the "static" keyword.
+There we can also choose to leave out "var": >
+ class Point
+ var this.x: number
+ static count = 0
+ endclass
+
+Or do use it, before "static": >
+ class Point
+ var this.x: number
+ var static count = 0
+ endclass
+
+Or after "static": >
+ class Point
+ var this.x: number
+ static var count = 0
+ endclass
+
+This is more in line with "static def Func()".
+
+There is no clear preference whether to use "var" or not. The two main
+reasons to leave it out are:
+1. TypeScript, Java and other popular languages do not use it.
+2. Less clutter.
+
+
Using "ClassName.new()" to construct an object ~
Many languages use the "new" operator to create an object, which is actually
diff --git a/runtime/syntax/editorconfig.vim b/runtime/syntax/editorconfig.vim
new file mode 100644
index 0000000000..6740624bc3
--- /dev/null
+++ b/runtime/syntax/editorconfig.vim
@@ -0,0 +1,21 @@
+" Vim syntax file
+" Language: EditorConfig
+" Maintainer: Gregory Anders <greg@gpanders.com>
+" Last Change: 2023-01-03
+
+if exists('b:current_syntax')
+ finish
+endif
+
+runtime! syntax/dosini.vim
+unlet! b:current_syntax
+
+syntax match editorconfigUnknownProperty "^\s*\zs\w\+\ze\s*="
+
+syntax keyword editorconfigProperty root charset end_of_line indent_style
+syntax keyword editorconfigProperty indent_size tab_width max_line_length
+syntax keyword editorconfigProperty trim_trailing_whitespace insert_final_newline
+
+hi def link editorconfigProperty dosiniLabel
+
+let b:current_syntax = 'editorconfig'
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index e6651b8a06..ae5272a47c 100644
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -1,8 +1,8 @@
" Vim syntax file
" Language: Vim 9.0 script
" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
-" Last Change: December 20, 2022
-" Version: 9.0-17
+" Last Change: Jan 08, 2023
+" Version: 9.0-18
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM
" Automatically generated keyword lists: {{{1
@@ -244,7 +244,8 @@ endif
syn cluster vimFuncList contains=vimCommand,vimFunctionError,vimFuncKey,Tag,vimFuncSID
syn cluster vimFuncBodyList contains=vimAbb,vimAddress,vimAugroupKey,vimAutoCmd,vimCmplxRepeat,vimComment,vim9Comment,vimContinue,vimCtrlChar,vimEcho,vimEchoHL,vimEnvvar,vimExecute,vimIsCommand,vimFBVar,vimFunc,vimFunction,vimFuncVar,vimGlobal,vimHighlight,vimIsCommand,vimLet,vimLetHereDoc,vimLineComment,vimMap,vimMark,vimNorm,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegion,vimRegister,vimSearch,vimSet,vimSpecFile,vimString,vimSubst,vimSynLine,vimUnmap,vimUserCommand
syn match vimFunction "\<\(fu\%[nction]\)!\=\s\+\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)*\ze\s*(" contains=@vimFuncList nextgroup=vimFuncBody
-syn match vimFunction "\<def!\=\ze\s*(" contains=@vimFuncList nextgroup=vimFuncBody
+syn match vimFunction "\<def!\=\s\+\%(\i\|[#.]\|{.\{-1,}}\)*\ze\s*(" contains=@vimFuncList nextgroup=vimFuncBody
+"syn match vimFunction "\<def!\=\ze\s*(" contains=@vimFuncList nextgroup=vimFuncBody
if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f'
syn region vimFuncBody contained fold start="\ze\s*(" matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\|enddef\>\)" contains=@vimFuncBodyList