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
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
# 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:
#
.. '\|' .. 'endw\%[hile]'
.. '\|' .. 'endt\%[ry]'
.. '\|' .. 'enddef'
+ .. '\|' .. 'endclass'
.. '\|' .. 'endf\%[unction]'
.. '\|' .. 'aug\%[roup]\s\+[eE][nN][dD]'
.. '\|' .. CLOSING_BRACKET
en\%[dif]
el\%[se]
endfor\=
+ endclass
endw\%[hile]
endt\%[ry]
fina\|finally\=
el\%[se]
elseif\=
for
+ class
wh\%[ile]
try
cat\%[ch]
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]'],
-*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
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}.
-*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
|: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
|: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
|: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
|: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
-*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
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
-*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
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|.
'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'*
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*
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*
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*
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*
-*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
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
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
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'*
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
-*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
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.
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
- 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)
-*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
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|
-*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
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
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> = [
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
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: >
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 ~
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,
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 ~
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
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
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
--- /dev/null
+" 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'
" 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
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