summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README_VIM9.md11
-rw-r--r--runtime/autoload/dist/vimindent.vim320
-rw-r--r--runtime/autoload/tohtml.vim424
-rw-r--r--runtime/doc/builtin.txt2
-rw-r--r--runtime/doc/diff.txt4
-rw-r--r--runtime/doc/eval.txt2
-rw-r--r--runtime/doc/fold.txt4
-rw-r--r--runtime/doc/ft_context.txt2
-rw-r--r--runtime/doc/ft_mp.txt2
-rw-r--r--runtime/doc/options.txt14
-rw-r--r--runtime/doc/quickfix.txt4
-rw-r--r--runtime/doc/tags16
-rw-r--r--runtime/doc/term.txt9
-rw-r--r--runtime/doc/testing.txt6
-rw-r--r--runtime/doc/textprop.txt6
-rw-r--r--runtime/doc/todo.txt55
-rw-r--r--runtime/doc/usr_41.txt2
-rw-r--r--runtime/doc/vim9.txt16
-rw-r--r--runtime/doc/vim9class.txt227
-rw-r--r--runtime/filetype.vim2
-rw-r--r--runtime/ftplugin/debchangelog.vim10
-rw-r--r--runtime/ftplugin/debcontrol.vim4
-rw-r--r--runtime/ftplugin/logcheck.vim4
-rw-r--r--runtime/indent/testdir/vim.in52
-rw-r--r--runtime/indent/testdir/vim.ok52
-rw-r--r--runtime/plugin/tohtml.vim37
-rw-r--r--runtime/syntax/2html.vim2
-rw-r--r--runtime/syntax/automake.vim4
-rw-r--r--runtime/syntax/debchangelog.vim4
-rw-r--r--runtime/syntax/debcontrol.vim4
-rw-r--r--runtime/syntax/debcopyright.vim4
-rw-r--r--runtime/syntax/debsources.vim6
-rw-r--r--runtime/syntax/dep3patch.vim4
-rw-r--r--runtime/syntax/forth.vim30
-rw-r--r--runtime/syntax/gpg.vim162
-rw-r--r--runtime/syntax/lc.vim31
-rw-r--r--runtime/syntax/nginx.vim33
-rw-r--r--runtime/syntax/sh.vim16
-rw-r--r--runtime/syntax/shared/README.txt2
-rw-r--r--runtime/syntax/tpp.vim4
-rw-r--r--runtime/syntax/vim.vim33
-rw-r--r--runtime/syntax/xf86conf.vim10
-rw-r--r--runtime/tutor/tutor4
-rw-r--r--runtime/tutor/tutor.utf-84
-rw-r--r--src/po/ca.po4
-rw-r--r--src/po/de.po4
-rw-r--r--src/po/eo.po4
-rw-r--r--src/po/es.po4
-rw-r--r--src/po/fi.po4
-rw-r--r--src/po/ga.po4
-rw-r--r--src/po/it.po4
-rw-r--r--src/po/ja.euc-jp.po4
-rw-r--r--src/po/ja.po4
-rw-r--r--src/po/ja.sjis.po4
-rw-r--r--src/po/ru.cp1251.po4
-rw-r--r--src/po/ru.po4
-rw-r--r--src/po/sr.po212
-rw-r--r--src/po/tr.po4
-rw-r--r--src/po/uk.cp1251.po4
-rw-r--r--src/po/uk.po4
-rw-r--r--src/po/zh_CN.UTF-8.po4
-rw-r--r--src/po/zh_CN.cp936.po4
-rw-r--r--src/po/zh_CN.po4
63 files changed, 1240 insertions, 688 deletions
diff --git a/README_VIM9.md b/README_VIM9.md
index b3ca49f09..c9ce73a2d 100644
--- a/README_VIM9.md
+++ b/README_VIM9.md
@@ -2,18 +2,17 @@
# What is Vim9?
-This is an experimental side of [Vim](https://github.com/vim/vim).
-It explores ways of making Vim script faster and better.
+This is a new syntax for Vim script that was introduced with Vim 9.0.
+It intends making Vim script faster and better.
-WARNING: The Vim9 script features are still under development, anything can
-break!
# Why Vim9?
## 1. FASTER VIM SCRIPT
The third item on the poll results of 2018, after popup windows and text
-properties, is faster Vim script. So how do we do that?
+properties, both of which have been implemented, is faster Vim script.
+So how do we do that?
I have been throwing some ideas around, and soon came to the conclusion
that the current way functions are called and executed, with
@@ -53,7 +52,7 @@ we can gain, and also that Vim script can be faster than builtin
interfaces.
LuaJit is much faster at Lua-only instructions. In practice the script would
-not do something useless as counting but change the text. For example,
+not do something useless counting, but change the text. For example,
reindent all the lines:
``` vim
diff --git a/runtime/autoload/dist/vimindent.vim b/runtime/autoload/dist/vimindent.vim
index 898f22f65..8d86543cb 100644
--- a/runtime/autoload/dist/vimindent.vim
+++ b/runtime/autoload/dist/vimindent.vim
@@ -2,12 +2,12 @@ vim9script
# Language: Vim script
# Maintainer: github user lacygoill
-# Last Change: 2023 Jan 03
+# Last Change: 2023 Feb 01
# NOTE: Whenever you change the code, make sure the tests are still passing:
#
# $ cd runtime/indent/
-# $ make clean; make test || vimdiff testdir/vim.{fail,ok}
+# $ make clean; make test || vimdiff testdir/vim.{ok,fail}
# Config {{{1
@@ -112,6 +112,10 @@ const DICT_KEY: string = '^\s*\%('
.. '\)'
.. ':\%(\s\|$\)'
+# NOT_A_DICT_KEY {{{3
+
+const NOT_A_DICT_KEY: string = ':\@!'
+
# END_OF_COMMAND {{{3
const END_OF_COMMAND: string = $'\s*\%($\|||\@!\|{INLINE_COMMENT}\)'
@@ -144,19 +148,43 @@ const HEREDOC_OPERATOR: string = '\s=<<\s\@=\%(\s\+\%(trim\|eval\)\)\{,2}'
#
# But sometimes, it can be too costly and cause `E363` to be given.
const PATTERN_DELIMITER: string = '[-+*/%]\%(=\s\)\@!'
-
-# QUOTE {{{3
-
-const QUOTE: string = '["'']'
# }}}2
# Syntaxes {{{2
-# ASSIGNS_HEREDOC {{{3
-
-const ASSIGNS_HEREDOC: string = $'^\%({COMMENT}\)\@!.*\%({HEREDOC_OPERATOR}\)\s\+\zs[A-Z]\+{END_OF_LINE}'
-
-# CD_COMMAND {{{3
-
-const CD_COMMAND: string = $'\<[lt]\=cd!\=\s\+-{END_OF_COMMAND}'
+# BLOCKS {{{3
+
+const BLOCKS: list<list<string>> = [
+ ['if', 'el\%[se]', 'elseif\=', 'en\%[dif]'],
+ ['for', 'endfor\='],
+ ['wh\%[ile]', 'endw\%[hile]'],
+ ['try', 'cat\%[ch]', 'fina\|finally\=', 'endt\%[ry]'],
+ ['def', 'enddef'],
+ ['fu\%[nction](\@!', 'endf\%[unction]'],
+ ['class', 'endclass'],
+ ['interface', 'endinterface'],
+ ['enum', 'endenum'],
+ ['aug\%[roup]\%(\s\+[eE][nN][dD]\)\@!\s\+\S\+', 'aug\%[roup]\s\+[eE][nN][dD]'],
+]
+
+# MODIFIERS {{{3
+
+# some keywords can be prefixed by modifiers (e.g. `def` can be prefixed by `export`)
+const MODIFIERS: dict<string> = {
+ def: ['export', 'static'],
+ class: ['export', 'abstract', 'export abstract'],
+ interface: ['export'],
+}
+# ...
+# class: ['export', 'abstract', 'export abstract'],
+# ...
+# →
+# ...
+# class: '\%(export\|abstract\|export\s\+abstract\)\s\+',
+# ...
+->map((_, mods: list<string>): string =>
+ '\%(' .. mods
+ ->join('\|')
+ ->substitute('\s\+', '\\s\\+', 'g')
+ .. '\)' .. '\s\+')
# HIGHER_ORDER_COMMAND {{{3
@@ -174,58 +202,102 @@ patterns =<< trim eval END
g\%[lobal]!\={PATTERN_DELIMITER}.*
v\%[global]!\={PATTERN_DELIMITER}.*
END
-const HIGHER_ORDER_COMMAND: string = $'\%(^\|{BAR_SEPARATION}\)\s*\<\%(' .. patterns->join('\|') .. '\):\@!'
-# MAPPING_COMMAND {{{3
+const HIGHER_ORDER_COMMAND: string = $'\%(^\|{BAR_SEPARATION}\)\s*\<\%({patterns->join('\|')}\){NOT_A_DICT_KEY}'
-const MAPPING_COMMAND: string = '\%(\<sil\%[ent]!\=\s\+\)\=\<[nvxsoilct]\=\%(nore\|un\)map!\=\s'
+# START_MIDDLE_END {{{3
-# NORMAL_COMMAND {{{3
+# Let's derive this constant from `BLOCKS`:
+#
+# [['if', 'el\%[se]', 'elseif\=', 'en\%[dif]'],
+# ['for', 'endfor\='],
+# ...,
+# [...]]
+# →
+# {
+# 'for': ['for', '', 'endfor\='],
+# 'endfor': ['for', '', 'endfor\='],
+# 'if': ['if', 'el\%[se]\|elseif\=', 'en\%[dif]'],
+# 'else': ['if', 'el\%[se]\|elseif\=', 'en\%[dif]'],
+# 'elseif': ['if', 'el\%[se]\|elseif\=', 'en\%[dif]'],
+# 'endif': ['if', 'el\%[se]\|elseif\=', 'en\%[dif]'],
+# ...
+# }
+var START_MIDDLE_END: dict<list<string>>
+
+def Unshorten(kwd: string): string
+ return BlockStartKeyword(kwd)
+enddef
-const NORMAL_COMMAND: string = '\<norm\%[al]!\=\s*\S\+$'
+def BlockStartKeyword(line: string): string
+ var kwd: string = line->matchstr('\l\+')
+ return fullcommand(kwd, false)
+enddef
-# PLUS_MINUS_COMMAND {{{3
+{
+ for kwds: list<string> in BLOCKS
+ var [start: string, middle: string, end: string] = [kwds[0], '', kwds[-1]]
+ if MODIFIERS->has_key(start->Unshorten())
+ start = $'\%({MODIFIERS[start]}\)\={start}'
+ endif
+ if kwds->len() > 2
+ middle = kwds[1 : -2]->join('\|')
+ endif
+ for kwd: string in kwds
+ START_MIDDLE_END->extend({[kwd->Unshorten()]: [start, middle, end]})
+ endfor
+ endfor
+}
-# In legacy, the `:+` and `:-` commands are not required to be preceded by a colon.
-# As a result, when `+` or `-` is alone on a line, there is ambiguity.
-# It might be an operator or a command.
-# To not break the indentation in legacy scripts, we might need to consider such
-# lines as commands.
-const PLUS_MINUS_COMMAND: string = '^\s*[+-]\s*$'
+START_MIDDLE_END = START_MIDDLE_END
+ ->map((_, kwds: list<string>) =>
+ kwds->map((_, kwd: string) => kwd == ''
+ ? ''
+ : $'\%(^\|{BAR_SEPARATION}\|\<sil\%[ent]\|{HIGHER_ORDER_COMMAND}\)\s*'
+ .. $'\<\%({kwd}\)\>\%(\s*{OPERATOR}\)\@!'))
+
+lockvar! START_MIDDLE_END
# ENDS_BLOCK {{{3
const ENDS_BLOCK: string = '^\s*\%('
- .. 'en\%[dif]'
- .. '\|' .. 'endfor\='
- .. '\|' .. 'endw\%[hile]'
- .. '\|' .. 'endt\%[ry]'
- .. '\|' .. 'enddef'
- .. '\|' .. 'endclass'
- .. '\|' .. 'endf\%[unction]'
- .. '\|' .. 'aug\%[roup]\s\+[eE][nN][dD]'
+ .. BLOCKS
+ ->copy()
+ ->map((_, kwds: list<string>): string => kwds[-1])
+ ->join('\|')
.. '\|' .. CLOSING_BRACKET
.. $'\){END_OF_COMMAND}'
# ENDS_BLOCK_OR_CLAUSE {{{3
-patterns =<< trim END
- en\%[dif]
- el\%[se]
- endfor\=
- endclass
- endw\%[hile]
- endt\%[ry]
- fina\|finally\=
- enddef
- endf\%[unction]
- aug\%[roup]\s\+[eE][nN][dD]
-END
+patterns = BLOCKS
+ ->copy()
+ ->map((_, kwds: list<string>) => kwds[1 :])
+ ->flattennew()
+ # `catch` and `elseif` need to be handled as special cases
+ ->filter((_, pat: string): bool => pat->Unshorten() !~ '^\%(catch\|elseif\)\>')
const ENDS_BLOCK_OR_CLAUSE: string = '^\s*\%(' .. patterns->join('\|') .. $'\){END_OF_COMMAND}'
.. $'\|^\s*cat\%[ch]\%(\s\+\({PATTERN_DELIMITER}\).*\1\)\={END_OF_COMMAND}'
.. $'\|^\s*elseif\=\>\%({OPERATOR}\)\@!'
+# STARTS_NAMED_BLOCK {{{3
+
+patterns = []
+{
+ for kwds: list<string> in BLOCKS
+ for kwd: string in kwds[0 : -2]
+ if MODIFIERS->has_key(kwd->Unshorten())
+ patterns += [$'\%({MODIFIERS[kwd]}\)\={kwd}']
+ else
+ patterns += [kwd]
+ endif
+ endfor
+ endfor
+}
+
+const STARTS_NAMED_BLOCK: string = $'^\s*\%(sil\%[ent]\s\+\)\=\%({patterns->join('\|')}\)\>{NOT_A_DICT_KEY}'
+
# STARTS_CURLY_BLOCK {{{3
# TODO: `{` alone on a line is not necessarily the start of a block.
@@ -238,73 +310,57 @@ const STARTS_CURLY_BLOCK: string = '\%('
.. '\|' .. $'^\%(\s*\|.*{BAR_SEPARATION}\s*\)\%(com\%[mand]\|au\%[tocmd]\).*\zs\s{{'
.. '\)' .. END_OF_COMMAND
-# STARTS_NAMED_BLOCK {{{3
-
-# All of these will be used at the start of a line (or after a bar).
-# NOTE: Don't replace `\%x28` with `(`.{{{
-#
-# Otherwise, the paren would be unbalanced which might cause syntax highlighting
-# issues much later in the code of the current script (sometimes, the syntax
-# highlighting plugin fails to correctly recognize a heredoc which is far away
-# and/or not displayed because inside a fold).
-# }}}
-patterns =<< trim END
- if
- el\%[se]
- elseif\=
- for
- class
- wh\%[ile]
- try
- cat\%[ch]
- fina\|finally\=
- fu\%[nction]\%x28\@!
- \%(export\s\+\)\=def
- aug\%[roup]\%(\s\+[eE][nN][dD]\)\@!\s\+\S\+
-END
-const STARTS_NAMED_BLOCK: string = '^\s*\%(sil\%[ent]\s\+\)\=\%(' .. patterns->join('\|') .. '\)\>:\@!'
-
# STARTS_FUNCTION {{{3
-const STARTS_FUNCTION: string = '^\s*\%(export\s\+\)\=def\>:\@!'
+const STARTS_FUNCTION: string = $'^\s*\%({MODIFIERS.def}\)\=def\>{NOT_A_DICT_KEY}'
# ENDS_FUNCTION {{{3
-const ENDS_FUNCTION: string = $'^\s*enddef\>:\@!{END_OF_COMMAND}'
+const ENDS_FUNCTION: string = $'^\s*enddef\>{END_OF_COMMAND}'
-# START_MIDDLE_END {{{3
+# ASSIGNS_HEREDOC {{{3
+
+const ASSIGNS_HEREDOC: string = $'^\%({COMMENT}\)\@!.*\%({HEREDOC_OPERATOR}\)\s\+\zs[A-Z]\+{END_OF_LINE}'
-const START_MIDDLE_END: dict<list<string>> = {
- if: ['if', 'el\%[se]\|elseif\=', 'en\%[dif]'],
- else: ['if', 'el\%[se]\|elseif\=', 'en\%[dif]'],
- elseif: ['if', 'el\%[se]\|elseif\=', 'en\%[dif]'],
- 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]'],
- catch: ['try', 'cat\%[ch]\|fina\|finally\=', 'endt\%[ry]'],
- finally: ['try', 'cat\%[ch]\|fina\|finally\=', 'endt\%[ry]'],
- endtry: ['try', 'cat\%[ch]\|fina\|finally\=', 'endt\%[ry]'],
- def: ['\%(export\s\+\)\=def', '', 'enddef'],
- enddef: ['\%(export\s\+\)\=def', '', 'enddef'],
- function: ['fu\%[nction]', '', 'endf\%[unction]'],
- endfunction: ['fu\%[nction]', '', 'endf\%[unction]'],
- augroup: ['aug\%[roup]\%(\s\+[eE][nN][dD]\)\@!\s\+\S\+', '', 'aug\%[roup]\s\+[eE][nN][dD]'],
-}->map((_, kwds: list<string>) =>
- kwds->map((_, kwd: string) => kwd == ''
- ? ''
- : $'\%(^\|{BAR_SEPARATION}\|\<sil\%[ent]\|{HIGHER_ORDER_COMMAND}\)\s*'
- .. $'\%({printf('\C\<\%%(%s\)\>:\@!\%%(\s*%s\)\@!', kwd, OPERATOR)}\)'))
+# PLUS_MINUS_COMMAND {{{3
+
+# In legacy, the `:+` and `:-` commands are not required to be preceded by a colon.
+# As a result, when `+` or `-` is alone on a line, there is ambiguity.
+# It might be an operator or a command.
+# To not break the indentation in legacy scripts, we might need to consider such
+# lines as commands.
+const PLUS_MINUS_COMMAND: string = '^\s*[+-]\s*$'
+
+# TRICKY_COMMANDS {{{3
+
+# Some commands are tricky because they accept an argument which can be
+# conflated with an operator. Examples:
+#
+# argdelete *
+# cd -
+# normal! ==
+# nunmap <buffer> (
+#
+# TODO: Other commands might accept operators as argument. Handle them too.
+patterns =<< trim eval END
+ {'\'}<argd\%[elete]\s\+\*\s*$
+ \<[lt]\=cd!\=\s\+-\s*$
+ \<norm\%[al]!\=\s*\S\+$
+ \%(\<sil\%[ent]!\=\s\+\)\=\<[nvxsoilct]\=\%(nore\|un\)map!\=\s
+ {PLUS_MINUS_COMMAND}
+END
+
+const TRICKY_COMMANDS: string = patterns->join('\|')
# }}}2
# EOL {{{2
# OPENING_BRACKET_AT_EOL {{{3
const OPENING_BRACKET_AT_EOL: string = OPENING_BRACKET .. END_OF_VIM9_LINE
+# CLOSING_BRACKET_AT_EOL {{{3
+
+const CLOSING_BRACKET_AT_EOL: string = CLOSING_BRACKET .. END_OF_VIM9_LINE
+
# COMMA_AT_EOL {{{3
const COMMA_AT_EOL: string = $',{END_OF_VIM9_LINE}'
@@ -392,6 +448,7 @@ export def Expr(lnum = v:lnum): number # {{{2
endif
if line_A->AtStartOf('FuncHeader')
+ && !IsInInterface()
line_A.lnum->CacheFuncHeader()
elseif line_A.lnum->IsInside('FuncHeader')
return b:vimindent.startindent + 2 * shiftwidth()
@@ -430,6 +487,7 @@ export def Expr(lnum = v:lnum): number # {{{2
if line_A.text->ContinuesBelowBracketBlock(line_B, past_bracket_block)
&& line_A.text !~ CLOSING_BRACKET_AT_SOL
return past_bracket_block.startindent
+ + (past_bracket_block.startline =~ STARTS_NAMED_BLOCK ? 2 * shiftwidth() : 0)
endif
# Problem: If we press `==` on the line right below the start of a multiline
@@ -438,6 +496,18 @@ export def Expr(lnum = v:lnum): number # {{{2
if line_B->EndsWithLambdaArrow()
return Indent(line_B.lnum) + shiftwidth() + IndentMoreInBracketBlock()
endif
+ # FIXME: Similar issue here:
+ #
+ # var x = []
+ # ->filter((_, _) =>
+ # true)
+ # ->items()
+ #
+ # Press `==` on last line.
+ # Expected: The `->items()` line is indented like `->filter(...)`.
+ # Actual: It's indented like `true)`.
+ # Is it worth fixing? `=ip` gives the correct indentation, because then the
+ # cache is used.
# Don't move this block before the heredoc one.{{{
#
@@ -536,8 +606,13 @@ def Offset( # {{{2
line_B: dict<any>,
): number
+ if line_B->AtStartOf('FuncHeader')
+ && IsInInterface()
+ return 0
+
# increase indentation inside a block
- if line_B.text =~ STARTS_NAMED_BLOCK || line_B->EndsWithCurlyBlock()
+ elseif line_B.text =~ STARTS_NAMED_BLOCK
+ || line_B->EndsWithCurlyBlock()
# But don't indent if the line starting the block also closes it.
if line_B->AlsoClosesBlock()
return 0
@@ -807,11 +882,6 @@ def Indent(lnum: number): number # {{{3
return indent(lnum)
enddef
-def BlockStartKeyword(line: string): string # {{{3
- var kwd: string = line->matchstr('\l\+')
- return fullcommand(kwd, false)
-enddef
-
def MatchingOpenBracket(line: dict<any>): number # {{{3
var end: string = line.text->matchstr(CLOSING_BRACKET)
var start: string = {']': '[', '}': '{', ')': '('}[end]
@@ -908,7 +978,8 @@ def SearchPair( # {{{3
if end == '[' || end == ']'
e = e->escape('[]')
endif
- return searchpair(s, middle, e, flags, (): bool => InCommentOrString(), stopline, TIMEOUT)
+ return searchpair('\C' .. s, (middle == '' ? '' : '\C' .. middle), '\C' .. e,
+ flags, (): bool => InCommentOrString(), stopline, TIMEOUT)
enddef
def SearchPairStart( # {{{3
@@ -1016,6 +1087,10 @@ def IsInThisBlock(line_A: dict<any>, lnum: number): bool # {{{3
return line_A.lnum <= end
enddef
+def IsInInterface(): bool # {{{3
+ return SearchPair('interface', '', 'endinterface', 'nW') > 0
+enddef
+
def IsFirstLineOfCommand(line_1: dict<any>, line_2: dict<any>): bool # {{{3
if line_1.text->Is_IN_KeywordForLoop(line_2.text)
return false
@@ -1096,6 +1171,10 @@ def EndsWithOpeningBracket(line: dict<any>): bool # {{{3
return NonCommentedMatch(line, OPENING_BRACKET_AT_EOL)
enddef
+def EndsWithClosingBracket(line: dict<any>): bool # {{{3
+ return NonCommentedMatch(line, CLOSING_BRACKET_AT_EOL)
+enddef
+
def NonCommentedMatch(line: dict<any>, pat: string): bool # {{{3
# Could happen if there is no code above us, and we're not on the 1st line.
# In that case, `PrevCodeLine()` returns `{lnum: 0, line: ''}`.
@@ -1103,16 +1182,6 @@ def NonCommentedMatch(line: dict<any>, pat: string): bool # {{{3
return false
endif
- if line.text =~ PLUS_MINUS_COMMAND
- return false
- endif
-
- # In `argdelete *`, `*` is not a multiplication operator.
- # TODO: Other commands can accept `*` as an argument. Handle them too.
- if line.text =~ '\<argd\%[elete]\s\+\*\s*$'
- return false
- endif
-
# Technically, that's wrong. A line might start with a range and end with a
# line continuation symbol. But it's unlikely. And it's useful to assume the
# opposite because it prevents us from conflating a mark with an operator or
@@ -1179,24 +1248,7 @@ def NonCommentedMatch(line: dict<any>, pat: string): bool # {{{3
return false
endif
- # `:help cd-`
- if line.text =~ CD_COMMAND
- return false
- endif
-
- # At the end of a mapping, any character might appear; e.g. a paren:
- #
- # nunmap <buffer> (
- #
- # Don't conflate this with a line continuation symbol.
- if line.text =~ MAPPING_COMMAND
- return false
- endif
-
- # not a comparison operator
- # vv
- # normal! ==
- if line.text =~ NORMAL_COMMAND
+ if line.text =~ TRICKY_COMMANDS
return false
endif
diff --git a/runtime/autoload/tohtml.vim b/runtime/autoload/tohtml.vim
index 270891abc..108634747 100644
--- a/runtime/autoload/tohtml.vim
+++ b/runtime/autoload/tohtml.vim
@@ -1,6 +1,6 @@
" Vim autoload file for the tohtml plugin.
" Maintainer: Ben Fritz <fritzophrenic@gmail.com>
-" Last Change: 2019 Aug 16
+" Last Change: 2023 Jan 01
"
" Additional contributors:
"
@@ -351,63 +351,65 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
let s:old_magic = &magic
set magic
- if s:settings.use_xhtml
- if s:settings.encoding != ""
- let xml_line = "<?xml version=\"1.0\" encoding=\"" . s:settings.encoding . "\"?>"
- else
- let xml_line = "<?xml version=\"1.0\"?>"
+ let html = []
+ if !s:settings.no_doc
+ if s:settings.use_xhtml
+ if s:settings.encoding != ""
+ let xml_line = "<?xml version=\"1.0\" encoding=\"" . s:settings.encoding . "\"?>"
+ else
+ let xml_line = "<?xml version=\"1.0\"?>"
+ endif
+ let tag_close = ' />'
endif
- let tag_close = ' />'
- endif
- let style = [s:settings.use_xhtml ? "" : '-->']
- let body_line = ''
+ let style = [s:settings.use_xhtml ? "" : '-->']
+ let body_line = ''
- let html = []
- let s:html5 = 0
- if s:settings.use_xhtml
- call add(html, xml_line)
- endif
- if s:settings.use_xhtml
- call add(html, "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">")
- call add(html, '<html xmlns="http://www.w3.org/1999/xhtml">')
- elseif s:settings.use_css && !s:settings.no_pre
- call add(html, "<!DOCTYPE html>")
- call add(html, '<html>')
- let s:html5 = 1
- else
- call add(html, '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"')
- call add(html, ' "http://www.w3.org/TR/html4/loose.dtd">')
- call add(html, '<html>')
- endif
- call add(html, '<head>')
-
- " include encoding as close to the top as possible, but only if not already
- " contained in XML information
- if s:settings.encoding != "" && !s:settings.use_xhtml
- if s:html5
- call add(html, '<meta charset="' . s:settings.encoding . '"' . tag_close)
+ let s:html5 = 0
+ if s:settings.use_xhtml
+ call add(html, xml_line)
+ endif
+ if s:settings.use_xhtml
+ call add(html, "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">")
+ call add(html, '<html xmlns="http://www.w3.org/1999/xhtml">')
+ elseif s:settings.use_css && !s:settings.no_pre
+ call add(html, "<!DOCTYPE html>")
+ call add(html, '<html>')
+ let s:html5 = 1
else
- call add(html, "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:settings.encoding . '"' . tag_close)
+ call add(html, '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"')
+ call add(html, ' "http://www.w3.org/TR/html4/loose.dtd">')
+ call add(html, '<html>')
endif
- endif
+ call add(html, '<head>')
- call add(html, '<title>diff</title>')
- call add(html, '<meta name="Generator" content="Vim/'.v:version/100.'.'.v:version%100.'"'.tag_close)
- call add(html, '<meta name="plugin-version" content="'.g:loaded_2html_plugin.'"'.tag_close)
- call add(html, '<meta name="settings" content="'.
- \ join(filter(keys(s:settings),'s:settings[v:val]'),',').
- \ ',prevent_copy='.s:settings.prevent_copy.
- \ ',use_input_for_pc='.s:settings.use_input_for_pc.
- \ '"'.tag_close)
- call add(html, '<meta name="colorscheme" content="'.
- \ (exists('g:colors_name')
- \ ? g:colors_name
- \ : 'none'). '"'.tag_close)
-
- call add(html, '</head>')
- let body_line_num = len(html)
- call add(html, '<body'.(s:settings.line_ids ? ' onload="JumpToLine();"' : '').'>')
+ " include encoding as close to the top as possible, but only if not already
+ " contained in XML information
+ if s:settings.encoding != "" && !s:settings.use_xhtml
+ if s:html5
+ call add(html, '<meta charset="' . s:settings.encoding . '"' . tag_close)
+ else
+ call add(html, "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:settings.encoding . '"' . tag_close)
+ endif
+ endif
+
+ call add(html, '<title>diff</title>')
+ call add(html, '<meta name="Generator" content="Vim/'.v:version/100.'.'.v:version%100.'"'.tag_close)
+ call add(html, '<meta name="plugin-version" content="'.g:loaded_2html_plugin.'"'.tag_close)
+ call add(html, '<meta name="settings" content="'.
+ \ join(filter(keys(s:settings),'s:settings[v:val]'),',').
+ \ ',prevent_copy='.s:settings.prevent_copy.
+ \ ',use_input_for_pc='.s:settings.use_input_for_pc.
+ \ '"'.tag_close)
+ call add(html, '<meta name="colorscheme" content="'.
+ \ (exists('g:colors_name')
+ \ ? g:colors_name
+ \ : 'none'). '"'.tag_close)
+
+ call add(html, '</head>')
+ let body_line_num = len(html)
+ call add(html, '<body'.(s:settings.line_ids ? ' onload="JumpToLine();"' : '').'>')
+ endif
call add(html, "<table ".(s:settings.use_css? "" : "border='1' width='100%' ")."id='vimCodeElement".s:settings.id_suffix."'>")
call add(html, '<tr>')
@@ -430,47 +432,53 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
" When not using CSS or when using xhtml, the <body> line can be important.
" Assume it will be the same for all buffers and grab it from the first
" buffer. Similarly, need to grab the body end line as well.
- if body_line == ''
- 1
- call search('<body')
- let body_line = getline('.')
- $
- call search('</body>', 'b')
- let s:body_end_line = getline('.')
- endif
+ if !s:settings.no_doc
+ if body_line == ''
+ 1
+ call search('<body')
+ let body_line = getline('.')
+ $
+ call search('</body>', 'b')
+ let s:body_end_line = getline('.')
+ endif
- " Grab the style information. Some of this will be duplicated so only insert
- " it if it's not already there. {{{
- 1
- let style_start = search('^<style\( type="text/css"\)\?>')
- 1
- let style_end = search('^</style>')
- if style_start > 0 && style_end > 0
- let buf_styles = getline(style_start + 1, style_end - 1)
- for a_style in buf_styles
- if index(style, a_style) == -1
- if diff_style_start == 0
- if a_style =~ '\<Diff\(Change\|Text\|Add\|Delete\)'
- let diff_style_start = len(style)-1
+ " Grab the style information. Some of this will be duplicated so only insert
+ " it if it's not already there. {{{
+ 1
+ let style_start = search('^<style\( type="text/css"\)\?>')
+ 1
+ let style_end = search('^</style>')
+ if style_start > 0 && style_end > 0
+ let buf_styles = getline(style_start + 1, style_end - 1)
+ for a_style in buf_styles
+ if index(style, a_style) == -1
+ if diff_style_start == 0
+ if a_style =~ '\<Diff\(Change\|Text\|Add\|Delete\)'
+ let diff_style_start = len(style)-1
+ endif
endif
+ call insert(style, a_style, insert_index)
+ let insert_index += 1
endif
- call insert(style, a_style, insert_index)
- let insert_index += 1
- endif
- endfor
- endif " }}}
+ endfor
+ endif " }}}
- " everything new will get added before the diff styles so diff highlight
- " properly overrides normal highlight
- if diff_style_start != 0
- let insert_index = diff_style_start
- endif
+ " everything new will get added before the diff styles so diff highlight
+ " properly overrides normal highlight
+ if diff_style_start != 0
+ let insert_index = diff_style_start
+ endif
- " Delete those parts that are not needed so we can include the rest into the
- " resulting table.
- 1,/^<body.*\%(\n<!--.*-->\_s\+.*id='oneCharWidth'.*\_s\+.*id='oneInputWidth'.*\_s\+.*id='oneEmWidth'\)\?\zs/d_
- $
- ?</body>?,$d_
+ " Delete those parts that are not needed so we can include the rest into the
+ " resulting table.
+ 1,/^<body.*\%(\n<!--.*-->\_s\+.*id='oneCharWidth'.*\_s\+.*id='oneInputWidth'.*\_s\+.*id='oneEmWidth'\)\?\zs/d_
+ $
+ ?</body>?,$d_
+ elseif !s:settings.no_modeline
+ " remove modeline from source files if it is included and we haven't deleted
+ " due to removing html footer already
+ $d
+ endif
let temp = getline(1,'$')
" clean out id on the main content container because we already set it on
" the table
@@ -478,7 +486,11 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
" undo deletion of start and end part
" so we can later save the file as valid html
" TODO: restore using grabbed lines if undolevel is 1?
- normal! 2u
+ if !s:settings.no_doc
+ normal! 2u
+ elseif !s:settings.no_modeline
+ normal! u
+ endif
if s:settings.use_css
call add(html, '<td><div>')
elseif s:settings.use_xhtml
@@ -495,17 +507,23 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
quit!
endfor
- let html[body_line_num] = body_line
+ if !s:settings.no_doc
+ let html[body_line_num] = body_line
+ endif
call add(html, '</tr>')
call add(html, '</table>')
- call add(html, s:body_end_line)
- call add(html, '</html>')
+ if !s:settings.no_doc
+ call add(html, s:body_end_line)
+ call add(html, '</html>')
+ endif
" The generated HTML is admittedly ugly and takes a LONG time to fold.
" Make sure the user doesn't do syntax folding when loading a generated file,
" using a modeline.
- call add(html, '<!-- vim: set foldmethod=manual : -->')
+ if !s:settings.no_modeline
+ call add(html, '<!-- vim: set foldmethod=manual : -->')
+ endif
let i = 1
let name = "Diff" . (s:settings.use_xhtml ? ".xhtml" : ".html")
@@ -542,129 +560,131 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{
call append(0, html)
- if len(style) > 0
- 1
- let style_start = search('^</head>')-1
+ if !s:settings.no_doc
+ if len(style) > 0
+ 1
+ let style_start = search('^</head>')-1
- " add required javascript in reverse order so we can just call append again
- " and again without adjusting {{{
+ " add required javascript in reverse order so we can just call append again
+ " and again without adjusting {{{
- let s:uses_script = s:settings.dynamic_folds || s:settings.line_ids
+ let s:uses_script = s:settings.dynamic_folds || s:settings.line_ids
- " insert script closing tag if needed
- if s:uses_script
- call append(style_start, [
- \ '',
- \ s:settings.use_xhtml ? '//]]>' : '-->',
- \ "</script>"
- \ ])
- endif
+ " insert script closing tag if needed
+ if s:uses_script
+ call append(style_start, [
+ \ '',
+ \ s:settings.use_xhtml ? '//]]>' : '-->',
+ \ "</script>"
+ \ ])
+ endif
- " insert javascript to get IDs from line numbers, and to open a fold before
- " jumping to any lines contained therein
- if s:settings.line_ids
- call append(style_start, [
- \ " /* Always jump to new location even if the line was hidden inside a fold, or",
- \ " * we corrected the raw number to a line ID.",
- \ " */",
- \ " if (lineElem) {",
- \ " lineElem.scrollIntoView(true);",
- \ " }",
- \ " return true;",
- \ "}",
- \ "if ('onhashchange' in window) {",
- \ " window.onhashchange = JumpToLine;",
- \ "}"
- \ ])
+ " insert javascript to get IDs from line numbers, and to open a fold before
+ " jumping to any lines contained therein
+ if s:settings.line_ids
+ call append(style_start, [
+ \ " /* Always jump to new location even if the line was hidden inside a fold, or",
+ \ " * we corrected the raw number to a line ID.",
+ \ " */",
+ \ " if (lineElem) {",
+ \ " lineElem.scrollIntoView(true);",
+ \ " }",
+ \ " return true;",
+ \ "}",
+ \ "if ('onhashchange' in window) {",
+ \ " window.onhashchange = JumpToLine;",
+ \ "}"
+ \ ])
- if s:settings.dynamic_folds
+ if s:settings.dynamic_folds
+ call append(style_start, [
+ \ "",
+ \ " /* navigate upwards in the DOM tree to open all folds containing the line */",
+ \ " var node = lineElem;",
+ \ " while (node && node.id != 'vimCodeElement".s:settings.id_suffix."')",
+ \ " {",
+ \ " if (node.className == 'closed-fold')",
+ \ " {",
+ \ " /* toggle open the fold ID (remove window ID) */",
+ \ " toggleFold(node.id.substr(4));",
+ \ " }",
+ \ " node = node.parentNode;",
+ \ " }",
+ \ ])
+ endif
+ endif
+
+ if s:settings.line_ids
call append(style_start, [
\ "",
- \ " /* navigate upwards in the DOM tree to open all folds containing the line */",
- \ " var node = lineElem;",
- \ " while (node && node.id != 'vimCodeElement".s:settings.id_suffix."')",
- \ " {",
- \ " if (node.className == 'closed-fold')",
- \ " {",
- \ " /* toggle open the fold ID (remove window ID) */",
- \ " toggleFold(node.id.substr(4));",
- \ " }",
- \ " node = node.parentNode;",
+ \ "/* function to open any folds containing a jumped-to line before jumping to it */",
+ \ "function JumpToLine()",
+ \ "{",
+ \ " var lineNum;",
+ \ " lineNum = window.location.hash;",
+ \ " lineNum = lineNum.substr(1); /* strip off '#' */",
+ \ "",
+ \ " if (lineNum.indexOf('L') == -1) {",
+ \ " lineNum = 'L'+lineNum;",
+ \ " }",
+ \ " if (lineNum.indexOf('W') == -1) {",
+ \ " lineNum = 'W1'+lineNum;",
\ " }",
+ \ " var lineElem = document.getElementById(lineNum);"
\ ])
endif
- endif
- if s:settings.line_ids
- call append(style_start, [
- \ "",
- \ "/* function to open any folds containing a jumped-to line before jumping to it */",
- \ "function JumpToLine()",
- \ "{",
- \ " var lineNum;",
- \ " lineNum = window.location.hash;",
- \ " lineNum = lineNum.substr(1); /* strip off '#' */",
- \ "",
- \ " if (lineNum.indexOf('L') == -1) {",
- \ " lineNum = 'L'+lineNum;",
- \ " }",
- \ " if (lineNum.indexOf('W') == -1) {",
- \ " lineNum = 'W1'+lineNum;",
- \ " }",
- \ " var lineElem = document.getElementById(lineNum);"
- \ ])
- endif
+ " Insert javascript to toggle matching folds open and closed in all windows,
+ " if dynamic folding is active.
+ if s:settings.dynamic_folds
+ call append(style_start, [
+ \ " function toggleFold(objID)",
+ \ " {",
+ \ " for (win_num = 1; win_num <= ".len(a:buf_list)."; win_num++)",
+ \ " {",
+ \ " var fold;",
+ \ ' fold = document.getElementById("win"+win_num+objID);',
+ \ " if(fold.className == 'closed-fold')",
+ \ " {",
+ \ " fold.className = 'open-fold';",
+ \ " }",
+ \ " else if (fold.className == 'open-fold')",
+ \ " {",
+ \ " fold.className = 'closed-fold';",
+ \ " }",
+ \ " }",
+ \ " }",
+ \ ])
+ endif
- " Insert javascript to toggle matching folds open and closed in all windows,
- " if dynamic folding is active.
- if s:settings.dynamic_folds
- call append(style_start, [
- \ " function toggleFold(objID)",
- \ " {",
- \ " for (win_num = 1; win_num <= ".len(a:buf_list)."; win_num++)",
- \ " {",
- \ " var fold;",
- \ ' fold = document.getElementById("win"+win_num+objID);',
- \ " if(fold.className == 'closed-fold')",
- \ " {",
- \ " fold.className = 'open-fold';",
- \ " }",
- \ " else if (fold.className == 'open-fold')",
- \ " {",
- \ " fold.className = 'closed-fold';",
- \ " }",
- \ " }",
- \ " }",
- \ ])
- endif
+ if s:uses_script
+ " insert script tag if needed
+ call append(style_start, [
+ \ "<script" . (s:html5 ? "" : " type='text/javascript'") . ">",
+ \ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"])
+ endif
- if s:uses_script
- " insert script tag if needed
- call append(style_start, [
- \ "<script" . (s:html5 ? "" : " type='text/javascript'") . ">",
- \ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"])
+ " Insert styles from all the generated html documents and additional styles
+ " for the table-based layout of the side-by-side diff. The diff should take
+ " up the full browser window (but not more), and be static in size,
+ " horizontally scrollable when the lines are too long. Otherwise, the diff
+ " is pretty useless for really long lines. {{{
+ if s:settings.use_css
+ call append(style_start,
+ \ ['<style' . (s:html5 ? '' : 'type="text/css"') . '>']+
+ \ style+
+ \ [ s:settings.use_xhtml ? '' : '<!--',
+ \ 'table { table-layout: fixed; }',
+ \ 'html, body, table, tbody { width: 100%; margin: 0; padding: 0; }',
+ \ 'table, td, th { border: 1px solid; }',
+ \ 'td { vertical-align: top; }',
+ \ 'th, td { width: '.printf("%.1f",100.0/len(a:win_list)).'%; }',
+ \ 'td div { overflow: auto; }',
+ \ s:settings.use_xhtml ? '' : '-->',
+ \ '</style>'
+ \])
+ endif "}}}
endif
-
- " Insert styles from all the generated html documents and additional styles
- " for the table-based layout of the side-by-side diff. The diff should take
- " up the full browser window (but not more), and be static in size,
- " horizontally scrollable when the lines are too long. Otherwise, the diff
- " is pretty useless for really long lines. {{{
- if s:settings.use_css
- call append(style_start,
- \ ['<style' . (s:html5 ? '' : 'type="text/css"') . '>']+
- \ style+
- \ [ s:settings.use_xhtml ? '' : '<!--',
- \ 'table { table-layout: fixed; }',
- \ 'html, body, table, tbody { width: 100%; margin: 0; padding: 0; }',
- \ 'table, td, th { border: 1px solid; }',
- \ 'td { vertical-align: top; }',
- \ 'th, td { width: '.printf("%.1f",100.0/len(a:win_list)).'%; }',
- \ 'td div { overflow: auto; }',
- \ s:settings.use_xhtml ? '' : '-->',
- \ '</style>'
- \])
- endif "}}}
endif
let &paste = s:old_paste
diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
index 265111d91..8b0da25ec 100644
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -1,4 +1,4 @@
-*builtin.txt* For Vim version 9.0. Last change: 2022 Dec 23
+*builtin.txt* For Vim version 9.0. Last change: 2023 Jan 17
VIM REFERENCE MANUAL by Bram Moolenaar
diff --git a/runtime/doc/diff.txt b/runtime/doc/diff.txt
index 2c1233bf6..40167a1b5 100644
--- a/runtime/doc/diff.txt
+++ b/runtime/doc/diff.txt
@@ -1,4 +1,4 @@
-*diff.txt* For Vim version 9.0. Last change: 2022 Dec 24
+*diff.txt* For Vim version 9.0. Last change: 2023 Jan 21
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -136,7 +136,7 @@ file for a moment and come back to the same file and be in diff mode again.
buffers.
The `:diffoff` command resets the relevant options to the values they had when
-using `:diffsplit`, `:diffpatch` , `:diffthis`. or starting Vim in diff mode.
+using `:diffsplit`, `:diffpatch`, `:diffthis`. or starting Vim in diff mode.
When using `:diffoff` twice the last saved values are restored.
Otherwise they are set to their default value:
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 5fff3e859..b133c5aa1 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt* For Vim version 9.0. Last change: 2023 Jan 03
+*eval.txt* For Vim version 9.0. Last change: 2023 Jan 12
VIM REFERENCE MANUAL by Bram Moolenaar
diff --git a/runtime/doc/fold.txt b/runtime/doc/fold.txt
index 6da244d5a..bb1dcb673 100644
--- a/runtime/doc/fold.txt
+++ b/runtime/doc/fold.txt
@@ -1,4 +1,4 @@
-*fold.txt* For Vim version 9.0. Last change: 2022 Nov 26
+*fold.txt* For Vim version 9.0. Last change: 2023 Jan 29
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -202,7 +202,7 @@ non-matching marker pairs. Example: >
/* funcB() {{{2 */
void funcB() {}
-
+< *{{{* *}}}*
A fold starts at a "{{{" marker. The following number specifies the fold
level. What happens depends on the difference between the current fold level
and the level given by the marker:
diff --git a/runtime/doc/ft_context.txt b/runtime/doc/ft_context.txt
index 9b081976e..6303357ec 100644
--- a/runtime/doc/ft_context.txt
+++ b/runtime/doc/ft_context.txt
@@ -48,7 +48,7 @@ typesetting command. That must be a function that takes a path and returns the
command as a List. For example:
>
def ConTeXtCustomCommand(path: string): list<string>
- return ['mtxrun', '--script', 'context', '--nonstopmode, path]
+ return ['mtxrun', '--script', 'context', '--nonstopmode', path]
enddef
context.ConTeXtTypeset("%", v:none, ConTeXtCustomCommand)
diff --git a/runtime/doc/ft_mp.txt b/runtime/doc/ft_mp.txt
index 0c6646f19..595bc0241 100644
--- a/runtime/doc/ft_mp.txt
+++ b/runtime/doc/ft_mp.txt
@@ -84,7 +84,7 @@ METAFONT buffers, and it is set to 0 by default in MetaPost buffers.
Define additional keywords that end indented blocks. For instance, if you
define:
>
- g:mp_end_tag = ['\<endfoo\>']
+ g:mp_close_tag = ['\<endfoo\>']
<
any line starting with `endfoo` will be de-indented compared to its previous
line.
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 0fc00b4fb..eece6008e 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt* For Vim version 9.0. Last change: 2023 Jan 02
+*options.txt* For Vim version 9.0. Last change: 2023 Feb 01
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1899,7 +1899,7 @@ A jump table for the options with a short description can be found at |Q_op|.
'allowrevins' + off no CTRL-_ command
'antialias' + off don't use antialiased fonts
- 'arabic' + off reset arabic-related options
+ 'arabic' + off reset arabic-related options
'arabicshape' + on correct character shapes
'backspace' + "" normal backspace
'backup' + off no backup file
@@ -4943,7 +4943,7 @@ A jump table for the options with a short description can be found at |Q_op|.
empty. Then set the 'term' option to have it take effect: >
set keyprotocol=
let &term = &term
-
+<
*'keywordprg'* *'kp'*
'keywordprg' 'kp' string (default "man" or "man -s", DOS: ":help",
@@ -5201,8 +5201,8 @@ A jump table for the options with a short description can be found at |Q_op|.
are left blank.
*lcs-multispace*
multispace:c...
- One or more characters to use cyclically to show for
- multiple consecutive spaces. Overrides the "space"
+ One or more characters to use cyclically to show for
+ multiple consecutive spaces. Overrides the "space"
setting, except for single spaces. When omitted, the
"space" setting is used. For example,
`:set listchars=multispace:---+` shows ten consecutive
@@ -7784,8 +7784,8 @@ A jump table for the options with a short description can be found at |Q_op|.
windows.
* - Set highlight group to User{N}, where {N} is taken from the
minwid field, e.g. %1*. Restore normal highlight with %* or %0*.
- The difference between User{N} and StatusLine will be applied
- to StatusLineNC for the statusline of non-current windows.
+ The difference between User{N} and StatusLine will be applied to
+ StatusLineNC for the statusline of non-current windows.
The number N must be between 1 and 9. See |hl-User1..9|
When displaying a flag, Vim removes the leading comma, if any, when
diff --git a/runtime/doc/quickfix.txt b/runtime/doc/quickfix.txt
index 7dc4fa303..438cc6f65 100644
--- a/runtime/doc/quickfix.txt
+++ b/runtime/doc/quickfix.txt
@@ -1,4 +1,4 @@
-*quickfix.txt* For Vim version 9.0. Last change: 2022 Sep 26
+*quickfix.txt* For Vim version 9.0. Last change: 2023 Jan 18
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -365,8 +365,6 @@ processing a quickfix or location list command, it will be aborted.
If numbers [from] and/or [to] are given, the respective
range of errors is listed. A negative number counts
from the last error backwards, -1 being the last error.
- The 'switchbuf' settings are respected when jumping
- to a buffer.
The |:filter| command can be used to display only the
quickfix entries matching a supplied pattern. The
pattern is matched against the filename, module name,
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 49cabaa0e..051c74b95 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -438,8 +438,10 @@ $quote eval.txt /*$quote*
'keymap' options.txt /*'keymap'*
'keymodel' options.txt /*'keymodel'*
'keyprotocol' options.txt /*'keyprotocol'*
+'keywordprg' options.txt /*'keywordprg'*
'km' options.txt /*'km'*
'kmp' options.txt /*'kmp'*
+'kp' options.txt /*'kp'*
'kpc' options.txt /*'kpc'*
'langmap' options.txt /*'langmap'*
'langmenu' options.txt /*'langmenu'*
@@ -4416,6 +4418,11 @@ E1351 vim9class.txt /*E1351*
E1352 vim9class.txt /*E1352*
E1353 vim9class.txt /*E1353*
E1354 vim9class.txt /*E1354*
+E1355 vim9class.txt /*E1355*
+E1356 vim9class.txt /*E1356*
+E1357 vim9class.txt /*E1357*
+E1358 vim9class.txt /*E1358*
+E1359 vim9class.txt /*E1359*
E136 starting.txt /*E136*
E137 starting.txt /*E137*
E138 starting.txt /*E138*
@@ -5633,6 +5640,7 @@ View starting.txt /*View*
Vim9 vim9.txt /*Vim9*
Vim9-abstract-class vim9class.txt /*Vim9-abstract-class*
Vim9-class vim9class.txt /*Vim9-class*
+Vim9-class-member vim9class.txt /*Vim9-class-member*
Vim9-class-overview vim9class.txt /*Vim9-class-overview*
Vim9-enum vim9class.txt /*Vim9-enum*
Vim9-script vim9.txt /*Vim9-script*
@@ -6311,7 +6319,6 @@ 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*
clear-undo undo.txt /*clear-undo*
clearmatches() builtin.txt /*clearmatches()*
client-server remote.txt /*client-server*
@@ -7558,6 +7565,7 @@ getbufinfo() builtin.txt /*getbufinfo()*
getbufline() builtin.txt /*getbufline()*
getbufoneline() builtin.txt /*getbufoneline()*
getbufvar() builtin.txt /*getbufvar()*
+getcellwidths() builtin.txt /*getcellwidths()*
getchangelist() builtin.txt /*getchangelist()*
getchar() builtin.txt /*getchar()*
getcharmod() builtin.txt /*getcharmod()*
@@ -10042,6 +10050,7 @@ t_channel-variable eval.txt /*t_channel-variable*
t_ci version4.txt /*t_ci*
t_cil version4.txt /*t_cil*
t_cl term.txt /*t_cl*
+t_class-variable eval.txt /*t_class-variable*
t_cm term.txt /*t_cm*
t_cri version4.txt /*t_cri*
t_cs term.txt /*t_cs*
@@ -10106,6 +10115,7 @@ t_ms term.txt /*t_ms*
t_nd term.txt /*t_nd*
t_none-variable eval.txt /*t_none-variable*
t_number-variable eval.txt /*t_number-variable*
+t_object-variable eval.txt /*t_object-variable*
t_op term.txt /*t_op*
t_se term.txt /*t_se*
t_sf1 version4.txt /*t_sf1*
@@ -10614,6 +10624,7 @@ v:t_TYPE eval.txt /*v:t_TYPE*
v:t_blob eval.txt /*v:t_blob*
v:t_bool eval.txt /*v:t_bool*
v:t_channel eval.txt /*v:t_channel*
+v:t_class eval.txt /*v:t_class*
v:t_dict eval.txt /*v:t_dict*
v:t_float eval.txt /*v:t_float*
v:t_func eval.txt /*v:t_func*
@@ -10621,6 +10632,7 @@ v:t_job eval.txt /*v:t_job*
v:t_list eval.txt /*v:t_list*
v:t_none eval.txt /*v:t_none*
v:t_number eval.txt /*v:t_number*
+v:t_object eval.txt /*v:t_object*
v:t_string eval.txt /*v:t_string*
v:termblinkresp eval.txt /*v:termblinkresp*
v:termrbgresp eval.txt /*v:termrbgresp*
@@ -11208,6 +11220,8 @@ zz scroll.txt /*zz*
{rhs} map.txt /*{rhs}*
{server} remote.txt /*{server}*
{subject} helphelp.txt /*{subject}*
+{{{ fold.txt /*{{{*
{} intro.txt /*{}*
} motion.txt /*}*
+}}} fold.txt /*}}}*
~ change.txt /*~*
diff --git a/runtime/doc/term.txt b/runtime/doc/term.txt
index 333688985..cb4c67683 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 09
+*term.txt* For Vim version 9.0. Last change: 2023 Jan 15
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -322,9 +322,14 @@ 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%;"
+ XM "\033[?1006;1004;1000%?%p1%{1}%=%th%el%;"
mouse enable / disable |t_XM|
+The "XM" entry includes "1006" to enable SGR style mouse reporting. This
+supports columns above 223. It also includes "1004" which enables focus
+reporting. The t_fe and t_fd entries can be left empty (they don't have
+entries in terminfo/termcap anyway).
+
*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
diff --git a/runtime/doc/testing.txt b/runtime/doc/testing.txt
index beef79d48..71e5f7ccd 100644
--- a/runtime/doc/testing.txt
+++ b/runtime/doc/testing.txt
@@ -223,12 +223,12 @@ test_ignore_error({expr}) *test_ignore_error()*
Can also be used as a |method|: >
GetErrorText()->test_ignore_error()
-
+
test_mswin_event({event}, {args}) *test_mswin_event()*
Generate a low-level MS-Windows {event} with arguments {args}
- for testing Vim functionality. It works for MS-Windows GUI
+ for testing Vim functionality. It works for MS-Windows GUI
and for the console.
-
+
{event} is a String and the supported values are:
"mouse" mouse event.
"key" keyboard event.
diff --git a/runtime/doc/textprop.txt b/runtime/doc/textprop.txt
index c6178c39c..3d0be6a1d 100644
--- a/runtime/doc/textprop.txt
+++ b/runtime/doc/textprop.txt
@@ -108,7 +108,7 @@ prop_type_list([{props}]) get list of property types
Manipulating text properties:
prop_add({lnum}, {col}, {props}) add a text property
-prop_add_list({props}, [[{lnum}, {col}, {end-lnum}, {end-col}], ...])
+prop_add_list({props}, [{item}, ...])
add a text property at multiple
positions.
prop_clear({lnum} [, {lnum-end} [, {bufnr}]])
@@ -263,12 +263,12 @@ prop_add_list({props}, [{item}, ...])
It is not possible to add a text property with a "text" field
here.
- Example:
+ Example: >
call prop_add_list(#{type: 'MyProp', id: 2},
\ [[1, 4, 1, 7],
\ [1, 15, 1, 20],
\ [2, 30, 3, 30]]
-
+<
Can also be used as a |method|: >
GetProp()->prop_add_list([[1, 1, 1, 2], [1, 4, 1, 8]])
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index be1487177..4e58fa552 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt* For Vim version 9.0. Last change: 2023 Jan 09
+*todo.txt* For Vim version 9.0. Last change: 2023 Feb 02
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -38,6 +38,13 @@ browser use: https://github.com/vim/vim/issues/1234
*known-bugs*
-------------------- Known bugs and current work -----------------------
+Errors when running tests with valgrind:
+- test_codestyle.vim: e.g.:
+ command line..script /home/mool/vim/vim90/src/testdir/runtest.vim[569]..function RunTheTest[52]..Test_test_files line 6: keycode_check.vim: space before tab: Expected 0 but got 7
+ command line..script /home/mool/vim/vim90/src/testdir/runtest.vim[569]..function RunTheTest[52]..Test_test_files line 10: setup.vim: trailing white space: Expected 0 but got 23
+- test_gui.vim:
+ Found errors in Test_gui_mouse_event():
+
Upcoming larger works:
- Make spell checking work with recent .dic/.aff files, e.g. French. #4916
Make Vim understand the format somehow? Search for "spell" below.
@@ -53,18 +60,29 @@ Upcoming larger works:
Further Vim9 improvements, possibly after launch:
-- implement :class and :interface: See |vim9-classes| #11544
- inheritance: how about super()?
- inheritance: new() method from parent used in child?
- import/export of a class
- 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 :class and :interface: See |vim9-classes
+ - Change access: public by default, private by prefixing "_".
+ Check for error: can't have same name twice (ignoring "_" prefix).
+ - Private methods?
+ either: private def Func()
+ or: def _Func()
+ Perhaps use "private" keyword instead of "_" prefix?
+ - "final" object members - can only be set in the constructor.
+ - 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.
+ - For chaining, allow using the class name as type for function return
+ value.
+ - Implement generics
+ - Add "instanceof"
+ - More efficient way for interface member index than iterating over list?
+ - a variant of type() that returns a different type for each class?
+ list<number> and list<string> should also differ.
+ - Issue #11822: any.Func() can be a dict or an object call, need to handle
+ this at runtime.
- implement :type
- implement :enum
+- class local to a function
- Use Vim9 for more runtime files.
- Inline call to map() and filter(), better type checking.
- When evaluating constants for script variables, some functions could work:
@@ -72,16 +90,19 @@ Further Vim9 improvements, possibly after launch:
- Implement as part of an expression: ++expr, --expr, expr++, expr--.
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".
+ change in terminfo for "RV" uses the wrong escape sequence 7 - 14 Jan only
Codes used for focus gained and lost (currently using use_xterm_like_mouse())
termcodes are hard-coded in set_termname(), not named.
+ Use the XF flag? enables recognizing the focus in/out events.
+ Check if t_fe is not empty.
+ Check for "1004" in t_XM. (disadvantage: only focus events when mouse is
+ used)
- t_fe enable focus-event tracking
- t_fd disable focus-event tracking
+Modifiers for various keys
+- Decode kitty key protocol Meta and use MOD_MASK_META. Document <T-k>
+- flag to indicate "xterm compatible modifiers" ?
Underline and similar:
- t_AU - Set underline color: like "AF" and "AB" entries.
- t_Ce undercurl and underline end
@@ -124,6 +145,8 @@ Probably Vim internal, not in terminfo:
- t_RK request terminal keyboard protocol state; sent after |t_TI|
Already working, not properly documented:
- t_u7 request cursor position
+Also, with Alt-b we get â, with Alt-Shift-b we should bet another character.
+That does not appear to work with Kitty. #11913
Popup windows:
- Add a function to redraw a specific popup window. Esp. to be used when
diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt
index 7a706af3c..4e0cc480c 100644
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -1,4 +1,4 @@
-*usr_41.txt* For Vim version 9.0. Last change: 2022 Dec 20
+*usr_41.txt* For Vim version 9.0. Last change: 2023 Jan 17
VIM USER MANUAL - by Bram Moolenaar
diff --git a/runtime/doc/vim9.txt b/runtime/doc/vim9.txt
index e13feee46..eb26982ca 100644
--- a/runtime/doc/vim9.txt
+++ b/runtime/doc/vim9.txt
@@ -105,7 +105,7 @@ script and `:def` functions; details are below:
`:open`
`:s` with only flags
`:t`
- `:xit`
+ `:xit`
- Some commands, especially those used for flow control, cannot be shortened.
E.g., `:throw` cannot be written as `:th`. *vim9-no-shorten*
- You cannot use curly-braces names.
@@ -265,7 +265,7 @@ Detail: this is because "Inner" will actually become a function reference to a
function with a generated name.
It is not possible to define a script-local function in a function. You can
-define a local function and assign it to a script-local funcref (it must have
+define a local function and assign it to a script-local Funcref (it must have
been declared at the script level). It is possible to define a global
function by using the "g:" prefix.
@@ -388,7 +388,6 @@ used: >
echo temp # Error!
This is especially useful in a user command: >
-
command -range Rename {
var save = @a
@a = 'some expression'
@@ -397,7 +396,6 @@ This is especially useful in a user command: >
}
And with autocommands: >
-
au BufWritePre *.go {
var save = winsaveview()
silent! exe ':%! some formatting command'
@@ -746,7 +744,7 @@ continuation is used without a backslash and a line starts with a bar: >
*E1050*
To make it possible for the operator at the start of the line to be
recognized, it is required to put a colon before a range. This example will
-add "start" and print: >
+add "start" and "print": >
var result = start
+ print
Like this: >
@@ -805,7 +803,7 @@ Notes:
echo [1, 2]
[3, 4]
- In some cases it is difficult for Vim to parse a command, especially when
- commands are used as an argument to another command, such as `windo`. In
+ commands are used as an argument to another command, such as `:windo`. In
those cases the line continuation with a backslash has to be used.
@@ -1311,7 +1309,7 @@ Closures defined in a loop will share the same context. For example: >
< *E1271*
A closure must be compiled in the context that it is defined in, so that
variables in that context can be found. This mostly happens correctly, except
-when a function is marked for debugging with `breakadd` after it was compiled.
+when a function is marked for debugging with `:breakadd` after it was compiled.
Make sure to define the breakpoint before compiling the outer function.
The "inloop" variable will exist only once, all closures put in the list refer
@@ -1353,7 +1351,7 @@ closure: >
}
endfor
-Using `echowindow` is useful in a timer, the messages go into a popup and will
+Using `:echowindow` is useful in a timer, the messages go into a popup and will
not interfere with what the user is doing when it triggers.
@@ -1594,7 +1592,7 @@ That is because the declaration looks like a list of numbers, thus is
equivalent to: >
var ll: list<number> = [1, 2, 3]
If you do want a more permissive list you need to declare the type: >
- var ll: list<any = [1, 2, 3]
+ var ll: list<any> = [1, 2, 3]
ll->extend(['x']) # OK
diff --git a/runtime/doc/vim9class.txt b/runtime/doc/vim9class.txt
index 135b3093b..250e67537 100644
--- a/runtime/doc/vim9class.txt
+++ b/runtime/doc/vim9class.txt
@@ -1,21 +1,22 @@
-*vim9class.txt* For Vim version 9.0. Last change: 2023 Jan 09
+*vim9class.txt* For Vim version 9.0. Last change: 2023 Jan 17
VIM REFERENCE MANUAL by Bram Moolenaar
-NOTE - This is under development, anything can still change! - NOTE
+NOTE - This is not finished yet, anything can still change! - NOTE
Vim9 classes, objects, interfaces, types and enums.
1. Overview |Vim9-class-overview|
2. A simple class |Vim9-simple-class|
-3. Using an abstract class |Vim9-abstract-class|
-4. Using an interface |Vim9-using-interface|
-5. More class details |Vim9-class|
-6. Type definition |Vim9-type|
-7. Enum |Vim9-enum|
+3. Class members and functions |Vim9-class-member|
+4. Using an abstract class |Vim9-abstract-class|
+5. Using an interface |Vim9-using-interface|
+6. More class details |Vim9-class|
+7. Type definition |Vim9-type|
+8. Enum |Vim9-enum|
9. Rationale
10. To be done later
@@ -25,25 +26,25 @@ Vim9 classes, objects, interfaces, types and enums.
1. Overview *Vim9-class-overview*
The fancy term is "object-oriented programming". You can find lots of study
-material about this subject. Here we document what |Vim9| script provides,
-assuming you know the basics already. Added are helpful hints about how
-to use this functionality effectively.
+material on this subject. Here we document what |Vim9| script provides,
+assuming you know the basics already. Added are helpful hints about how to
+use this functionality effectively.
The basic item is an object:
- An object stores state. It contains one or more variables that can each
have a value.
-- An object usually provides functions that manipulate its state. These
+- An object provides functions that use and manipulate its state. These
functions are invoked "on the object", which is what sets it apart from the
traditional separation of data and code that manipulates the data.
- An object has a well defined interface, with typed member variables and
member functions.
-- Objects are created by a class and all objects have the same interface.
- This never changes, it is not dynamic.
+- Objects are created from a class and all objects have the same interface.
+ This does not change at runtime, it is not dynamic.
An object can only be created by a class. A class provides:
- A new() method, the constructor, which returns an object for the class.
This method is invoked on the class name: MyClass.new().
-- State shared by all objects of the class: class variables and constants.
+- State shared by all objects of the class: class variables (class members).
- A hierarchy of classes, with super-classes and sub-classes, inheritance.
An interface is used to specify properties of an object:
@@ -62,17 +63,18 @@ teachers use real-world objects to explain class relations and you might think
your model should therefore reflect the real world. It doesn't! The model
should match your purpose.
-You will soon find that composition is often better than inheritance. Don't
-waste time trying to find the optimal class model. Or waste time discussing
-whether a square is a rectangle or that a rectangle is a square. It doesn't
-matter.
+Keep in mind that composition (an object contains other objects) is often
+better than inheritance (an object extends another object). Don't waste time
+trying to find the optimal class model. Or waste time discussing whether a
+square is a rectangle or that a rectangle is a square. It doesn't matter.
==============================================================================
2. A simple class *Vim9-simple-class*
-Let's start with a simple example: a class that stores a text position: >
+Let's start with a simple example: a class that stores a text position (see
+below for how to do this more efficiently): >
class TextPosition
this.lnum: number
@@ -107,7 +109,7 @@ The object members "lnum" and "col" can be accessed directly: >
< *E1317* *E1327*
If you have been using other object-oriented languages you will notice that
in Vim the object members are consistently referred to with the "this."
-prefix. This is different from languages like Java and TypeScript. This
+prefix. This is different from languages like Java and TypeScript. The
naming convention makes the object members easy to spot. Also, when a
variable does not have the "this." prefix you know it is not an object member.
@@ -117,9 +119,9 @@ Member write access ~
Now try to change an object member directly: >
pos.lnum = 9
-< *E1335*
+< *E1335*
This will give you an error! That is because by default object members can be
-read but not set. That's why the class provides a method for it: >
+read but not set. That's why the TextPosition class provides a method for it: >
pos.SetLnum(9)
@@ -128,12 +130,12 @@ way. Most often there is no problem using a value, while setting a value may
have side effects that need to be taken care of. In this case, the SetLnum()
method could check if the line number is valid and either give an error or use
the closest valid value.
- *:public* *E1331*
+ *:public* *E1331*
If you don't care about side effects and want to allow the object member to be
changed at any time, you can make it public: >
public this.lnum: number
- public this.col number
+ public this.col: number
Now you don't need the SetLnum(), SetCol() and SetPosition() methods, setting
"pos.lnum" directly above will no longer give an error.
@@ -153,7 +155,7 @@ name: >
this._col number
Now you need to provide methods to get the value of the private members.
-These are commonly call getters. We recommend using a name that starts with
+These are commonly called getters. We recommend using a name that starts with
"Get": >
def GetLnum(): number
@@ -181,6 +183,7 @@ Simplifying the new() method ~
Many constructors take values for the object members. Thus you very often see
this pattern: >
+ class SomeClass
this.lnum: number
this.col: number
@@ -188,6 +191,7 @@ this pattern: >
this.lnum = lnum
this.col = col
enddef
+ endclass
Not only is this text you need to write, it also has the type of each member
twice. Since this is so common a shorter way to write new() is provided: >
@@ -197,8 +201,24 @@ twice. Since this is so common a shorter way to write new() is provided: >
The semantics are easy to understand: Providing the object member name,
including "this.", as the argument to new() means the value provided in the
-new() call is assigned to that object member. This mechanism is coming from
-the Dart language.
+new() call is assigned to that object member. This mechanism comes from the
+Dart language.
+
+Putting together this way of using new() and making the members public results
+in a much shorter class definition as what we started with: >
+
+ class TextPosition
+ public this.lnum: number
+ public this.col: number
+
+ def new(this.lnum, this.col)
+ enddef
+
+ def SetPosition(lnum: number, col: number)
+ this.lnum = lnum
+ this.col = col
+ enddef
+ endclass
The sequence of constructing a new object is:
1. Memory is allocated and cleared. All values are zero/false/empty.
@@ -208,48 +228,15 @@ The sequence of constructing a new object is:
3. Arguments in the new() method in the "this.name" form are assigned.
4. The body of the new() method is executed.
-TODO: for a sub-class the constructor of the parent class will be invoked
-somewhere.
-
+If the class extends a parent class, the same thing happens. In the second
+step the members of the parent class are done first. There is no need to call
+"super()" or "new()" on the parent.
==============================================================================
-3. Using an abstract class *Vim9-abstract-class*
-
-An abstract class forms the base for at least one sub-class. In the class
-model one often finds that a few classes have the same properties that can be
-shared, but a class with those properties does not have enough state to create
-an object from. A sub-class must extend the abstract class and add the
-missing state and/or methods before it can be used to create objects for.
-
-An abstract class does not have a new() method.
-
-For example, a Shape class could store a color and thickness. You cannot
-create a Shape object, it is missing the information about what kind of shape
-it is. The Shape class functions as the base for a Square and a Triangle
-class, for which objects can be created. Example: >
-
- abstract class Shape
- this.color = Color.Black
- this.thickness = 10
- endclass
-
- class Square extends Shape
- this.size: number
-
- def new(this.size)
- enddef
- endclass
-
- class Triangle extends Shape
- this.base: number
- this.height: number
+3. class members and functions *Vim9-class-member*
- def new(this.base, this.height)
- enddef
- endclass
-<
- *class-member* *:static* *E1337* *E1338*
+ *:static* *E1337* *E1338*
Class members are declared with "static". They are used by the name without a
prefix: >
@@ -263,18 +250,19 @@ prefix: >
endclass
< *E1340* *E1341*
Since the name is used as-is, shadowing the name by a function argument name
-or variable name is not allowed.
+or local 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 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-function*
+ *class-function*
Class functions are also declared with "static". They have no access to
object members, they cannot use the "this" keyword. >
@@ -282,7 +270,7 @@ object members, they cannot use the "this" keyword. >
this.size: number
static totalSize: number
- " Clear the total size and return the value it had before.
+ # Clear the total size and return the value it had before.
static def ClearTotalSize(): number
var prev = totalSize
totalSize = 0
@@ -290,10 +278,51 @@ object members, they cannot use the "this" keyword. >
enddef
endclass
+Inside the class the function can be called by name directly, outside the
+class the class name must be prefixed: `OtherThing.ClearTotalSize()`.
==============================================================================
-4. Using an interface *Vim9-using-interface*
+4. Using an abstract class *Vim9-abstract-class*
+
+An abstract class forms the base for at least one sub-class. In the class
+model one often finds that a few classes have the same properties that can be
+shared, but a class with these properties does not have enough state to create
+an object from. A sub-class must extend the abstract class and add the
+missing state and/or methods before it can be used to create objects for.
+
+For example, a Shape class could store a color and thickness. You cannot
+create a Shape object, it is missing the information about what kind of shape
+it is. The Shape class functions as the base for a Square and a Triangle
+class, for which objects can be created. Example: >
+
+ abstract class Shape
+ this.color = Color.Black
+ this.thickness = 10
+ endclass
+
+ class Square extends Shape
+ this.size: number
+
+ def new(this.size)
+ enddef
+ endclass
+
+ class Triangle extends Shape
+ this.base: number
+ this.height: number
+
+ def new(this.base, this.height)
+ enddef
+ endclass
+<
+An abstract class is defined the same way as a normal class, except that it
+does not have any new() method. *E1359*
+
+
+==============================================================================
+
+5. Using an interface *Vim9-using-interface*
The example above with Shape, Square and Triangle can be made more useful if
we add a method to compute the surface of the object. For that we create the
@@ -348,7 +377,7 @@ The interface name can be used as a type: >
==============================================================================
-5. More class details *Vim9-class* *Class* *class*
+6. More class details *Vim9-class* *Class* *class*
Defining a class ~
*:class* *:endclass* *:abstract*
@@ -386,12 +415,52 @@ once. They can appear in any order, although this order is recommended: >
extends ClassName
implements InterfaceName, OtherInterface
specifies SomeInterface
-< *extends*
+< *E1355*
+Each member and function name can be used only once. It is not possible to
+define a function with the same name and different type of arguments.
+
+
+Extending a class ~
+ *extends*
A class can extend one other class. *E1352* *E1353* *E1354*
+The basic idea is to build on top of an existing class, add properties to it.
+
+The extended class is called the "base class" or "super class". The new class
+is called the "child class".
+
+Object members from the base class are all taken over by the child class. It
+is not possible to override them (unlike some other languages).
+
+ *E1356* *E1357* *E1358*
+Object methods of the base class can be overruled. The signature (arguments,
+argument types and return type) must be exactly the same. The method of the
+base class can be called by prefixing "super.".
+
+Other object methods of the base class are taken over by the child class.
+
+Class functions, including functions starting with "new", can be overruled,
+like with object methods. The function on the base class can be called by
+prefixing the name of the class (for class functions) or "super.".
+
+Unlike other languages, the constructor of the base class does not need to be
+invoked. In fact, it cannot be invoked. If some initialization from the base
+class also needs to be done in a child class, put it in an object method and
+call that method from every constructor().
+
+If the base class did not specify a new() function then one was automatically
+created. This function will not be taken over by the child class. The child
+class can define its own new() function, or, if there isn't one, a new()
+function will be added automatically.
+
+
+A class implementing an interface ~
*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*
+
+
+A class defining an interface ~
*specifies*
A class can declare its interface, the object members and methods, with a
named interface. This avoids the need for separately specifying the
@@ -528,7 +597,7 @@ constructor methods.
==============================================================================
-6. Type definition *Vim9-type* *:type*
+7. Type definition *Vim9-type* *:type*
A type definition is giving a name to a type specification. For Example: >
@@ -539,7 +608,7 @@ TODO: more explanation
==============================================================================
-7. Enum *Vim9-enum* *:enum* *:endenum*
+8. Enum *Vim9-enum* *:enum* *:endenum*
An enum is a type that can have one of a list of values. Example: >
@@ -639,7 +708,7 @@ 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.
+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
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index 6fa16a7e0..c67ce95ca 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2022 Dec 19
+" Last Change: 2023 Feb 02
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
diff --git a/runtime/ftplugin/debchangelog.vim b/runtime/ftplugin/debchangelog.vim
index cf8dd17c4..062fc054c 100644
--- a/runtime/ftplugin/debchangelog.vim
+++ b/runtime/ftplugin/debchangelog.vim
@@ -3,9 +3,9 @@
" Maintainer: Debian Vim Maintainers <team+vim@tracker.debian.org>
" Former Maintainers: Michael Piefel <piefel@informatik.hu-berlin.de>
" Stefano Zacchiroli <zack@debian.org>
-" Last Change: 2022 Jul 25
+" Last Change: 2023 Jan 16
" License: Vim License
-" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/ftplugin/debchangelog.vim
+" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/ftplugin/debchangelog.vim
" Bug completion requires apt-listbugs installed for Debian packages or
" python-launchpadlib installed for Ubuntu packages
@@ -35,14 +35,14 @@ if exists('g:did_changelog_ftplugin')
finish
endif
+" Don't load another plugin (this is global)
+let g:did_changelog_ftplugin = 1
+
" Make sure the '<' and 'C' flags are not included in 'cpoptions', otherwise
" <CR> would not be recognized. See ":help 'cpoptions'".
let s:cpo_save = &cpo
set cpo&vim
-" Don't load another plugin (this is global)
-let g:did_changelog_ftplugin = 1
-
" {{{1 GUI menu
" Helper functions returning various data.
diff --git a/runtime/ftplugin/debcontrol.vim b/runtime/ftplugin/debcontrol.vim
index 3a6e39a68..bb710e597 100644
--- a/runtime/ftplugin/debcontrol.vim
+++ b/runtime/ftplugin/debcontrol.vim
@@ -2,8 +2,8 @@
" Language: Debian control files
" Maintainer: Debian Vim Maintainers
" Former Maintainer: Pierre Habouzit <madcoder@debian.org>
-" Last Change: 2018-01-28
-" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/ftplugin/debcontrol.vim
+" Last Change: 2023 Jan 16
+" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/ftplugin/debcontrol.vim
" Do these settings once per buffer
if exists('b:did_ftplugin')
diff --git a/runtime/ftplugin/logcheck.vim b/runtime/ftplugin/logcheck.vim
index 9d664b2d0..9c1be1108 100644
--- a/runtime/ftplugin/logcheck.vim
+++ b/runtime/ftplugin/logcheck.vim
@@ -1,9 +1,9 @@
" Vim filetype plugin file
" Language: Logcheck
" Maintainer: Debian Vim Maintainers
-" Last Change: 2018 Dec 27
+" Last Change: 2023 Jan 16
" License: Vim License
-" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/ftplugin/logcheck.vim
+" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/ftplugin/logcheck.vim
if exists('b:did_ftplugin')
finish
diff --git a/runtime/indent/testdir/vim.in b/runtime/indent/testdir/vim.in
index 55acf6fde..c60d2d116 100644
--- a/runtime/indent/testdir/vim.in
+++ b/runtime/indent/testdir/vim.in
@@ -887,3 +887,55 @@ if true
elseif
endif
" END_INDENT
+
+" START_INDENT
+if (
+true)
+&& true
+echo
+endif
+" END_INDENT
+
+" START_INDENT
+abstract class Shape
+this.color = Color.Black
+this.thickness = 10
+endclass
+" END_INDENT
+
+" START_INDENT
+class OtherThing
+this.size: number
+static totalSize: number
+
+static def ClearTotalSize(): number
+var prev = totalSize
+totalSize = 0
+return prev
+enddef
+endclass
+" END_INDENT
+
+" START_INDENT
+interface HasSurface
+this.size: number
+def Surface(): number
+endinterface
+" END_INDENT
+
+" START_INDENT
+interface EnterExit
+def Enter(): void
+def Exit(): void
+endinterface
+" END_INDENT
+
+" START_INDENT
+enum Color
+White
+Red
+Green
+Blue
+Black
+endenum
+" END_INDENT
diff --git a/runtime/indent/testdir/vim.ok b/runtime/indent/testdir/vim.ok
index c6ba08430..57f0dbf34 100644
--- a/runtime/indent/testdir/vim.ok
+++ b/runtime/indent/testdir/vim.ok
@@ -887,3 +887,55 @@ if true
elseif
endif
" END_INDENT
+
+" START_INDENT
+if (
+ true)
+ && true
+ echo
+endif
+" END_INDENT
+
+" START_INDENT
+abstract class Shape
+ this.color = Color.Black
+ this.thickness = 10
+endclass
+" END_INDENT
+
+" START_INDENT
+class OtherThing
+ this.size: number
+ static totalSize: number
+
+ static def ClearTotalSize(): number
+ var prev = totalSize
+ totalSize = 0
+ return prev
+ enddef
+endclass
+" END_INDENT
+
+" START_INDENT
+interface HasSurface
+ this.size: number
+ def Surface(): number
+endinterface
+" END_INDENT
+
+" START_INDENT
+interface EnterExit
+ def Enter(): void
+ def Exit(): void
+endinterface
+" END_INDENT
+
+" START_INDENT
+enum Color
+ White
+ Red
+ Green
+ Blue
+ Black
+endenum
+" END_INDENT
diff --git a/runtime/plugin/tohtml.vim b/runtime/plugin/tohtml.vim
index 08df19b4f..0369313f0 100644
--- a/runtime/plugin/tohtml.vim
+++ b/runtime/plugin/tohtml.vim
@@ -1,6 +1,6 @@
" Vim plugin for converting a syntax highlighted file to HTML.
" Maintainer: Ben Fritz <fritzophrenic@gmail.com>
-" Last Change: 2019 Nov 13
+" Last Change: 2023 Jan 01
"
" The core of the code is in $VIMRUNTIME/autoload/tohtml.vim and
" $VIMRUNTIME/syntax/2html.vim
@@ -8,11 +8,23 @@
if exists('g:loaded_2html_plugin')
finish
endif
-let g:loaded_2html_plugin = 'vim8.1_v2'
+let g:loaded_2html_plugin = 'vim9.0_v1'
"
" Changelog: {{{
-" 8.1_v2 (this version): - Fix Bitbucket issue #19: fix calculation of tab
+" 9.0_v1 (this version): - Implement g:html_no_doc and g:html_no_modeline
+" for diff mode. Add tests.
+" (Vim 9.0.1122): NOTE: no version string update for this version!
+" - Bugfix for variable name in g:html_no_doc
+" (Vim 9.0.0819): NOTE: no version string update for this version!
+" - Add options g:html_no_doc, g:html_no_lines,
+" and g:html_no_modeline (partially included in Vim
+" runtime prior to version string update).
+" - Updates for new Vim9 string append style (i.e. use
+" ".." instead of ".")
+"
+" 8.1 updates: {{{
+" 8.1_v2 (Vim 8.1.2312): - Fix SourceForge issue #19: fix calculation of tab
" stop position to use in expanding a tab, when that
" tab occurs after a syntax match which in turn
" comes after previously expanded tabs.
@@ -20,17 +32,17 @@ let g:loaded_2html_plugin = 'vim8.1_v2'
" destination file to ignore FileType events;
" speeds up processing when the destination file
" already exists and HTML highlight takes too long.
-" - Fix Bitbucket issue #20: progress bar could not be
+" - Fix SourceForge issue #20: progress bar could not be
" seen when DiffDelete background color matched
" StatusLine background color. Added TOhtmlProgress
" highlight group for manual user override, but
" calculate it to be visible compared to StatusLine
" by default.
-" - Fix Bitbucket issue #1: Remove workaround for old
+" - Fix SourceForge issue #1: Remove workaround for old
" browsers which don't support 'ch' CSS unit, since
" all modern browsers, including IE>=9, support it.
-" - Fix Bitbucket issue #10: support termguicolors
-" - Fix Bitbucket issue #21: default to using
+" - Fix SourceForge issue #10: support termguicolors
+" - Fix SourceForge issue #21: default to using
" generated content instead of <input> tags for
" uncopyable text, so that text is correctly
" prevented from being copied in chrome. Use
@@ -41,13 +53,14 @@ let g:loaded_2html_plugin = 'vim8.1_v2'
" - Fix fallback sizing of <input> tags for browsers
" without "ch" support.
" - Fix cursor on unselectable diff filler text.
-" 8.1_v1 (Vim 8.1.0528): - Fix Bitbucket issue #6: Don't generate empty
+" 8.1_v1 (Vim 8.1.0528): - Fix SourceForge issue #6: Don't generate empty
" script tag.
-" - Fix Bitbucket issue #5: javascript should
+" - Fix SourceForge issue #5: javascript should
" declare variables with "var".
-" - Fix Bitbucket issue #13: errors thrown sourcing
+" - Fix SourceForge issue #13: errors thrown sourcing
" 2html.vim directly when plugins not loaded.
-" - Fix Bitbucket issue #16: support 'vartabstop'.
+" - Fix SourceForge issue #16: support 'vartabstop'.
+"}}}
"
" 7.4 updates: {{{
" 7.4_v2 (Vim 7.4.0899): Fix error raised when converting a diff containing
@@ -152,7 +165,7 @@ let g:loaded_2html_plugin = 'vim8.1_v2'
" TODO: {{{
" * Check the issue tracker:
-" https://bitbucket.org/fritzophrenic/vim-tohtml/issues?status=new&status=open
+" https://sourceforge.net/p/vim-tohtml/issues/search/?q=%21status%3Aclosed
" * Options for generating the CSS in external style sheets. New :TOcss
" command to convert the current color scheme into a (mostly) generic CSS
" stylesheet which can be re-used. Alternate stylesheet support? Good start
diff --git a/runtime/syntax/2html.vim b/runtime/syntax/2html.vim
index b5ebfbd96..69780cffe 100644
--- a/runtime/syntax/2html.vim
+++ b/runtime/syntax/2html.vim
@@ -1,6 +1,6 @@
" Vim syntax support file
" Maintainer: Ben Fritz <fritzophrenic@gmail.com>
-" Last Change: 2022 Dec 26
+" Last Change: 2023 Jan 01
"
" Additional contributors:
"
diff --git a/runtime/syntax/automake.vim b/runtime/syntax/automake.vim
index 8a7db7c27..2f1ad982c 100644
--- a/runtime/syntax/automake.vim
+++ b/runtime/syntax/automake.vim
@@ -2,8 +2,8 @@
" Language: automake Makefile.am
" Maintainer: Debian Vim Maintainers
" Former Maintainer: John Williams <jrw@pobox.com>
-" Last Change: 2018 Dec 27
-" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/automake.vim
+" Last Change: 2023 Jan 16
+" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/automake.vim
"
" XXX This file is in need of a new maintainer, Debian VIM Maintainers maintain
" it only because patches have been submitted for it by Debian users and the
diff --git a/runtime/syntax/debchangelog.vim b/runtime/syntax/debchangelog.vim
index 691c3778c..d3c3d3930 100644
--- a/runtime/syntax/debchangelog.vim
+++ b/runtime/syntax/debchangelog.vim
@@ -3,8 +3,8 @@
" Maintainer: Debian Vim Maintainers
" Former Maintainers: Gerfried Fuchs <alfie@ist.org>
" Wichert Akkerman <wakkerma@debian.org>
-" Last Change: 2022 Oct 29
-" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debchangelog.vim
+" Last Change: 2023 Jan 16
+" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debchangelog.vim
" Standard syntax initialization
if exists('b:current_syntax')
diff --git a/runtime/syntax/debcontrol.vim b/runtime/syntax/debcontrol.vim
index 4c7fb5dd6..c79b702f9 100644
--- a/runtime/syntax/debcontrol.vim
+++ b/runtime/syntax/debcontrol.vim
@@ -3,8 +3,8 @@
" Maintainer: Debian Vim Maintainers
" Former Maintainers: Gerfried Fuchs <alfie@ist.org>
" Wichert Akkerman <wakkerma@debian.org>
-" Last Change: 2022 May 11
-" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debcontrol.vim
+" Last Change: 2023 Jan 16
+" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debcontrol.vim
" Standard syntax initialization
if exists('b:current_syntax')
diff --git a/runtime/syntax/debcopyright.vim b/runtime/syntax/debcopyright.vim
index c87b876ee..6f76b5c86 100644
--- a/runtime/syntax/debcopyright.vim
+++ b/runtime/syntax/debcopyright.vim
@@ -1,8 +1,8 @@
" Vim syntax file
" Language: Debian copyright file
" Maintainer: Debian Vim Maintainers
-" Last Change: 2019 Sep 07
-" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debcopyright.vim
+" Last Change: 2023 Jan 16
+" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debcopyright.vim
" Standard syntax initialization
if exists('b:current_syntax')
diff --git a/runtime/syntax/debsources.vim b/runtime/syntax/debsources.vim
index 9b75797b5..69900c7a5 100644
--- a/runtime/syntax/debsources.vim
+++ b/runtime/syntax/debsources.vim
@@ -2,8 +2,8 @@
" Language: Debian sources.list
" Maintainer: Debian Vim Maintainers
" Former Maintainer: Matthijs Mohlmann <matthijs@cacholong.nl>
-" Last Change: 2022 Oct 29
-" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debsources.vim
+" Last Change: 2023 Jan 16
+" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/debsources.vim
" Standard syntax initialization
if exists('b:current_syntax')
@@ -14,7 +14,7 @@ endif
syn case match
" A bunch of useful keywords
-syn match debsourcesKeyword /\(deb-src\|deb\|main\|contrib\|non-free\|restricted\|universe\|multiverse\)/
+syn match debsourcesKeyword /\(deb-src\|deb\|main\|contrib\|non-free\|non-free-firmware\|restricted\|universe\|multiverse\)/
" Match comments
syn match debsourcesComment /#.*/ contains=@Spell
diff --git a/runtime/syntax/dep3patch.vim b/runtime/syntax/dep3patch.vim
index cb0eda893..c00bddfde 100644
--- a/runtime/syntax/dep3patch.vim
+++ b/runtime/syntax/dep3patch.vim
@@ -1,8 +1,8 @@
" Vim syntax file
" Language: Debian DEP3 Patch headers
" Maintainer: Gabriel Filion <gabster@lelutin.ca>
-" Last Change: 2022 Apr 06
-" URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/dep3patch.vim
+" Last Change: 2023 Jan 16
+" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/dep3patch.vim
"
" Specification of the DEP3 patch header format is available at:
" https://dep-team.pages.debian.net/deps/dep3/
diff --git a/runtime/syntax/forth.vim b/runtime/syntax/forth.vim
index 721bceb36..fe9863407 100644
--- a/runtime/syntax/forth.vim
+++ b/runtime/syntax/forth.vim
@@ -1,8 +1,8 @@
" Vim syntax file
" Language: FORTH
" Current Maintainer: Johan Kotlinski <kotlinski@gmail.com>
-" Previous Maintainer: Christian V. J. Brüssow <cvjb@cvjb.de>
-" Last Change: 2018-03-29
+" Previous Maintainer: Christian V. J. Br�ssow <cvjb@cvjb.de>
+" Last Change: 2023-01-12
" Filenames: *.fs,*.ft
" URL: https://github.com/jkotlinski/forth.vim
@@ -23,7 +23,6 @@ syn case ignore
" Some special, non-FORTH keywords
syn keyword forthTodo contained TODO FIXME XXX
-syn match forthTodo contained 'Copyright\(\s([Cc])\)\=\(\s[0-9]\{2,4}\)\='
" Characters allowed in keywords
" I don't know if 128-255 are allowed in ANS-FORTH
@@ -98,13 +97,16 @@ syn keyword forthEndOfColonDef ; ;M ;m
syn keyword forthEndOfClassDef ;class
syn keyword forthEndOfObjectDef ;object
syn keyword forthDefine CONSTANT 2CONSTANT FCONSTANT VARIABLE 2VARIABLE
-syn keyword forthDefine FVARIABLE CREATE USER VALUE TO DEFER IS DOES> IMMEDIATE
+syn keyword forthDefine FVARIABLE CREATE USER VALUE TO DEFER IS <BUILDS DOES> IMMEDIATE
syn keyword forthDefine COMPILE-ONLY COMPILE RESTRICT INTERPRET POSTPONE EXECUTE
syn keyword forthDefine LITERAL CREATE-INTERPRET/COMPILE INTERPRETATION>
syn keyword forthDefine <INTERPRETATION COMPILATION> <COMPILATION ] LASTXT
syn keyword forthDefine COMP' POSTPONE, FIND-NAME NAME>INT NAME?INT NAME>COMP
syn keyword forthDefine NAME>STRING STATE C; CVARIABLE BUFFER: MARKER
syn keyword forthDefine , 2, F, C, COMPILE,
+syn match forthDefine "\[DEFINED]"
+syn match forthDefine "\[UNDEFINED]"
+syn match forthDefine "\[IF]"
syn match forthDefine "\[IFDEF]"
syn match forthDefine "\[IFUNDEF]"
syn match forthDefine "\[THEN]"
@@ -180,6 +182,7 @@ syn keyword forthBlocks BLOCK-INCLUDED BLK
syn keyword forthMath DECIMAL HEX BASE
syn match forthInteger '\<-\=[0-9]\+.\=\>'
syn match forthInteger '\<&-\=[0-9]\+.\=\>'
+syn match forthInteger '\<#-\=[0-9]\+.\=\>'
" recognize hex and binary numbers, the '$' and '%' notation is for gforth
syn match forthInteger '\<\$\x*\x\+\>' " *1* --- don't mess
syn match forthInteger '\<\x*\d\x*\>' " *2* --- this order!
@@ -192,18 +195,18 @@ syn match forthFloat '\<-\=\d*[.]\=\d\+[DdEe][-+]\d\+\>'
syn region forthComment start='0 \[if\]' end='\[endif\]' end='\[then\]' contains=forthTodo
" Strings
-syn region forthString start=+\.*\"+ end=+"+ end=+$+
+syn region forthString start=+\.*\"+ end=+"+ end=+$+ contains=@Spell
" XXX
-syn region forthString start=+s\"+ end=+"+ end=+$+
-syn region forthString start=+s\\\"+ end=+"+ end=+$+
-syn region forthString start=+c\"+ end=+"+ end=+$+
+syn region forthString start=+s\"+ end=+"+ end=+$+ contains=@Spell
+syn region forthString start=+s\\\"+ end=+"+ end=+$+ contains=@Spell
+syn region forthString start=+c\"+ end=+"+ end=+$+ contains=@Spell
" Comments
-syn match forthComment '\\\s.*$' contains=forthTodo,forthSpaceError
-syn region forthComment start='\\S\s' end='.*' contains=forthTodo,forthSpaceError
-syn match forthComment '\.(\s[^)]*)' contains=forthTodo,forthSpaceError
-syn region forthComment start='\(^\|\s\)\zs(\s' skip='\\)' end=')' contains=forthTodo,forthSpaceError
-syn region forthComment start='/\*' end='\*/' contains=forthTodo,forthSpaceError
+syn match forthComment '\\\%(\s.*\)\=$' contains=@Spell,forthTodo,forthSpaceError
+syn region forthComment start='\\S\s' end='.*' contains=@Spell,forthTodo,forthSpaceError
+syn match forthComment '\.(\s[^)]*)' contains=@Spell,forthTodo,forthSpaceError
+syn region forthComment start='\(^\|\s\)\zs(\s' skip='\\)' end=')' contains=@Spell,forthTodo,forthSpaceError
+syn region forthComment start='/\*' end='\*/' contains=@Spell,forthTodo,forthSpaceError
" Include files
syn match forthInclude '^INCLUDE\s\+\k\+'
@@ -260,3 +263,4 @@ let b:current_syntax = "forth"
let &cpo = s:cpo_save
unlet s:cpo_save
" vim:ts=8:sw=4:nocindent:smartindent:
+
diff --git a/runtime/syntax/gpg.vim b/runtime/syntax/gpg.vim
index 46e209999..57f712b6a 100644
--- a/runtime/syntax/gpg.vim
+++ b/runtime/syntax/gpg.vim
@@ -1,7 +1,8 @@
" Vim syntax file
-" Language: gpg(1) configuration file
-" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
-" Latest Revision: 2010-10-14
+" Language: gpg(1) configuration file
+" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2010-10-14
+" Updated: 2023-01-23 @ObserverOfTime: added a couple of keywords
if exists("b:current_syntax")
finish
@@ -12,91 +13,92 @@ set cpo&vim
setlocal iskeyword+=-
-syn keyword gpgTodo contained FIXME TODO XXX NOTE
+syn keyword gpgTodo contained FIXME TODO XXX NOTE
-syn region gpgComment contained display oneline start='#' end='$'
- \ contains=gpgTodo,gpgID,@Spell
+syn region gpgComment contained display oneline start='#' end='$'
+ \ contains=gpgTodo,gpgID,@Spell
-syn match gpgID contained display '\<\(0x\)\=\x\{8,}\>'
+syn match gpgID contained display '\<\(0x\)\=\x\{8,}\>'
-syn match gpgBegin display '^' skipwhite nextgroup=gpgComment,gpgOption,gpgCommand
+syn match gpgBegin display '^' skipwhite nextgroup=gpgComment,gpgOption,gpgCommand
-syn keyword gpgCommand contained skipwhite nextgroup=gpgArg
- \ check-sigs decrypt decrypt-files delete-key
- \ delete-secret-and-public-key delete-secret-key
- \ edit-key encrypt-files export export-all
- \ export-ownertrust export-secret-keys
- \ export-secret-subkeys fast-import fingerprint
- \ gen-prime gen-random import import-ownertrust
- \ list-keys list-public-keys list-secret-keys
- \ list-sigs lsign-key nrsign-key print-md print-mds
- \ recv-keys search-keys send-keys sign-key verify
- \ verify-files
-syn keyword gpgCommand contained skipwhite nextgroup=gpgArgError
- \ check-trustdb clearsign desig-revoke detach-sign
- \ encrypt gen-key gen-revoke help list-packets
- \ rebuild-keydb-caches sign store symmetric
- \ update-trustdb version warranty
+syn keyword gpgCommand contained skipwhite nextgroup=gpgArg
+ \ check-sigs decrypt decrypt-files delete-key
+ \ delete-secret-and-public-key delete-secret-key
+ \ edit-key encrypt-files export export-all
+ \ export-ownertrust export-secret-keys
+ \ export-secret-subkeys fast-import fingerprint
+ \ gen-prime gen-random import import-ownertrust
+ \ list-keys list-public-keys list-secret-keys
+ \ list-sigs lsign-key nrsign-key print-md print-mds
+ \ recv-keys search-keys send-keys sign-key verify
+ \ verify-files
+syn keyword gpgCommand contained skipwhite nextgroup=gpgArgError
+ \ check-trustdb clearsign desig-revoke detach-sign
+ \ encrypt gen-key gen-revoke help list-packets
+ \ rebuild-keydb-caches sign store symmetric
+ \ update-trustdb version warranty
-syn keyword gpgOption contained skipwhite nextgroup=gpgArg
- \ attribute-fd cert-digest-algo charset cipher-algo
- \ command-fd comment completes-needed compress
- \ compress-algo debug default-cert-check-level
- \ default-key default-preference-list
- \ default-recipient digest-algo disable-cipher-algo
- \ disable-pubkey-algo encrypt-to exec-path
- \ export-options group homedir import-options
- \ keyring keyserver keyserver-options load-extension
- \ local-user logger-fd marginals-needed max-cert-depth
- \ notation-data options output override-session-key
- \ passphrase-fd personal-cipher-preferences
- \ personal-compress-preferences
- \ personal-digest-preferences photo-viewer
- \ recipient s2k-cipher-algo s2k-digest-algo s2k-mode
- \ secret-keyring set-filename set-policy-url status-fd
- \ trusted-key verify-options keyid-format list-options
-syn keyword gpgOption contained skipwhite nextgroup=gpgArgError
- \ allow-freeform-uid allow-non-selfsigned-uid
- \ allow-secret-key-import always-trust
- \ armor ask-cert-expire ask-sig-expire
- \ auto-check-trustdb batch debug-all default-comment
- \ default-recipient-self dry-run emit-version
- \ emulate-md-encode-bug enable-special-filenames
- \ escape-from-lines expert fast-list-mode
- \ fixed-list-mode for-your-eyes-only
- \ force-mdc force-v3-sigs force-v4-certs
- \ gpg-agent-info ignore-crc-error ignore-mdc-error
- \ ignore-time-conflict ignore-valid-from interactive
- \ list-only lock-multiple lock-never lock-once
- \ merge-only no no-allow-non-selfsigned-uid
- \ no-armor no-ask-cert-expire no-ask-sig-expire
- \ no-auto-check-trustdb no-batch no-comment
- \ no-default-keyring no-default-recipient
- \ no-encrypt-to no-expensive-trust-checks
- \ no-expert no-for-your-eyes-only no-force-v3-sigs
- \ no-force-v4-certs no-greeting no-literal
- \ no-mdc-warning no-options no-permission-warning
- \ no-pgp2 no-pgp6 no-pgp7 no-random-seed-file
- \ no-secmem-warning no-show-notation no-show-photos
- \ no-show-policy-url no-sig-cache no-sig-create-check
- \ no-sk-comments no-tty no-utf8-strings no-verbose
- \ no-version not-dash-escaped openpgp pgp2
- \ pgp6 pgp7 preserve-permissions quiet rfc1991
- \ set-filesize show-keyring show-notation show-photos
- \ show-policy-url show-session-key simple-sk-checksum
- \ sk-comments skip-verify textmode throw-keyid
- \ try-all-secrets use-agent use-embedded-filename
- \ utf8-strings verbose with-colons with-fingerprint
- \ with-key-data yes
+syn keyword gpgOption contained skipwhite nextgroup=gpgArg
+ \ attribute-fd cert-digest-algo charset cipher-algo
+ \ command-fd comment completes-needed compress
+ \ compress-algo debug default-cert-check-level
+ \ default-key default-preference-list
+ \ default-recipient digest-algo disable-cipher-algo
+ \ disable-pubkey-algo encrypt-to exec-path
+ \ export-options group homedir import-options
+ \ keyring keyserver keyserver-options load-extension
+ \ local-user logger-fd marginals-needed max-cert-depth
+ \ notation-data options output override-session-key
+ \ passphrase-fd personal-cipher-preferences
+ \ personal-compress-preferences
+ \ personal-digest-preferences photo-viewer
+ \ recipient s2k-cipher-algo s2k-digest-algo s2k-mode
+ \ secret-keyring set-filename set-policy-url status-fd
+ \ trusted-key verify-options keyid-format list-options
+ \ default-new-key-algo weak-digest
+syn keyword gpgOption contained skipwhite nextgroup=gpgArgError
+ \ allow-freeform-uid allow-non-selfsigned-uid
+ \ allow-secret-key-import always-trust
+ \ armor ask-cert-expire ask-sig-expire
+ \ auto-check-trustdb batch debug-all default-comment
+ \ default-recipient-self dry-run emit-version
+ \ emulate-md-encode-bug enable-special-filenames
+ \ escape-from-lines expert fast-list-mode
+ \ fixed-list-mode for-your-eyes-only
+ \ force-mdc force-v3-sigs force-v4-certs
+ \ gpg-agent-info ignore-crc-error ignore-mdc-error
+ \ ignore-time-conflict ignore-valid-from interactive
+ \ list-only lock-multiple lock-never lock-once
+ \ merge-only no no-allow-non-selfsigned-uid
+ \ no-armor no-ask-cert-expire no-ask-sig-expire
+ \ no-auto-check-trustdb no-batch no-comment
+ \ no-default-keyring no-default-recipient
+ \ no-encrypt-to no-expensive-trust-checks
+ \ no-expert no-for-your-eyes-only no-force-v3-sigs
+ \ no-force-v4-certs no-greeting no-literal
+ \ no-mdc-warning no-options no-permission-warning
+ \ no-pgp2 no-pgp6 no-pgp7 no-random-seed-file
+ \ no-secmem-warning no-show-notation no-show-photos
+ \ no-show-policy-url no-sig-cache no-sig-create-check
+ \ no-sk-comments no-tty no-utf8-strings no-verbose
+ \ no-version not-dash-escaped openpgp pgp2
+ \ pgp6 pgp7 preserve-permissions quiet rfc1991
+ \ set-filesize show-keyring show-notation show-photos
+ \ show-policy-url show-session-key simple-sk-checksum
+ \ sk-comments skip-verify textmode throw-keyid
+ \ try-all-secrets use-agent use-embedded-filename
+ \ utf8-strings verbose with-colons with-fingerprint
+ \ with-key-data yes
-syn match gpgArg contained display '\S\+\(\s\+\S\+\)*' contains=gpgID
+syn match gpgArg contained display '\S\+\(\s\+\S\+\)*' contains=gpgID
syn match gpgArgError contained display '\S\+\(\s\+\S\+\)*'
-hi def link gpgComment Comment
-hi def link gpgTodo Todo
-hi def link gpgID Number
-hi def link gpgOption Keyword
-hi def link gpgCommand Error
+hi def link gpgComment Comment
+hi def link gpgTodo Todo
+hi def link gpgID Number
+hi def link gpgOption Keyword
+hi def link gpgCommand Error
hi def link gpgArgError Error
let b:current_syntax = "gpg"
diff --git a/runtime/syntax/lc.vim b/runtime/syntax/lc.vim
new file mode 100644
index 000000000..a33452938
--- /dev/null
+++ b/runtime/syntax/lc.vim
@@ -0,0 +1,31 @@
+" Vim syntax file
+" Language: Elsa
+" Maintainer: Miles Glapa-Grossklag <miles@glapa-grossklag.com>
+" Last Change: 2023-01-29
+
+if exists('b:current_syntax')
+ finish
+endif
+
+" Keywords
+syntax keyword elsaKeyword let eval
+syntax match elsaKeyword "\v:"
+highlight link elsaKeyword Keyword
+
+" Comments
+setlocal commentstring=--%s
+syntax match elsaComment "\v--.*$"
+highlight link elsaComment Comment
+
+" Operators
+syntax match elsaOperator "\v\="
+syntax match elsaOperator "\v\=[abd*~]\>"
+syntax match elsaOperator "\v-\>"
+syntax match elsaOperator "\v\\"
+highlight link elsaOperator Operator
+
+" Definitions
+syntax match elsaConstant "\v[A-Z]+[A-Z_0-9]*"
+highlight link elsaConstant Constant
+
+let b:current_syntax = 'elsa'
diff --git a/runtime/syntax/nginx.vim b/runtime/syntax/nginx.vim
index 18dd50cbb..04760e4a2 100644
--- a/runtime/syntax/nginx.vim
+++ b/runtime/syntax/nginx.vim
@@ -1,7 +1,7 @@
" Vim syntax file
" Language: nginx.conf
" Maintainer: Chris Aumann <me@chr4.org>
-" Last Change: Apr 15, 2017
+" Last Change: Jan 25, 2023
if exists("b:current_syntax")
finish
@@ -84,6 +84,8 @@ syn keyword ngxListenOptions default_server contained
syn keyword ngxListenOptions ssl contained
syn keyword ngxListenOptions http2 contained
syn keyword ngxListenOptions spdy contained
+syn keyword ngxListenOptions http3 contained
+syn keyword ngxListenOptions quic contained
syn keyword ngxListenOptions proxy_protocol contained
syn keyword ngxListenOptions setfib contained
syn keyword ngxListenOptions fastopen contained
@@ -265,8 +267,16 @@ syn keyword ngxDirective http2_max_concurrent_streams
syn keyword ngxDirective http2_max_field_size
syn keyword ngxDirective http2_max_header_size
syn keyword ngxDirective http2_max_requests
+syn keyword ngxDirective http2_push
+syn keyword ngxDirective http2_push_preload
syn keyword ngxDirective http2_recv_buffer_size
syn keyword ngxDirective http2_recv_timeout
+syn keyword ngxDirective http3_hq
+syn keyword ngxDirective http3_max_concurrent_pushes
+syn keyword ngxDirective http3_max_concurrent_streams
+syn keyword ngxDirective http3_push
+syn keyword ngxDirective http3_push_preload
+syn keyword ngxDirective http3_stream_buffer_size
syn keyword ngxDirective if_modified_since
syn keyword ngxDirective ignore_invalid_headers
syn keyword ngxDirective image_filter
@@ -444,6 +454,10 @@ syn keyword ngxDirective proxy_temp_path
syn keyword ngxDirective proxy_timeout
syn keyword ngxDirective proxy_upload_rate
syn keyword ngxDirective queue
+syn keyword ngxDirective quic_gso
+syn keyword ngxDirective quic_host_key
+syn keyword ngxDirective quic_mtu
+syn keyword ngxDirective quic_retry
syn keyword ngxDirective random_index
syn keyword ngxDirective read_ahead
syn keyword ngxDirective real_ip_header
@@ -545,8 +559,10 @@ syn keyword ngxDirective ssl_certificate
syn keyword ngxDirective ssl_certificate_key
syn keyword ngxDirective ssl_ciphers
syn keyword ngxDirective ssl_client_certificate
+syn keyword ngxDirective ssl_conf_command
syn keyword ngxDirective ssl_crl
syn keyword ngxDirective ssl_dhparam
+syn keyword ngxDirective ssl_early_data
syn keyword ngxDirective ssl_ecdh_curve
syn keyword ngxDirective ssl_engine
syn keyword ngxDirective ssl_handshake_timeout
@@ -556,6 +572,7 @@ syn keyword ngxSSLPreferServerCiphersOn on contained
syn keyword ngxSSLPreferServerCiphersOff off contained
syn keyword ngxDirective ssl_preread
syn keyword ngxDirective ssl_protocols nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
+syn keyword ngxDirective ssl_reject_handshake
syn match ngxSSLProtocol 'TLSv1' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
syn match ngxSSLProtocol 'TLSv1\.1' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
syn match ngxSSLProtocol 'TLSv1\.2' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
@@ -622,6 +639,7 @@ syn keyword ngxDirective uwsgi_buffering
syn keyword ngxDirective uwsgi_buffers
syn keyword ngxDirective uwsgi_busy_buffers_size
syn keyword ngxDirective uwsgi_cache
+syn keyword ngxDirective uwsgi_cache_background_update
syn keyword ngxDirective uwsgi_cache_bypass
syn keyword ngxDirective uwsgi_cache_key
syn keyword ngxDirective uwsgi_cache_lock
@@ -2225,6 +2243,19 @@ syn keyword ngxDirectiveThirdParty xss_override_status
syn keyword ngxDirectiveThirdParty xss_check_status
syn keyword ngxDirectiveThirdParty xss_input_types
+" CT Module <https://github.com/grahamedgecombe/nginx-ct>
+" Certificate Transparency module for nginx
+syn keyword ngxDirectiveThirdParty ssl_ct
+syn keyword ngxDirectiveThirdParty ssl_ct_static_scts
+
+" Dynamic TLS records patch <https://github.com/cloudflare/sslconfig/blob/master/patches/nginx__dynamic_tls_records.patch>
+" TLS Dynamic Record Resizing
+syn keyword ngxDirectiveThirdParty ssl_dyn_rec_enable
+syn keyword ngxDirectiveThirdParty ssl_dyn_rec_size_hi
+syn keyword ngxDirectiveThirdParty ssl_dyn_rec_size_lo
+syn keyword ngxDirectiveThirdParty ssl_dyn_rec_threshold
+syn keyword ngxDirectiveThirdParty ssl_dyn_rec_timeout
+
" ZIP Module <https://www.nginx.com/resources/wiki/modules/zip/>
" ZIP archiver for nginx
diff --git a/runtime/syntax/sh.vim b/runtime/syntax/sh.vim
index 6722d62c8..13d74dbc1 100644
--- a/runtime/syntax/sh.vim
+++ b/runtime/syntax/sh.vim
@@ -2,8 +2,8 @@
" Language: shell (sh) Korn shell (ksh) bash (sh)
" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
" Previous Maintainer: Lennart Schultz <Lennart.Schultz@ecmwf.int>
-" Last Change: Nov 25, 2022
-" Version: 204
+" Last Change: Dec 20, 2022
+" Version: 205
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH
" For options and settings, please use: :help ft-sh-syntax
" This file includes many ideas from Eric Brunet (eric.brunet@ens.fr) and heredoc fixes from Felipe Contreras
@@ -190,8 +190,10 @@ syn region shEmbeddedEcho contained matchgroup=shStatement start="\<print\>" ski
" =====
if exists("b:is_kornshell") || exists("b:is_bash") || exists("b:is_posix")
syn match shStatement "\<alias\>"
- syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]\+\)\@=" skip="\\$" end="\>\|`"
- syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]\+=\)\@=" skip="\\$" end="="
+ syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]*\)\@=" skip="\\$" end="\>\|`"
+ syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]*=\)\@=" skip="\\$" end="="
+" syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]\+\)\@=" skip="\\$" end="\>\|`"
+" syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]\+=\)\@=" skip="\\$" end="="
" Touch: {{{1
" =====
@@ -333,7 +335,7 @@ syn match shEscape contained '\%(^\)\@!\%(\\\\\)*\\.' nextgroup=shComment
" systems too, however, so the following syntax will flag $(..) as
" an Error under /bin/sh. By consensus of vimdev'ers!
if exists("b:is_kornshell") || exists("b:is_bash") || exists("b:is_posix")
- syn region shCommandSub matchgroup=shCmdSubRegion start="\$(\ze[^(]" skip='\\\\\|\\.' end=")" contains=@shCommandSubList
+ syn region shCommandSub matchgroup=shCmdSubRegion start="\$(\ze[^(]\|$" skip='\\\\\|\\.' end=")" contains=@shCommandSubList
syn region shArithmetic matchgroup=shArithRegion start="\$((" skip='\\\\\|\\.' end="))" contains=@shArithList
syn region shArithmetic matchgroup=shArithRegion start="\$\[" skip='\\\\\|\\.' end="\]" contains=@shArithList
syn match shSkipInitWS contained "^\s\+"
@@ -483,7 +485,9 @@ endif
" Parameter Dereferencing: {{{1
" ========================
-if !exists("g:sh_no_error") && !(exists("b:is_bash") || exists("b:is_kornshell") || exists("b:is_posix"))
+" Note: sh04 failure with following line
+"if !exists("g:sh_no_error") && !(exists("b:is_bash") || exists("b:is_kornshell") || exists("b:is_posix"))
+if !exists("g:sh_no_error")
syn match shDerefWordError "[^}$[~]" contained
endif
syn match shDerefSimple "\$\%(\h\w*\|\d\)" nextgroup=@shNoZSList
diff --git a/runtime/syntax/shared/README.txt b/runtime/syntax/shared/README.txt
index f519d44fa..fade4b38a 100644
--- a/runtime/syntax/shared/README.txt
+++ b/runtime/syntax/shared/README.txt
@@ -1,2 +1,2 @@
This directory "runtime/syntax/shared" contains Vim script files that are
-generated or used by more then one syntax file.
+generated or used by more than one syntax file.
diff --git a/runtime/syntax/tpp.vim b/runtime/syntax/tpp.vim
index ca64b5dce..e2b307b2a 100644
--- a/runtime/syntax/tpp.vim
+++ b/runtime/syntax/tpp.vim
@@ -2,8 +2,8 @@
" Language: tpp - Text Presentation Program
" Maintainer: Debian Vim Maintainers
" Former Maintainer: Gerfried Fuchs <alfie@ist.org>
-" Last Change: 2018 Dec 27
-" URL: https://salsa.debian.org/vim-team/vim-debian/master/syntax/tpp.vim
+" Last Change: 2023 Jan 16
+" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/tpp.vim
" Filenames: *.tpp
" License: BSD
"
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index ae5272a47..064416cc6 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: Jan 08, 2023
-" Version: 9.0-18
+" Last Change: January 18, 2023
+" Version: 9.0-21
" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM
" Automatically generated keyword lists: {{{1
@@ -19,12 +19,13 @@ syn keyword vimTodo contained COMBAK FIXME TODO XXX
syn cluster vimCommentGroup contains=vimTodo,@Spell
" regular vim commands {{{2
-syn keyword vimCommand contained a ar[gs] argg[lobal] b[uffer] bf[irst] br[ewind] bufdo c[hange] caddf[ile] cbel[ow] ce[nter] cgetb[uffer] chi[story] cmapc[lear] col[der] conf[irm] cr[ewind] cw[indow] defer deletl dep diffpu[t] dj[ump] dp earlier echow[indow] endf[unction] ex files fini[sh] folddoc[losed] grepa[dd] helpf[ind] hor[izontal] il[ist] interface ju[mps] keepp[atterns] lad[dexpr] later lch[dir] lefta[bove] lg[etfile] lhi[story] lmapc[lear] loadkeymap lpf[ile] luafile mak[e] mks[ession] mzf[ile] nmapc[lear] nos[wapfile] opt[ions] pe[rl] pre[serve] promptr[epl] ptl[ast] pw[d] pydo pyxfile red[o] res[ize] ru[ntime] sI sIp sav[eas] sbm[odified] sce scripte[ncoding] setg[lobal] sgc sgr sign sl[eep] smile sor[t] spellr[epall] srI srn startr[eplace] sun[hide] sy tN[ext] tabe[dit] tabnew tc[d] ter[minal] tlmenu tma[p] tr[ewind] u[ndo] unlo[ckvar] verb[ose] vim[grep] w[rite] winp[os] wv[iminfo] xmenu xunme
-syn keyword vimCommand contained ab arga[dd] argl[ocal] ba[ll] bl[ast] brea[k] buffers ca caf[ter] cbo[ttom] cex[pr] cgete[xpr] cl[ist] cn[ext] colo[rscheme] cons[t] cs d[elete] delc[ommand] deletp di[splay] diffs[plit] dl dr[op] ec el[se] endfo[r] exi[t] filet fir[st] foldo[pen] gui helpg[rep] i imapc[lear] intro k lN[ext] laddb[uffer] lb[uffer] lcl[ose] leg[acy] lgetb[uffer] ll lne[xt] loc[kmarks] lr[ewind] lv[imgrep] marks mksp[ell] n[ext] noa nu[mber] ownsyntax ped[it] prev[ious] ps[earch] ptn[ext] py3 pyf[ile] q[uit] redi[r] ret[ab] rub[y] sIc sIr sbN[ext] sbn[ext] scg scriptv[ersion] setl[ocal] sge sh[ell] sil[ent] sla[st] sn[ext] sp[lit] spellr[rare] src srp stj[ump] sunme syn ta[g] tabf[ind] tabo[nly] tch[dir] tf[irst] tln tmapc[lear] try una[bbreviate] uns[ilent] vert[ical] vimgrepa[dd] wa[ll] wn[ext] x[it] xnoreme xunmenu
-syn keyword vimCommand contained abc[lear] argd[elete] argu[ment] bad[d] bm[odified] breaka[dd] bun[load] cabc[lear] cal[l] cc cf[ile] changes cla[st] cnew[er] com cope[n] cscope debug delel delf[unction] dif[fupdate] difft[his] dli[st] ds[earch] echoc[onsole] elsei[f] endt[ry] exp filetype fix[del] for gvim helpt[ags] ia imp is[earch] kee[pmarks] lNf[ile] laddf[ile] lbe[fore] lcs lex[pr] lgete[xpr] lla[st] lnew[er] lockv[ar] ls lvimgrepa[dd] mat[ch] mkv[imrc] nb[key] noautocmd o[pen] p[rint] perld[o] pro ptN[ext] ptp[revious] py3do python3 qa[ll] redr[aw] retu[rn] rubyd[o] sIe sN[ext] sb[uffer] sbp[revious] sci scs sf[ind] sgi si sim[alt] sm[agic] sno[magic] spe[llgood] spellu[ndo] sre[wind] st[op] stopi[nsert] sunmenu sync tab tabfir[st] tabp[revious] tcl th[row] tlnoremenu tn[ext] ts[elect] undoj[oin] up[date] vi[sual] viu[sage] wh[ile] wp[revious] xa[ll] xnoremenu xwininfo
-syn keyword vimCommand contained abo[veleft] argded[upe] as[cii] balt bn[ext] breakd[el] bw[ipeout] cabo[ve] cat[ch] ccl[ose] cfdo chd[ir] class cnf[ile] comc[lear] cp[revious] cstag debugg[reedy] delep dell diffg[et] dig[raphs] do dsp[lit] echoe[rr] em[enu] endw[hile] export filt[er] fo[ld] fu[nction] h[elp] hi iabc[lear] import isp[lit] keepa l[ist] laf[ter] lbel[ow] lcscope lf[ile] lgr[ep] lli[st] lnf[ile] lol[der] lt[ag] lw[indow] menut[ranslate] mkvie[w] nbc[lose] noh[lsearch] ol[dfiles] pa[ckadd] po[p] prof[ile] pta[g] ptr[ewind] py3f[ile] pythonx quita[ll] redraws[tatus] rew[ind] rubyf[ile] sIg sa[rgument] sba[ll] sbr[ewind] scl scscope sfir[st] sgl sic sin sm[ap] snoreme spelld[ump] spellw[rong] srg sta[g] sts[elect] sus[pend] syncbind tabN[ext] tabl[ast] tabr[ewind] tcld[o] tj[ump] tlu tno[remap] tu[nmenu] undol[ist] v vie[w] vne[w] win[size] wq xmapc[lear] xprop y[ank]
-syn keyword vimCommand contained addd argdo au bd[elete] bo[tright] breakl[ist] cN[ext] cad[dbuffer] cb[uffer] cd cfir[st] che[ckpath] cle[arjumps] cnor comp[iler] cpf[ile] cun def deletel delm[arks] diffo[ff] dir doau e[dit] echom[sg] en[dif] ene[w] exu[sage] fin[d] foldc[lose] go[to] ha[rdcopy] hid[e] if in iuna[bbrev] keepalt la[st] lan[guage] lbo[ttom] ld[o] lfdo lgrepa[dd] lma lo[adview] lop[en] lua m[ove] mes[sages] mod[e] nbs[tart] nor omapc[lear] packl[oadall] popu[p] profd[el] ptf[irst] pts[elect] py3f[ile] pyx r[ead] redrawt[abline] ri[ght] rundo sIl sal[l] sbf[irst] sc scp se[t] sg sgn sie sip sme snoremenu spelli[nfo] spr[evious] sri star[tinsert] substitutepattern sv[iew] syntime tabc[lose] tabm[ove] tabs tclf[ile] tl[ast] tlunmenu to[pleft] tunma[p] unh[ide] var vim9[cmd] vs[plit] winc[md] wqa[ll] xme xr[estore] z[^.=]
-syn keyword vimCommand contained al[l] arge[dit] bN[ext] bel[owright] bp[revious] bro[wse] cNf[ile] cadde[xpr] cbe[fore] cdo cg[etfile] checkt[ime] clo[se] co[py] con[tinue] cq[uit] cuna[bbrev] defc[ompile] deletep delp diffp[atch] disa[ssemble] doaut ea echon enddef eval f[ile] fina[lly] foldd[oopen] gr[ep] helpc[lose] his[tory] ij[ump] inor j[oin] keepj[umps] lab[ove] lat lc[d] le[ft] lfir[st] lh[elpgrep] lmak[e] loadk lp[revious] luado ma[rk] mk[exrc] mz[scheme] new nore on[ly] pc[lose] pp[op] promptf[ind] ptj[ump] pu[t] py[thon] pyxdo rec[over] reg[isters] rightb[elow] rv[iminfo] sIn san[dbox] sbl[ast] scI scr[iptnames] setf[iletype] sgI sgp sig sir smenu so[urce] spellr[are] sr srl startg[replace] substituterepeat sw[apname] t tabd[o] tabn[ext] tags te[aroff] tlm tm[enu] tp[revious] type unl ve[rsion] vim9s[cript] wN[ext] windo wundo
+syn keyword vimCommand contained a ar[gs] argl[ocal] bad[d] bn[ext] breakd[el] bw[ipeout] cabo[ve] cat[ch] ccl[ose] cfdo chd[ir] class cnf[ile] comc[lear] cp[revious] cstag debugg[reedy] delep dell diffg[et] dig[raphs] do dsp[lit] echoe[rr] em[enu] endfo[r] eval f[ile] fina[lly] foldd[oopen] gr[ep] helpc[lose] his[tory] ij[ump] inor j[oin] keepj[umps] lab[ove] lat lc[d] le[ft] lfir[st] lh[elpgrep] lmak[e] loadk lp[revious] luado ma[rk] mk[exrc] mz[scheme] new nore on[ly] pc[lose] pp[op] promptf[ind] ptj[ump] pu[t] py3f[ile] pyx r[ead] redrawt[abline] ri[ght] rundo sIl sal[l] sbf[irst] sc scp se[t] sg sgn sie sip sme snoremenu spelli[nfo] spr[evious] sri star[tinsert] sts[elect] sus[pend] syncbind tabN[ext] tabl[ast] tabr[ewind] tcld[o] tj[ump] tlu tno[remap] tu[nmenu] undol[ist] v vie[w] vne[w] win[size] wq xmapc[lear] xr[estore]
+syn keyword vimCommand contained ab arga[dd] argu[ment] balt bo[tright] breakl[ist] cN[ext] cad[dbuffer] cb[uffer] cd cfir[st] che[ckpath] cle[arjumps] cnor comp[iler] cpf[ile] cun def deletel delm[arks] diffo[ff] dir doau e[dit] echom[sg] en[dif] endinterface ex files fini[sh] folddoc[losed] grepa[dd] helpf[ind] hor[izontal] il[ist] interface ju[mps] keepp[atterns] lad[dexpr] later lch[dir] lefta[bove] lg[etfile] lhi[story] lmapc[lear] loadkeymap lpf[ile] luafile mak[e] mks[ession] mzf[ile] nmapc[lear] nos[wapfile] opt[ions] pe[rl] pre[serve] promptr[epl] ptl[ast] public py[thon] pyxdo rec[over] reg[isters] rightb[elow] rv[iminfo] sIn san[dbox] sbl[ast] scI scr[iptnames] setf[iletype] sgI sgp sig sir smenu so[urce] spellr[are] sr srl startg[replace] substitutepattern sv[iew] syntime tabc[lose] tabm[ove] tabs tclf[ile] tl[ast] tlunmenu to[pleft] tunma[p] unh[ide] var vim9[cmd] vs[plit] winc[md] wqa[ll] xme xunme
+syn keyword vimCommand contained abc[lear] argd[elete] as[cii] bd[elete] bp[revious] bro[wse] cNf[ile] cadde[xpr] cbe[fore] cdo cg[etfile] checkt[ime] clo[se] co[py] con[tinue] cq[uit] cuna[bbrev] defc[ompile] deletep delp diffp[atch] disa[ssemble] doaut ea echon endclass endt[ry] exi[t] filet fir[st] foldo[pen] gui helpg[rep] i imapc[lear] intro k lN[ext] laddb[uffer] lb[uffer] lcl[ose] leg[acy] lgetb[uffer] ll lne[xt] loc[kmarks] lr[ewind] lv[imgrep] marks mksp[ell] n[ext] noa nu[mber] ownsyntax ped[it] prev[ious] ps[earch] ptn[ext] pw[d] pydo pyxfile red[o] res[ize] ru[ntime] sI sIp sav[eas] sbm[odified] sce scripte[ncoding] setg[lobal] sgc sgr sign sl[eep] smile sor[t] spellr[epall] srI srn startr[eplace] substituterepeat sw[apname] t tabd[o] tabn[ext] tags te[aroff] tlm tm[enu] tp[revious] type unl ve[rsion] vim9s[cript] wN[ext] windo wundo xmenu xunmenu
+syn keyword vimCommand contained abo[veleft] argded[upe] au bel[owright] br[ewind] bufdo c[hange] caddf[ile] cbel[ow] ce[nter] cgetb[uffer] chi[story] cmapc[lear] col[der] conf[irm] cr[ewind] cw[indow] defer deletl dep diffpu[t] dj[ump] dp earlier echow[indow] enddef endw[hile] exp filetype fix[del] for gvim helpt[ags] ia imp is[earch] kee[pmarks] lNf[ile] laddf[ile] lbe[fore] lcs lex[pr] lgete[xpr] lla[st] lnew[er] lockv[ar] ls lvimgrepa[dd] mat[ch] mkv[imrc] nb[key] noautocmd o[pen] p[rint] perld[o] pro ptN[ext] ptp[revious] py3 pyf[ile] q[uit] redi[r] ret[ab] rub[y] sIc sIr sbN[ext] sbn[ext] scg scriptv[ersion] setl[ocal] sge sh[ell] sil[ent] sla[st] sn[ext] sp[lit] spellr[rare] src srp static sun[hide] sy tN[ext] tabe[dit] tabnew tc[d] ter[minal] tlmenu tma[p] tr[ewind] u[ndo] unlo[ckvar] verb[ose] vim[grep] w[rite] winp[os] wv[iminfo] xnoreme xwininfo
+syn keyword vimCommand contained abstract argdo bN[ext] bf[irst] brea[k] buffers ca caf[ter] cbo[ttom] cex[pr] cgete[xpr] cl[ist] cn[ext] colo[rscheme] cons[t] cs d[elete] delc[ommand] deletp di[splay] diffs[plit] dl dr[op] ec el[se] endenum ene[w] export filt[er] fo[ld] fu[nction] h[elp] hi iabc[lear] import isp[lit] keepa l[ist] laf[ter] lbel[ow] lcscope lf[ile] lgr[ep] lli[st] lnf[ile] lol[der] lt[ag] lw[indow] menut[ranslate] mkvie[w] nbc[lose] noh[lsearch] ol[dfiles] pa[ckadd] po[p] prof[ile] pta[g] ptr[ewind] py3do python3 qa[ll] redr[aw] retu[rn] rubyd[o] sIe sN[ext] sb[uffer] sbp[revious] sci scs sf[ind] sgi si sim[alt] sm[agic] sno[magic] spe[llgood] spellu[ndo] sre[wind] st[op] stj[ump] sunme syn ta[g] tabf[ind] tabo[nly] tch[dir] tf[irst] tln tmapc[lear] try una[bbreviate] uns[ilent] vert[ical] vimgrepa[dd] wa[ll] wn[ext] x[it] xnoremenu y[ank]
+syn keyword vimCommand contained addd arge[dit] b[uffer] bl[ast] breaka[dd] bun[load] cabc[lear] cal[l] cc cf[ile] changes cla[st] cnew[er] com cope[n] cscope debug delel delf[unction] dif[fupdate] difft[his] dli[st] ds[earch] echoc[onsole] elsei[f] endf[unction] enum exu[sage] fin[d] foldc[lose] go[to] ha[rdcopy] hid[e] if in iuna[bbrev] keepalt la[st] lan[guage] lbo[ttom] ld[o] lfdo lgrepa[dd] lma lo[adview] lop[en] lua m[ove] mes[sages] mod[e] nbs[tart] nor omapc[lear] packl[oadall] popu[p] profd[el] ptf[irst] pts[elect] py3f[ile] pythonx quita[ll] redraws[tatus] rew[ind] rubyf[ile] sIg sa[rgument] sba[ll] sbr[ewind] scl scscope sfir[st] sgl sic sin sm[ap] snoreme spelld[ump] spellw[rong] srg sta[g] stopi[nsert] sunmenu sync tab tabfir[st] tabp[revious] tcl th[row] tlnoremenu tn[ext] ts[elect] undoj[oin] up[date] vi[sual] viu[sage] wh[ile] wp[revious] xa[ll] xprop z[^.=]
+syn keyword vimCommand contained al[l] argg[lobal] ba[ll] bm[odified]
syn match vimCommand contained "\<z[-+^.=]\=\>"
syn keyword vimStdPlugin contained Arguments Asm Break Cfilter Clear Continue DiffOrig Evaluate Finish Gdb Lfilter Man N[ext] Over P[rint] Program Run S Source Step Stop Termdebug TermdebugCommand TOhtml Until Winbar XMLent XMLns
@@ -49,8 +50,8 @@ syn keyword vimOption contained invai invaltkeymap invar invarabicshape invasd i
syn keyword vimOption contained invakm invanti invarab invari invautochdir invautoshelldir invaw invballooneval invbevalterm invbk invbreakindent invcf invcindent invcopyindent invcscoperelative invcsre invcuc invcursorcolumn invdelcombine invdigraph inved invemo invendofline invequalalways invet invexrc invfileignorecase invfk invfs invgdefault invhidden invhkmapp invhlsearch invignorecase invimcmdline invincsearch invinsertmode invjs invlazyredraw invlisp invloadplugins invlz invmagic invmle invmodelineexpr invmore invmousehide invodev invpi
" termcap codes (which can also be set) {{{2
-syn keyword vimOption contained t_8b t_8u t_AF t_AL t_bc t_BE t_ce t_cl t_Co t_Cs t_CV t_db t_DL t_Ds t_EI t_F2 t_F4 t_F6 t_F8 t_fd t_fs t_IE t_k1 t_k2 t_K3 t_K4 t_K5 t_K6 t_K7 t_K8 t_K9 t_kb t_KB t_kd t_KD t_KE t_KG t_KH t_KI t_KK t_kl t_KL t_kN t_kP t_kr t_ks t_ku t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_PE t_PS t_RB t_RC t_RF t_Ri t_RI t_RK t_RS t_RT t_RV t_Sb t_SC t_se t_Sf t_SH t_Si t_SI t_so t_sr t_SR t_ST t_te t_Te t_TE t_ti t_TI t_ts t_Ts t_u7 t_ue t_us t_Us t_ut t_vb t_ve t_vi t_vs t_VS t_WP t_WS t_xn t_xs t_ZH t_ZR
-syn keyword vimOption contained t_8f t_AB t_al t_AU t_BD t_cd t_Ce t_cm t_cs t_CS t_da t_dl t_ds t_EC t_F1 t_F3 t_F5 t_F7 t_F9 t_fe t_GP t_IS t_K1 t_k3 t_k4 t_k5 t_k6 t_k7 t_k8 t_k9 t_KA t_kB t_KC t_kD t_ke t_KF t_kh t_kI t_KJ
+syn keyword vimOption contained t_8b t_8u t_AF t_AL t_bc t_BE t_ce t_cl t_Co t_Cs t_CV t_db t_DL t_Ds t_EI t_F2 t_F4 t_F6 t_F8 t_fd t_fs t_IE t_k1 t_k2 t_K3 t_K4 t_K5 t_K6 t_K7 t_K8 t_K9 t_kb t_KB t_kd t_KD t_KE t_KG t_KH t_KI t_KK t_KL t_kN t_kP t_kr t_ks t_ku t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_PE t_PS t_RB t_RC t_RF t_Ri t_RI t_RK t_RS t_RT t_RV t_Sb t_SC t_se t_Sf t_SH t_Si t_SI t_so t_sr t_SR t_ST t_te t_Te t_TE t_ti t_TI t_ts t_Ts t_u7 t_ue t_us t_Us t_ut t_vb t_ve t_vi t_vs t_VS t_WP t_WS t_XM t_xn t_xs t_ZH t_ZR
+syn keyword vimOption contained t_8f t_AB t_al t_AU t_BD t_cd t_Ce t_cm t_cs t_CS t_da t_dl t_ds t_EC t_F1 t_F3 t_F5 t_F7 t_F9 t_fe t_GP t_IS t_K1 t_k3 t_k4 t_k5 t_k6 t_k7 t_k8 t_k9 t_KA t_kB t_KC t_kD t_ke t_KF t_kh t_kI t_KJ t_kl
syn match vimOption contained "t_%1"
syn match vimOption contained "t_#2"
syn match vimOption contained "t_#4"
@@ -78,12 +79,12 @@ syn match vimHLGroup contained "Conceal"
syn case match
" Function Names {{{2
-syn keyword vimFuncName contained abs argc assert_equal assert_match atan balloon_show bufexists bufwinid ceil ch_canread ch_getbufnr ch_read ch_status complete_check count deletebufline digraph_set eval exists_compiled extendnew findfile fnameescape foldtextresult get getchar getcmdline getcurpos getfsize getloclist getpos gettabinfo getwinpos globpath histdel hlset input insert islocked job_start json_decode libcallnr listener_add luaeval mapset matchend max nextnonblank popup_atcursor popup_dialog popup_findpreview popup_locate popup_settext prompt_getprompt prop_add_list prop_type_add pum_getpos rand readfile reltimefloat remote_read repeat screenattr screenrow searchpair setbufline setcmdline setline setreg sha256 sign_getplaced sign_unplace slice sound_playfile sqrt str2nr strftime strpart submatch synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_list term_setkill test_alloc_fail test_getvalue test_null_channel test_null_partial test_setmouse timer_info tolower type values winbufnr win_getid win_id2win winnr win_splitmove
-syn keyword vimFuncName contained acos argidx assert_equalfile assert_nobeep atan2 balloon_split buflisted bufwinnr changenr ch_close ch_getjob ch_readblob cindent complete_info cscope_connection did_filetype digraph_setlist eventhandler exp feedkeys flatten fnamemodify foreground getbufinfo getcharmod getcmdpos getcursorcharpos getftime getmarklist getqflist gettabvar getwinposx has histget hostname inputdialog interrupt isnan job_status json_encode line listener_flush map match matchfuzzy menu_info nr2char popup_beval popup_filter_menu popup_getoptions popup_menu popup_show prompt_setcallback prop_clear prop_type_change pumvisible range reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setcmdpos setloclist settabvar shellescape sign_jump sign_unplacelist sort sound_stop srand strcharlen strgetchar strptime substitute synID systemlist taglist term_dumpload term_getcursor term_getstatus term_scrape term_setrestore test_autochdir test_gui_event test_null_dict test_null_string test_settime timer_pause toupper typename virtcol wincol win_gettype winlayout winrestcmd winwidth
-syn keyword vimFuncName contained add arglistid assert_exception assert_notequal autocmd_add blob2list bufload byte2line char2nr ch_close_in ch_info ch_readraw clearmatches confirm cursor diff_filler echoraw executable expand filereadable flattennew foldclosed fullcommand getbufline getcharpos getcmdscreenpos getcwd getftype getmatches getreg gettabwinvar getwinposy has_key histnr iconv inputlist invert items job_stop keys line2byte listener_remove maparg matchadd matchfuzzypos min or popup_clear popup_filter_yesno popup_getpos popup_move pow prompt_setinterrupt prop_find prop_type_delete py3eval readblob reg_executing remote_expr remote_startserver reverse screenchars search searchpos setcellwidths setcursorcharpos setmatches settabwinvar shiftwidth sign_place simplify sound_clear spellbadword state strcharpart stridx strridx swapfilelist synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_sendkeys term_setsize test_feedinput test_ignore_error test_null_function test_option_not_set test_srand_seed timer_start tr undofile virtcol2col windowsversion win_gotoid winline winrestview wordcount
-syn keyword vimFuncName contained and argv assert_fails assert_notmatch autocmd_delete browse bufloaded byteidx charclass chdir ch_log ch_sendexpr col copy debugbreak diff_hlID empty execute expandcmd filewritable float2nr foldclosedend funcref getbufoneline getcharsearch getcmdtype getenv getimstatus getmousepos getreginfo gettagstack getwinvar haslocaldir hlexists indent inputrestore isabsolutepath job_getchannel join keytrans lispindent localtime mapcheck matchaddpos matchlist mkdir pathshorten popup_close popup_findecho popup_hide popup_notification prevnonblank prompt_setprompt prop_list prop_type_get pyeval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcharpos setenv setpos settagstack sign_define sign_placelist sin soundfold spellsuggest str2float strchars string strtrans swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setansicolors term_start test_garbagecollect_now test_mswin_event test_null_job test_override test_unknown timer_stop trim undotree visualmode win_execute winheight win_move_separator winsaveview writefile
-syn keyword vimFuncName contained append asin assert_false assert_report autocmd_get browsedir bufname byteidxcomp charcol ch_evalexpr ch_logfile ch_sendraw complete cos deepcopy digraph_get environ exepath expr10 filter floor foldlevel function getbufvar getcharstr getcmdwintype getfontname getjumplist getmouseshape getregtype gettext glob hasmapto hlget index inputsave isdirectory job_info js_decode len list2blob log maplist matcharg matchstr mode perleval popup_create popup_findinfo popup_list popup_setoptions printf prop_add prop_remove prop_type_list pyxeval readdirex reltime remote_peek rename rubyeval screenpos searchdecl serverlist setcharsearch setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playevent split str2list strdisplaywidth strlen strwidth swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled terminalprops term_setapi term_wait test_garbagecollect_soon test_null_blob test_null_list test_refcount test_void timer_stopall trunc uniq wildmenumode win_findbuf win_id2tabwin win_move_statusline win_screenpos xor
-syn keyword vimFuncName contained appendbufline assert_beeps assert_inrange assert_true balloon_gettext bufadd bufnr call charidx ch_evalraw ch_open ch_setoptions complete_add cosh delete digraph_getlist escape exists extend finddir fmod foldtext garbagecollect getchangelist getcmdcompltype getcompletion getfperm getline getpid getscriptinfo getwininfo glob2regpat histadd hlID indexof inputsecret isinf job_setoptions js_encode libcall list2str log10 mapnew matchdelete matchstrpos mzeval
+syn keyword vimFuncName contained abs argc assert_equal assert_match atan balloon_show bufexists bufwinid ceil ch_canread ch_getbufnr ch_read ch_status complete_check count deletebufline digraph_set eval exists_compiled extendnew findfile fnameescape foldtextresult get getchangelist getcmdcompltype getcompletion getfperm getline getpid getscriptinfo getwininfo glob2regpat histadd hlID indexof inputsecret isinf job_setoptions js_encode libcall list2str log10 mapnew matchdelete matchstrpos mzeval popup_atcursor popup_dialog popup_findpreview popup_locate popup_settext prompt_getprompt prop_add_list prop_type_add pum_getpos rand readfile reltimefloat remote_read repeat screenattr screenrow searchpair setbufline setcmdline setline setreg sha256 sign_getplaced sign_unplace slice sound_playfile sqrt str2nr strftime strpart submatch synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_list term_setkill test_alloc_fail test_getvalue test_null_channel test_null_partial test_setmouse timer_info tolower type values winbufnr win_getid win_id2win winnr win_splitmove
+syn keyword vimFuncName contained acos argidx assert_equalfile assert_nobeep atan2 balloon_split buflisted bufwinnr changenr ch_close ch_getjob ch_readblob cindent complete_info cscope_connection did_filetype digraph_setlist eventhandler exp feedkeys flatten fnamemodify foreground getbufinfo getchar getcmdline getcurpos getfsize getloclist getpos gettabinfo getwinpos globpath histdel hlset input insert islocked job_start json_decode libcallnr listener_add luaeval mapset matchend max nextnonblank popup_beval popup_filter_menu popup_getoptions popup_menu popup_show prompt_setcallback prop_clear prop_type_change pumvisible range reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setcmdpos setloclist settabvar shellescape sign_jump sign_unplacelist sort sound_stop srand strcharlen strgetchar strptime substitute synID systemlist taglist term_dumpload term_getcursor term_getstatus term_scrape term_setrestore test_autochdir test_gui_event test_null_dict test_null_string test_settime timer_pause toupper typename virtcol wincol win_gettype winlayout winrestcmd winwidth
+syn keyword vimFuncName contained add arglistid assert_exception assert_notequal autocmd_add blob2list bufload byte2line char2nr ch_close_in ch_info ch_readraw clearmatches confirm cursor diff_filler echoraw executable expand filereadable flattennew foldclosed fullcommand getbufline getcharmod getcmdpos getcursorcharpos getftime getmarklist getqflist gettabvar getwinposx has histget hostname inputdialog interrupt isnan job_status json_encode line listener_flush map match matchfuzzy menu_info nr2char popup_clear popup_filter_yesno popup_getpos popup_move pow prompt_setinterrupt prop_find prop_type_delete py3eval readblob reg_executing remote_expr remote_startserver reverse screenchars search searchpos setcellwidths setcursorcharpos setmatches settabwinvar shiftwidth sign_place simplify sound_clear spellbadword state strcharpart stridx strridx swapfilelist synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_sendkeys term_setsize test_feedinput test_ignore_error test_null_function test_option_not_set test_srand_seed timer_start tr undofile virtcol2col windowsversion win_gotoid winline winrestview wordcount
+syn keyword vimFuncName contained and argv assert_fails assert_notmatch autocmd_delete browse bufloaded byteidx charclass chdir ch_log ch_sendexpr col copy debugbreak diff_hlID empty execute expandcmd filewritable float2nr foldclosedend funcref getbufoneline getcharpos getcmdscreenpos getcwd getftype getmatches getreg gettabwinvar getwinposy has_key histnr iconv inputlist invert items job_stop keys line2byte listener_remove maparg matchadd matchfuzzypos min or popup_close popup_findecho popup_hide popup_notification prevnonblank prompt_setprompt prop_list prop_type_get pyeval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcharpos setenv setpos settagstack sign_define sign_placelist sin soundfold spellsuggest str2float strchars string strtrans swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setansicolors term_start test_garbagecollect_now test_mswin_event test_null_job test_override test_unknown timer_stop trim undotree visualmode win_execute winheight win_move_separator winsaveview writefile
+syn keyword vimFuncName contained append asin assert_false assert_report autocmd_get browsedir bufname byteidxcomp charcol ch_evalexpr ch_logfile ch_sendraw complete cos deepcopy digraph_get environ exepath expr10 filter floor foldlevel function getbufvar getcharsearch getcmdtype getenv getimstatus getmousepos getreginfo gettagstack getwinvar haslocaldir hlexists indent inputrestore isabsolutepath job_getchannel join keytrans lispindent localtime mapcheck matchaddpos matchlist mkdir pathshorten popup_create popup_findinfo popup_list popup_setoptions printf prop_add prop_remove prop_type_list pyxeval readdirex reltime remote_peek rename rubyeval screenpos searchdecl serverlist setcharsearch setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playevent split str2list strdisplaywidth strlen strwidth swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled terminalprops term_setapi term_wait test_garbagecollect_soon test_null_blob test_null_list test_refcount test_void timer_stopall trunc uniq wildmenumode win_findbuf win_id2tabwin win_move_statusline win_screenpos xor
+syn keyword vimFuncName contained appendbufline assert_beeps assert_inrange assert_true balloon_gettext bufadd bufnr call charidx ch_evalraw ch_open ch_setoptions complete_add cosh delete digraph_getlist escape exists extend finddir fmod foldtext garbagecollect getcellwidths getcharstr getcmdwintype getfontname getjumplist getmouseshape getregtype gettext glob hasmapto hlget index inputsave isdirectory job_info js_decode len list2blob log maplist matcharg matchstr mode perleval
"--- syntax here and above generated by mkvimvim ---
" Special Vim Highlighting (not automatic) {{{1
diff --git a/runtime/syntax/xf86conf.vim b/runtime/syntax/xf86conf.vim
index 545eda7db..e8162f3a3 100644
--- a/runtime/syntax/xf86conf.vim
+++ b/runtime/syntax/xf86conf.vim
@@ -1,13 +1,12 @@
" Vim syntax file
-" This is a GENERATED FILE. Please always refer to source file at the URI below.
" Language: XF86Config (XFree86 configuration file)
" Former Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
-" Last Change: 2010 Nov 01
-" URL: http://trific.ath.cx/Ftp/vim/syntax/xf86conf.vim
+" Last Change By David: 2010 Nov 01
+" Last Change: 2023 Jan 23
" Required Vim Version: 6.0
"
" Options: let xf86conf_xfree86_version = 3 or 4
-" to force XFree86 3.x or 4.x XF86Config syntax
+" to force XFree86 3.x or 4.x XF86Config syntax
" Setup
" quit when a syntax file was already loaded
@@ -147,6 +146,8 @@ syn keyword xf86confKeyword Hskew HTimings InputDevice IOBase MemBase Mode nextg
syn keyword xf86confKeyword Modes Ramdac Screen TextClockFreq UseModes VendorName nextgroup=xf86confComment,xf86confValue
syn keyword xf86confKeyword VertRefresh VideoRam ViewPort Virtual VScan VTimings nextgroup=xf86confComment,xf86confValue
syn keyword xf86confKeyword Weight White nextgroup=xf86confComment,xf86confValue
+syn keyword xf86confMatch MatchDevicePath MatchDriver MatchLayout MatchOS MatchPnPID MatchProduct MatchTag MatchUSBID MatchVendor nextgroup=xf86confComment,xf86confString skipwhite
+syn keyword xf86confMatch MatchIsPointer MatchIsKeyboard MatchIsTouchpad MatchIsTouchscreen MatchIsJoystick nextgroup=xf86confComment,xf86confValue skipwhite
syn keyword xf86confModeLine ModeLine nextgroup=xf86confComment,xf86confModeLineValue skipwhite skipnl
" Constants
@@ -185,6 +186,7 @@ hi def link xf86confOctalNumberError xf86confError
hi def link xf86confError Error
hi def link xf86confOption xf86confKeyword
+hi def link xf86confMatch xf86confKeyword
hi def link xf86confModeLine xf86confKeyword
hi def link xf86confKeyword Type
diff --git a/runtime/tutor/tutor b/runtime/tutor/tutor
index 98c417784..3df15f1a1 100644
--- a/runtime/tutor/tutor
+++ b/runtime/tutor/tutor
@@ -335,7 +335,7 @@ Doubling to operate on a line also works for operators mentioned below.
5. Now type a capital U to return the line to its original state.
6. Now type u a few times to undo the U and preceding commands.
7. Now type CTRL-R (keeping CTRL key pressed while hitting R) a few times
- to redo the commands (undo the undo's).
+ to redo the commands (undo the undos).
---> Fiix the errors oon thhis line and reeplace them witth undo.
@@ -365,7 +365,7 @@ Doubling to operate on a line also works for operators mentioned below.
8. To undo previous actions, type: u (lowercase u)
To undo all the changes on a line, type: U (capital U)
- To undo the undo's, type: CTRL-R
+ To undo the undos, type: CTRL-R
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 3.1: THE PUT COMMAND
diff --git a/runtime/tutor/tutor.utf-8 b/runtime/tutor/tutor.utf-8
index 98c417784..3df15f1a1 100644
--- a/runtime/tutor/tutor.utf-8
+++ b/runtime/tutor/tutor.utf-8
@@ -335,7 +335,7 @@ Doubling to operate on a line also works for operators mentioned below.
5. Now type a capital U to return the line to its original state.
6. Now type u a few times to undo the U and preceding commands.
7. Now type CTRL-R (keeping CTRL key pressed while hitting R) a few times
- to redo the commands (undo the undo's).
+ to redo the commands (undo the undos).
---> Fiix the errors oon thhis line and reeplace them witth undo.
@@ -365,7 +365,7 @@ Doubling to operate on a line also works for operators mentioned below.
8. To undo previous actions, type: u (lowercase u)
To undo all the changes on a line, type: U (capital U)
- To undo the undo's, type: CTRL-R
+ To undo the undos, type: CTRL-R
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lesson 3.1: THE PUT COMMAND
diff --git a/src/po/ca.po b/src/po/ca.po
index cf113a580..591b7bf54 100644
--- a/src/po/ca.po
+++ b/src/po/ca.po
@@ -7729,8 +7729,8 @@ msgstr "E1112: L'element de la llista %d no t una amplada vlida"
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: Intervals solapats per a 0x%lx"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: Noms es suporten valors de 0x100 o superiors"
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: Noms es suporten valors de 0x80 o superiors"
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr "E1115: el quart argument a \"assert_fails()\" ha de ser un nmero"
diff --git a/src/po/de.po b/src/po/de.po
index c223c57de..e2ed9143d 100644
--- a/src/po/de.po
+++ b/src/po/de.po
@@ -7836,8 +7836,8 @@ msgstr "E1112: Listenwert %d Zellbreite ungltig"
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: berlappender Bereich fr 0x%lx"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: Nur Werte oberhalb 0x100 untersttzt"
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: Nur Werte oberhalb 0x80 untersttzt"
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr "E1115: \"assert_fails()\" viertes Argument muss eine Zahl sein"
diff --git a/src/po/eo.po b/src/po/eo.po
index b4ac0700a..fc90f8cad 100644
--- a/src/po/eo.po
+++ b/src/po/eo.po
@@ -7346,8 +7346,8 @@ msgstr "E1110: Listero %d ne enhavas 3 nombojn"
msgid "E1111: List item %d range invalid"
msgstr "E1111: Listero %d havas nevalidan amplekson"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: Nur valoroj 0x100 kaj pli altaj estas subtenataj"
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: Nur valoroj 0x80 kaj pli altaj estas subtenataj"
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr "E1115: la 4-a argumento de \"assert_fails()\" devas esti nombro"
diff --git a/src/po/es.po b/src/po/es.po
index 9e2feb627..3cbafbb6a 100644
--- a/src/po/es.po
+++ b/src/po/es.po
@@ -7809,8 +7809,8 @@ msgstr "E1112: Elemento %d de lista, ancho de celda no válido"
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: Rangos superpuestos para 0x%lx"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: Solo se admiten valores de 0x100 y superiores"
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: Solo se admiten valores de 0x80 y superiores"
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr "E1115: El cuarto argumento \"assert_fails()\" debe ser un número"
diff --git a/src/po/fi.po b/src/po/fi.po
index 27f9a9f9b..569591d9f 100644
--- a/src/po/fi.po
+++ b/src/po/fi.po
@@ -7759,8 +7759,8 @@ msgstr "E1112: Listan kohdan %d soluleveys on viallinen"
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: Päällekkäiset arvoalueet osoitteessa 0x%lx"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: Vain arvot 0x100:sta eteenpäin kelpaavat"
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: Vain arvot 0x80:sta eteenpäin kelpaavat"
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr "E1115: assert_fails()-funktion neljännen argumentin tulee olla numero"
diff --git a/src/po/ga.po b/src/po/ga.po
index d0216fafd..4044c3eaa 100644
--- a/src/po/ga.po
+++ b/src/po/ga.po
@@ -7768,8 +7768,8 @@ msgstr "E1112: Leithead cille neamhbhail i mr %d sa liosta"
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: Raonta forluiteacha ar 0x%lx"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: N thacatear ach le luachanna 0x100 agus nos airde"
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: N thacatear ach le luachanna 0x80 agus nos airde"
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr "E1115: N mr don cheathr hargint ar \"assert_fails()\" a bheith ina huimhir"
diff --git a/src/po/it.po b/src/po/it.po
index 7a7bf9b34..3fe0d38e2 100644
--- a/src/po/it.po
+++ b/src/po/it.po
@@ -6995,8 +6995,8 @@ msgstr "E1112: Elemento di Lista %d con larghezza di cella non valida"
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: Intervalli sovrapposti per 0x%lx"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: Solo valori 0x100 o più elevati sono supportati"
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: Solo valori 0x80 o più elevati sono supportati"
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr "E1115: Il quarto argomento di \"assert_fails()\" dev'essere un Numero"
diff --git a/src/po/ja.euc-jp.po b/src/po/ja.euc-jp.po
index 089537966..3bec1d3a2 100644
--- a/src/po/ja.euc-jp.po
+++ b/src/po/ja.euc-jp.po
@@ -7702,8 +7702,8 @@ msgstr "E1112: ꥹȤ %d ΥǤ"
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: 0x%lx ϰϤʣƤޤ"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: 0x100 ʾͤݡȤƤޤ"
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: 0x80 ʾͤݡȤƤޤ"
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr "E1115: \"assert_fails()\" 4ϿǤʤФʤޤ"
diff --git a/src/po/ja.po b/src/po/ja.po
index fc783052e..c2432c9c7 100644
--- a/src/po/ja.po
+++ b/src/po/ja.po
@@ -7702,8 +7702,8 @@ msgstr "E1112: リストの要素 %d のセル幅が不正です"
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: 0x%lx の範囲が重複しています"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: 0x100 以上の値しかサポートされていません"
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: 0x80 以上の値しかサポートされていません"
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr "E1115: \"assert_fails()\" の第4引数は数字でなければなりません"
diff --git a/src/po/ja.sjis.po b/src/po/ja.sjis.po
index e7f7b08ae..f55497699 100644
--- a/src/po/ja.sjis.po
+++ b/src/po/ja.sjis.po
@@ -7702,8 +7702,8 @@ msgstr "E1112: Xg̗vf %d ̃Zsł"
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: 0x%lx ͈̔͂dĂ܂"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: 0x100 ȏ̒lT|[gĂ܂"
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: 0x80 ȏ̒lT|[gĂ܂"
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr "E1115: \"assert_fails()\" ̑4͐łȂ΂Ȃ܂"
diff --git a/src/po/ru.cp1251.po b/src/po/ru.cp1251.po
index a5eab01e2..5779ce4c0 100644
--- a/src/po/ru.cp1251.po
+++ b/src/po/ru.cp1251.po
@@ -7696,8 +7696,8 @@ msgstr "E1112: %d "
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: 0x%lx"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: 0x100 "
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: 0x80 "
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr ""
diff --git a/src/po/ru.po b/src/po/ru.po
index 15a011547..80b22933e 100644
--- a/src/po/ru.po
+++ b/src/po/ru.po
@@ -7696,8 +7696,8 @@ msgstr "E1112: Элемент %d в списке задаёт неправиль
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: Перекрывающиеся диапазоны для 0x%lx"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: Поддерживаются только значения от 0x100 и выше"
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: Поддерживаются только значения от 0x80 и выше"
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr ""
diff --git a/src/po/sr.po b/src/po/sr.po
index 693cf7634..aeed5d04d 100644
--- a/src/po/sr.po
+++ b/src/po/sr.po
@@ -10,16 +10,16 @@ msgid ""
msgstr ""
"Project-Id-Version: Vim(Serbian)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-11-25 15:38+0400\n"
-"PO-Revision-Date: 2022-11-25 15:40+0400\n"
+"POT-Creation-Date: 2023-02-02 10:20+0400\n"
+"PO-Revision-Date: 2023-02-02 10:54+0400\n"
"Last-Translator: Ivan Pešić <ivan.pesic@gmail.com>\n"
"Language-Team: Serbian\n"
"Language: sr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
msgid "ERROR: "
msgstr "ГРЕШКА: "
@@ -1817,8 +1817,8 @@ msgstr "-P <назив родитеља>\tОтвори Vim унутар роди
msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
msgstr "--windowid <HWND>\tОтвори Vim унутар другог win32 виџета"
-msgid "Seen modifyOtherKeys: true"
-msgstr "Уочено modifyOtherKeys: да"
+msgid "Seen modifyOtherKeys: true\n"
+msgstr "Уочено modifyOtherKeys: да\n"
msgid "Unknown"
msgstr "Непознато"
@@ -1836,8 +1836,12 @@ msgid "Cleared"
msgstr "Обрисано"
#, c-format
-msgid "Kitty keyboard protocol: %s"
-msgstr "Kitty протокол тастатуре: %s"
+msgid "modifyOtherKeys detected: %s\n"
+msgstr "Откривено modifyOtherKeys: %s\n"
+
+#, c-format
+msgid "Kitty keyboard protocol: %s\n"
+msgstr "Kitty протокол тастатуре: %s\n"
msgid "No abbreviation found"
msgstr "Скраћеница није пронађена"
@@ -7635,8 +7639,8 @@ msgstr "E1112: Ширина ћелије ставке листе %d је нев
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: Опсези за 0x%lx се преклапају"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: Подржавају се само вредности од 0x100 и веће"
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: Подржавају се само вредности од 0x80 и веће"
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr "E1115: „assert_fails()” четврти аргумент мора бити број"
@@ -8362,6 +8366,184 @@ msgstr "E1311: Током исписа не може да се врши изме
msgid "E1312: Not allowed to change the window layout in this autocmd"
msgstr "E1312: У овој аутокоманди није дозвољено мењање распореда прозора"
+#, c-format
+msgid "E1313: Not allowed to add or remove entries (%s)"
+msgstr "E1313: Није дозвољено додавање или уклањање ставки (%s)"
+
+#, c-format
+msgid "E1314: Class name must start with an uppercase letter: %s"
+msgstr "E1314: Име класе мора да почне великим словом: %s"
+
+#, c-format
+msgid "E1315: White space required after name: %s"
+msgstr "E1315: Након имена мора да стоји празан простор: %s"
+
+msgid "E1316: Class can only be defined in Vim9 script"
+msgstr "E1316: Класа може да се дефинише само у Vim9 скрипти"
+
+#, c-format
+msgid "E1317: Invalid object member declaration: %s"
+msgstr "E1317: Неисправна декларација члана објекта: %s"
+
+#, c-format
+msgid "E1318: Not a valid command in a class: %s"
+msgstr "E1318: Команда не важи у класи: %s"
+
+msgid "E1319: Using a class as a Number"
+msgstr "E1319: Класа се користи као Број"
+
+msgid "E1320: Using an object as a Number"
+msgstr "E1320: Објекат се користи као Број"
+
+msgid "E1321: Using a class as a Float"
+msgstr "E1321: Класа се користи као Покретни"
+
+msgid "E1322: Using an object as a Float"
+msgstr "E1322: Објекат се користи као Покретни"
+
+msgid "E1323: Using a class as a String"
+msgstr "E1323: Класа се користи као Стринг"
+
+msgid "E1324: Using an object as a String"
+msgstr "E1324: Објекат се користи као Стринг"
+
+#, c-format
+msgid "E1325: Method not found on class \"%s\": %s"
+msgstr "E1325: Није пронађена метода класе „%s”: %s"
+
+#, c-format
+msgid "E1326: Member not found on object \"%s\": %s"
+msgstr "E1326: Члан није пронађен у објекту „%s”: %s"
+
+#, c-format
+msgid "E1327: Object required, found %s"
+msgstr "E1327: Потребан је објекат, пронађено %s"
+
+#, c-format
+msgid "E1328: Constructor default value must be v:none: %s"
+msgstr "E1328: Подразумевана вредност конструктора мора бити v:none: %s"
+
+#, c-format
+msgid "E1329: Cannot get object member type from initializer: %s"
+msgstr "E1329: Тип члана објекта не може да се одреди из иницијализатора: %s"
+
+#, c-format
+msgid "E1330: Invalid type for object member: %s"
+msgstr "E1330: Неисправан тип члана објекта: %s"
+
+msgid "E1331: Public must be followed by \"this\" or \"static\""
+msgstr "E1331: Након Public мора да следи „this” или „static”"
+
+#, c-format
+msgid "E1332: Public member name cannot start with underscore: %s"
+msgstr "E1332: Име Public члана не може почити доњом цртом: %s"
+
+#, c-format
+msgid "E1333: Cannot access private member: %s"
+msgstr "E1333: Не може да се приступи приватном члану: %s"
+
+#, c-format
+msgid "E1334: Object member not found: %s"
+msgstr "E1334: Члан објекта није пронађен: %s"
+
+#, c-format
+msgid "E1335: Member is not writable: %s"
+msgstr "E1335: У члан не може да се уписује: %s"
+
+msgid "E1336: Internal error: shortmess too long"
+msgstr "E1336: Интерна грешка: shortmess сувише дугачко"
+
+#, c-format
+msgid "E1337: Class member not found: %s"
+msgstr "E1337: Није пронађен члан класе: %s"
+
+#, c-format
+msgid "E1338: Member not found on class \"%s\": %s"
+msgstr "E1338: Није шронаћен члан над класом „%s”: %s"
+
+msgid ""
+"E1339: Cannot add a textprop with text after using a textprop with a "
+"negative id"
+msgstr ""
+"E1339: Текст особина са текстом не може да се додан након употребе "
+"текст особине са негативним id"
+
+#, c-format
+msgid "E1340: Argument already declared in the class: %s"
+msgstr "E1340: Аргумент је већ дефинисан у класи: %s"
+
+#, c-format
+msgid "E1341: Variable already declared in the class: %s"
+msgstr "E1341: Променљива је већ декларисана у класи: %s"
+
+msgid "E1342: Interface can only be defined in Vim9 script"
+msgstr "E1342: Интерфејс може да се дефинише само у Vim9 скрипти"
+
+#, c-format
+msgid "E1343: Interface name must start with an uppercase letter: %s"
+msgstr "E1343: Име интерфејса мора да почне великим словом: %s"
+
+msgid "E1344: Cannot initialize a member in an interface"
+msgstr "E1344: Члан не може да се иницијализује у интерфејсу"
+
+#, c-format
+msgid "E1345: Not a valid command in an interface: %s"
+msgstr "E1345: Команда не важи у интерфејсу: %s"
+
+#, c-format
+msgid "E1346: Interface name not found: %s"
+msgstr "E1346: Није пронађено име интерфејса: %s"
+
+#, c-format
+msgid "E1347: Not a valid interface: %s"
+msgstr "E1347: Неважећи интерфејс: %s"
+
+#, c-format
+msgid "E1348: Member \"%s\" of interface \"%s\" not implemented"
+msgstr "E1348: Члан „%s” интерфејса „%s” није имплементиран"
+
+#, c-format
+msgid "E1349: Function \"%s\" of interface \"%s\" not implemented"
+msgstr "E1349: Функција „%s” интерфејса „%s” није имплементирана"
+
+msgid "E1350: Duplicate \"implements\""
+msgstr "E1350: Дупликат „implements”"
+
+#, c-format
+msgid "E1351: Duplicate interface after \"implements\": %s"
+msgstr "E1351: Дуплирани интерфејс након „implements”: %s"
+
+msgid "E1352: Duplicate \"extends\""
+msgstr "E1352: Дупликат „extends”"
+
+#, c-format
+msgid "E1353: Class name not found: %s"
+msgstr "E1353: Име класе није пронађено: %s"
+
+#, c-format
+msgid "E1354: Cannot extend %s"
+msgstr "E1354: Не може да се прошири %s"
+
+#, c-format
+msgid "E1355: Duplicate function: %s"
+msgstr "E1355: Дуплирана функција: %s"
+
+msgid "E1356: \"super\" must be followed by a dot"
+msgstr "E1356: Након „super” мора да следи тачка"
+
+msgid "E1357: Using \"super\" not in a class function"
+msgstr "E1357:„super” се користи ван функције класе"
+
+msgid "E1358: Using \"super\" not in a child class"
+msgstr "E1358: „super” се не користи у изведеној класи"
+
+msgid "E1359: Cannot define a \"new\" function in an abstract class"
+msgstr "E1359: Функција „new” не може да се дефинише у апстрактној класи"
+
+#, c-format
+msgid "E476: Invalid command: %s, expected %s"
+msgstr "E476: Неважећа команда: %s, очекује се %s"
+
msgid "--No lines in buffer--"
msgstr "--У баферу нема линија--"
@@ -8686,9 +8868,6 @@ msgstr "Уређујте текст фајлове"
msgid "Text;editor;"
msgstr "Текст;едитор;"
-msgid "gvim"
-msgstr "gvim"
-
msgid "Vim"
msgstr "Vim"
@@ -9360,8 +9539,11 @@ msgstr ""
msgid "list of flags to make messages shorter"
msgstr "листа заставица за скраћивање порука"
-msgid "show (partial) command keys in the status line"
-msgstr "у статусној линији се приказују (делимични) тастери команде"
+msgid "show (partial) command keys in location given by 'showcmdloc'"
+msgstr "приказује (делимичне) тастере команде на месту наведеном у 'showcmdloc'"
+
+msgid "location where to show the (partial) command keys for 'showcmd'"
+msgstr "место на којем треба да се прикажу (делимични) тастери команде за 'showcmd'"
msgid "display the current mode in the status line"
msgstr "у статусној линији се приказује текући режим"
diff --git a/src/po/tr.po b/src/po/tr.po
index c528a70ec..4df99ecfe 100644
--- a/src/po/tr.po
+++ b/src/po/tr.po
@@ -7562,8 +7562,8 @@ msgstr "E1112: Liste ögesi %d hücre genişliği geçersiz"
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: 0x%lx için üst üste binen erimler"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: Yalnızca 0x100 ve daha yüksek değerler destekleniyor"
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: Yalnızca 0x80 ve daha yüksek değerler destekleniyor"
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr "E1115: \"assert_fails()\" dördüncü argüman bir sayı olmalıdır"
diff --git a/src/po/uk.cp1251.po b/src/po/uk.cp1251.po
index 0958cd53f..9a79ef119 100644
--- a/src/po/uk.cp1251.po
+++ b/src/po/uk.cp1251.po
@@ -7869,8 +7869,8 @@ msgstr "E1112: %d "
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: 0x%lx"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: ϳ 0x100 "
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: ϳ 0x80 "
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr "E1115: assert_fails() "
diff --git a/src/po/uk.po b/src/po/uk.po
index 484b232bf..1019eb62c 100644
--- a/src/po/uk.po
+++ b/src/po/uk.po
@@ -7869,8 +7869,8 @@ msgstr "E1112: Ширина комірки елементу %d списку не
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: Перекриття діапазонів у 0x%lx"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: Підтримуються тільки значення 0x100 і вищі"
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: Підтримуються тільки значення 0x80 і вищі"
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr "E1115: Четвертий аргумент «assert_fails()» має бути числом"
diff --git a/src/po/zh_CN.UTF-8.po b/src/po/zh_CN.UTF-8.po
index 5b8998a9a..43ea1d35f 100644
--- a/src/po/zh_CN.UTF-8.po
+++ b/src/po/zh_CN.UTF-8.po
@@ -7511,8 +7511,8 @@ msgstr "E1112: 列表项 %d 单元格宽度无效"
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: 重叠范围为 0x%lx"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: 只支持 0x100 或更高的值"
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: 只支持 0x80 或更高的值"
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr "E1115: \"assert_fails()\" 第四个参数必须是一个整数"
diff --git a/src/po/zh_CN.cp936.po b/src/po/zh_CN.cp936.po
index f63c160fc..bbbe4f7f1 100644
--- a/src/po/zh_CN.cp936.po
+++ b/src/po/zh_CN.cp936.po
@@ -7511,8 +7511,8 @@ msgstr "E1112: б %d ԪЧ"
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: صΧΪ 0x%lx"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: ֻ֧ 0x100 ߵֵ"
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: ֻ֧ 0x80 ߵֵ"
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr "E1115: \"assert_fails()\" ĸһ"
diff --git a/src/po/zh_CN.po b/src/po/zh_CN.po
index 557755612..3d7b808f4 100644
--- a/src/po/zh_CN.po
+++ b/src/po/zh_CN.po
@@ -7511,8 +7511,8 @@ msgstr "E1112: б %d ԪЧ"
msgid "E1113: Overlapping ranges for 0x%lx"
msgstr "E1113: صΧΪ 0x%lx"
-msgid "E1114: Only values of 0x100 and higher supported"
-msgstr "E1114: ֻ֧ 0x100 ߵֵ"
+msgid "E1114: Only values of 0x80 and higher supported"
+msgstr "E1114: ֻ֧ 0x80 ߵֵ"
msgid "E1115: \"assert_fails()\" fourth argument must be a number"
msgstr "E1115: \"assert_fails()\" ĸһ"