Update runtime files
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 735cce3..0963685 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -334,6 +334,7 @@
 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/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 24e2c93..898f22f 100644
--- a/runtime/autoload/dist/vimindent.vim
+++ b/runtime/autoload/dist/vimindent.vim
@@ -2,7 +2,7 @@
 
 # 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 @@
     .. '\|' .. 'endw\%[hile]'
     .. '\|' .. 'endt\%[ry]'
     .. '\|' .. 'enddef'
+    .. '\|' .. 'endclass'
     .. '\|' .. 'endf\%[unction]'
     .. '\|' .. 'aug\%[roup]\s\+[eE][nN][dD]'
     .. '\|' .. CLOSING_BRACKET
@@ -212,6 +213,7 @@
     en\%[dif]
     el\%[se]
     endfor\=
+    endclass
     endw\%[hile]
     endt\%[ry]
     fina\|finally\=
@@ -251,6 +253,7 @@
     el\%[se]
     elseif\=
     for
+    class
     wh\%[ile]
     try
     cat\%[ch]
@@ -278,6 +281,8 @@
     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 98c4869..556b171 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 @@
 			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 9de498b..c4363a8 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 @@
 |: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 @@
 |: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 @@
 |: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 @@
 |: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 5c7b4f8..1756436 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 @@
 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 dc6e16b..a514b6f 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 @@
 
 	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 66dd96a..49cabaa 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -1082,6 +1082,7 @@
 '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 @@
 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-}*
 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.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_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 8b8214c..3336889 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 @@
 	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 @@
 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 @@
 		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_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 c7fefa6..be14871 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 @@
 
 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 @@
 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 @@
 - 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 ab2005e..fe7e906 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 @@
 			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 cabe55b..135b309 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 @@
 	      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 @@
 	   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 @@
 	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 @@
 
 	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 @@
 	   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 @@
 	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 @@
 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 @@
 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 @@
 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 @@
 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 0000000..6740624
--- /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 e6651b8..ae5272a 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 @@
 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