diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim
index 5d8734a..1b32115 100644
--- a/runtime/autoload/dist/ft.vim
+++ b/runtime/autoload/dist/ft.vim
@@ -1,89 +1,83 @@
-" Vim functions for file type detection
-"
-" Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2022 Jan 31
+vim9script
 
-" These functions are moved here from runtime/filetype.vim to make startup
-" faster.
+# Vim functions for file type detection
+#
+# Maintainer:	Bram Moolenaar <Bram@vim.org>
+# Last Change:	2022 Feb 04
 
-" Line continuation is used here, remove 'C' from 'cpoptions'
-let s:cpo_save = &cpo
-set cpo&vim
+# These functions are moved here from runtime/filetype.vim to make startup
+# faster.
 
-func dist#ft#Check_inp()
+export def Check_inp()
   if getline(1) =~ '^\*'
     setf abaqus
   else
-    let n = 1
-    if line("$") > 500
-      let nmax = 500
-    else
-      let nmax = line("$")
-    endif
+    var n = 1
+    var nmax = line("$") > 500 ? 500 : line("$")
     while n <= nmax
       if getline(n) =~? "^header surface data"
 	setf trasys
 	break
       endif
-      let n = n + 1
+      n += 1
     endwhile
   endif
-endfunc
+enddef
 
-" This function checks for the kind of assembly that is wanted by the user, or
-" can be detected from the first five lines of the file.
-func dist#ft#FTasm()
-  " make sure b:asmsyntax exists
+# This function checks for the kind of assembly that is wanted by the user, or
+# can be detected from the first five lines of the file.
+export def FTasm()
+  # make sure b:asmsyntax exists
   if !exists("b:asmsyntax")
-    let b:asmsyntax = ""
+    b:asmsyntax = ""
   endif
 
   if b:asmsyntax == ""
-    call dist#ft#FTasmsyntax()
+    FTasmsyntax()
   endif
 
-  " if b:asmsyntax still isn't set, default to asmsyntax or GNU
+  # if b:asmsyntax still isn't set, default to asmsyntax or GNU
   if b:asmsyntax == ""
     if exists("g:asmsyntax")
-      let b:asmsyntax = g:asmsyntax
+      b:asmsyntax = g:asmsyntax
     else
-      let b:asmsyntax = "asm"
+      b:asmsyntax = "asm"
     endif
   endif
 
-  exe "setf " . fnameescape(b:asmsyntax)
-endfunc
+  exe "setf " .. fnameescape(b:asmsyntax)
+enddef
 
-func dist#ft#FTasmsyntax()
-  " see if file contains any asmsyntax=foo overrides. If so, change
-  " b:asmsyntax appropriately
-  let head = " ".getline(1)." ".getline(2)." ".getline(3)." ".getline(4).
-	\" ".getline(5)." "
-  let match = matchstr(head, '\sasmsyntax=\zs[a-zA-Z0-9]\+\ze\s')
+export def FTasmsyntax()
+  # see if the file contains any asmsyntax=foo overrides. If so, change
+  # b:asmsyntax appropriately
+  var head = " " .. getline(1) .. " " .. getline(2) .. " "
+	.. getline(3) .. " " .. getline(4) ..  " " .. getline(5) .. " "
+  var match = matchstr(head, '\sasmsyntax=\zs[a-zA-Z0-9]\+\ze\s')
   if match != ''
-    let b:asmsyntax = match
+    b:asmsyntax = match
   elseif ((head =~? '\.title') || (head =~? '\.ident') || (head =~? '\.macro') || (head =~? '\.subtitle') || (head =~? '\.library'))
-    let b:asmsyntax = "vmasm"
+    b:asmsyntax = "vmasm"
   endif
-endfunc
+enddef
 
-let s:ft_visual_basic_content = '\cVB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)'
+var ft_visual_basic_content = '\cVB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)'
 
-" See FTfrm() for Visual Basic form file detection
-func dist#ft#FTbas()
+# See FTfrm() for Visual Basic form file detection
+export def FTbas()
   if exists("g:filetype_bas")
-    exe "setf " . g:filetype_bas
+    exe "setf " .. g:filetype_bas
     return
   endif
 
-  " most frequent FreeBASIC-specific keywords in distro files
-  let fb_keywords = '\c^\s*\%(extern\|var\|enum\|private\|scope\|union\|byref\|operator\|constructor\|delete\|namespace\|public\|property\|with\|destructor\|using\)\>\%(\s*[:=(]\)\@!'
-  let fb_preproc  = '\c^\s*\%(#\a\+\|option\s\+\%(byval\|dynamic\|escape\|\%(no\)\=gosub\|nokeyword\|private\|static\)\>\)'
-  let fb_comment  = "^\\s*/'"
-  " OPTION EXPLICIT, without the leading underscore, is common to many dialects
-  let qb64_preproc = '\c^\s*\%($\a\+\|option\s\+\%(_explicit\|_\=explicitarray\)\>\)'
+  # most frequent FreeBASIC-specific keywords in distro files
+  var fb_keywords = '\c^\s*\%(extern\|var\|enum\|private\|scope\|union\|byref\|operator\|constructor\|delete\|namespace\|public\|property\|with\|destructor\|using\)\>\%(\s*[:=(]\)\@!'
+  var fb_preproc  = '\c^\s*\%(#\a\+\|option\s\+\%(byval\|dynamic\|escape\|\%(no\)\=gosub\|nokeyword\|private\|static\)\>\)'
+  var fb_comment  = "^\\s*/'"
+  # OPTION EXPLICIT, without the leading underscore, is common to many dialects
+  var qb64_preproc = '\c^\s*\%($\a\+\|option\s\+\%(_explicit\|_\=explicitarray\)\>\)'
 
-  let lines = getline(1, min([line("$"), 100]))
+  var lines = getline(1, min([line("$"), 100]))
 
   if match(lines, fb_preproc) > -1 || match(lines, fb_comment) > -1 || match(lines, fb_keywords) > -1
     setf freebasic
@@ -94,39 +88,40 @@
   else
     setf basic
   endif
-endfunc
+enddef
 
-func dist#ft#FTbtm()
+export def FTbtm()
   if exists("g:dosbatch_syntax_for_btm") && g:dosbatch_syntax_for_btm
     setf dosbatch
   else
     setf btm
   endif
-endfunc
+enddef
 
-func dist#ft#BindzoneCheck(default)
-  if getline(1).getline(2).getline(3).getline(4) =~ '^; <<>> DiG [0-9.]\+.* <<>>\|$ORIGIN\|$TTL\|IN\s\+SOA'
+export def BindzoneCheck(default = '')
+  if getline(1) .. getline(2) .. getline(3) .. getline(4)
+	  =~ '^; <<>> DiG [0-9.]\+.* <<>>\|$ORIGIN\|$TTL\|IN\s\+SOA'
     setf bindzone
-  elseif a:default != ''
-    exe 'setf ' . a:default
+  elseif default != ''
+    exe 'setf ' .. default
   endif
-endfunc
+enddef
 
-func dist#ft#FTlpc()
+export def FTlpc()
   if exists("g:lpc_syntax_for_c")
-    let lnum = 1
+    var lnum = 1
     while lnum <= 12
       if getline(lnum) =~# '^\(//\|inherit\|private\|protected\|nosave\|string\|object\|mapping\|mixed\)'
 	setf lpc
 	return
       endif
-      let lnum = lnum + 1
+      lnum += 1
     endwhile
   endif
   setf c
-endfunc
+enddef
 
-func dist#ft#FTheader()
+export def FTheader()
   if match(getline(1, min([line("$"), 200])), '^@\(interface\|end\|class\)') > -1
     if exists("g:c_syntax_for_h")
       setf objc
@@ -140,15 +135,15 @@
   else
     setf cpp
   endif
-endfunc
+enddef
 
-" This function checks if one of the first ten lines start with a '@'.  In
-" that case it is probably a change file.
-" If the first line starts with # or ! it's probably a ch file.
-" If a line has "main", "include", "//" or "/*" it's probably ch.
-" Otherwise CHILL is assumed.
-func dist#ft#FTchange()
-  let lnum = 1
+# This function checks if one of the first ten lines start with a '@'.  In
+# that case it is probably a change file.
+# If the first line starts with # or ! it's probably a ch file.
+# If a line has "main", "include", "//" or "/*" it's probably ch.
+# Otherwise CHILL is assumed.
+export def FTchange()
+  var lnum = 1
   while lnum <= 10
     if getline(lnum)[0] == '@'
       setf change
@@ -166,101 +161,101 @@
       setf ch
       return
     endif
-    let lnum = lnum + 1
+    lnum += 1
   endwhile
   setf chill
-endfunc
+enddef
 
-func dist#ft#FTent()
-  " This function checks for valid cl syntax in the first five lines.
-  " Look for either an opening comment, '#', or a block start, '{".
-  " If not found, assume SGML.
-  let lnum = 1
+export def FTent()
+  # This function checks for valid cl syntax in the first five lines.
+  # Look for either an opening comment, '#', or a block start, '{".
+  # If not found, assume SGML.
+  var lnum = 1
   while lnum < 6
-    let line = getline(lnum)
+    var line = getline(lnum)
     if line =~ '^\s*[#{]'
       setf cl
       return
     elseif line !~ '^\s*$'
-      " Not a blank line, not a comment, and not a block start,
-      " so doesn't look like valid cl code.
+      # Not a blank line, not a comment, and not a block start,
+      # so doesn't look like valid cl code.
       break
     endif
-    let lnum = lnum + 1
+    lnum += 1
   endw
   setf dtd
-endfunc
+enddef
 
-func dist#ft#ExCheck()
-  let lines = getline(1, min([line("$"), 100]))
+export def ExCheck()
+  var lines = getline(1, min([line("$"), 100]))
   if exists('g:filetype_euphoria')
-    exe 'setf ' . g:filetype_euphoria
+    exe 'setf ' .. g:filetype_euphoria
   elseif match(lines, '^--\|^ifdef\>\|^include\>') > -1
     setf euphoria3
   else
     setf elixir
   endif
-endfunc
+enddef
 
-func dist#ft#EuphoriaCheck()
+export def EuphoriaCheck()
   if exists('g:filetype_euphoria')
-    exe 'setf ' . g:filetype_euphoria
+    exe 'setf ' .. g:filetype_euphoria
   else
     setf euphoria3
   endif
-endfunc
+enddef
 
-func dist#ft#DtraceCheck()
-  let lines = getline(1, min([line("$"), 100]))
+export def DtraceCheck()
+  var lines = getline(1, min([line("$"), 100]))
   if match(lines, '^module\>\|^import\>') > -1
-    " D files often start with a module and/or import statement.
+    # D files often start with a module and/or import statement.
     setf d
   elseif match(lines, '^#!\S\+dtrace\|#pragma\s\+D\s\+option\|:\S\{-}:\S\{-}:') > -1
     setf dtrace
   else
     setf d
   endif
-endfunc
+enddef
 
-func dist#ft#FTe()
+export def FTe()
   if exists('g:filetype_euphoria')
-    exe 'setf ' . g:filetype_euphoria
+    exe 'setf ' .. g:filetype_euphoria
   else
-    let n = 1
+    var n = 1
     while n < 100 && n <= line("$")
       if getline(n) =~ "^\\s*\\(<'\\|'>\\)\\s*$"
 	setf specman
 	return
       endif
-      let n = n + 1
+      n += 1
     endwhile
     setf eiffel
   endif
-endfunc
+enddef
 
-func dist#ft#FTfrm()
+export def FTfrm()
   if exists("g:filetype_frm")
-    exe "setf " . g:filetype_frm
+    exe "setf " .. g:filetype_frm
     return
   endif
 
-  let lines = getline(1, min([line("$"), 5]))
+  var lines = getline(1, min([line("$"), 5]))
 
   if match(lines, s:ft_visual_basic_content) > -1
     setf vb
   else
     setf form
   endif
-endfunc
+enddef
 
-" Distinguish between Forth and F#.
-" Provided by Doug Kearns.
-func dist#ft#FTfs()
+# Distinguish between Forth and F#.
+# Provided by Doug Kearns.
+export def FTfs()
   if exists("g:filetype_fs")
-    exe "setf " . g:filetype_fs
+    exe "setf " .. g:filetype_fs
   else
-    let line = getline(nextnonblank(1))
-    " comments and colon definitions
+    var line = getline(nextnonblank(1))
+    # comments and colon definitions
     if line =~ '^\s*\.\=( ' || line =~ '^\s*\\G\= ' || line =~ '^\\$'
 	  \ || line =~ '^\s*: \S'
       setf forth
@@ -268,11 +263,11 @@
       setf fsharp
     endif
   endif
-endfunc
+enddef
 
-" Distinguish between HTML, XHTML and Django
-func dist#ft#FThtml()
-  let n = 1
+# Distinguish between HTML, XHTML and Django
+export def FThtml()
+  var n = 1
   while n < 10 && n <= line("$")
     if getline(n) =~ '\<DTD\s\+XHTML\s'
       setf xhtml
@@ -282,58 +277,58 @@
       setf htmldjango
       return
     endif
-    let n = n + 1
+    n += 1
   endwhile
   setf FALLBACK html
-endfunc
+enddef
 
-" Distinguish between standard IDL and MS-IDL
-func dist#ft#FTidl()
-  let n = 1
+# Distinguish between standard IDL and MS-IDL
+export def FTidl()
+  var n = 1
   while n < 50 && n <= line("$")
     if getline(n) =~ '^\s*import\s\+"\(unknwn\|objidl\)\.idl"'
       setf msidl
       return
     endif
-    let n = n + 1
+    n += 1
   endwhile
   setf idl
-endfunc
+enddef
 
-" Distinguish between "default" and Cproto prototype file. */
-func dist#ft#ProtoCheck(default)
-  " Cproto files have a comment in the first line and a function prototype in
-  " the second line, it always ends in ";".  Indent files may also have
-  " comments, thus we can't match comments to see the difference.
-  " IDL files can have a single ';' in the second line, require at least one
-  " chacter before the ';'.
+# Distinguish between "default" and Cproto prototype file. */
+export def ProtoCheck(default: string)
+  # Cproto files have a comment in the first line and a function prototype in
+  # the second line, it always ends in ";".  Indent files may also have
+  # comments, thus we can't match comments to see the difference.
+  # IDL files can have a single ';' in the second line, require at least one
+  # chacter before the ';'.
   if getline(2) =~ '.;$'
     setf cpp
   else
-    exe 'setf ' . a:default
+    exe 'setf ' .. default
   endif
-endfunc
+enddef
 
-func dist#ft#FTm()
+export def FTm()
   if exists("g:filetype_m")
-    exe "setf " . g:filetype_m
+    exe "setf " .. g:filetype_m
     return
   endif
 
-  " excluding end(for|function|if|switch|while) common to Murphi
-  let octave_block_terminators = '\<end\%(_try_catch\|classdef\|enumeration\|events\|methods\|parfor\|properties\)\>'
+  # excluding end(for|function|if|switch|while) common to Murphi
+  var octave_block_terminators = '\<end\%(_try_catch\|classdef\|enumeration\|events\|methods\|parfor\|properties\)\>'
 
-  let objc_preprocessor = '^\s*#\s*\%(import\|include\|define\|if\|ifn\=def\|undef\|line\|error\|pragma\)\>'
+  var objc_preprocessor = '^\s*#\s*\%(import\|include\|define\|if\|ifn\=def\|undef\|line\|error\|pragma\)\>'
 
-  let n = 1
-  let saw_comment = 0 " Whether we've seen a multiline comment leader.
+  var n = 1
+  var saw_comment = 0  # Whether we've seen a multiline comment leader.
   while n < 100
-    let line = getline(n)
+    var line = getline(n)
     if line =~ '^\s*/\*'
-      " /* ... */ is a comment in Objective C and Murphi, so we can't conclude
-      " it's either of them yet, but track this as a hint in case we don't see
-      " anything more definitive.
-      let saw_comment = 1
+      # /* ... */ is a comment in Objective C and Murphi, so we can't conclude
+      # it's either of them yet, but track this as a hint in case we don't see
+      # anything more definitive.
+      saw_comment = 1
     endif
     if line =~ '^\s*//' || line =~ '^\s*@import\>' || line =~ objc_preprocessor
       setf objc
@@ -344,7 +339,7 @@
       setf octave
       return
     endif
-    " TODO: could be Matlab or Octave
+    # TODO: could be Matlab or Octave
     if line =~ '^\s*%'
       setf matlab
       return
@@ -357,24 +352,24 @@
       setf murphi
       return
     endif
-    let n = n + 1
+    n += 1
   endwhile
 
   if saw_comment
-    " We didn't see anything definitive, but this looks like either Objective C
-    " or Murphi based on the comment leader. Assume the former as it is more
-    " common.
+    # We didn't see anything definitive, but this looks like either Objective C
+    # or Murphi based on the comment leader. Assume the former as it is more
+    # common.
     setf objc
   else
-    " Default is Matlab
+    # Default is Matlab
     setf matlab
   endif
-endfunc
+enddef
 
-func dist#ft#FTmms()
-  let n = 1
+export def FTmms()
+  var n = 1
   while n < 20
-    let line = getline(n)
+    var line = getline(n)
     if line =~ '^\s*\(%\|//\)' || line =~ '^\*'
       setf mmix
       return
@@ -383,78 +378,78 @@
       setf make
       return
     endif
-    let n = n + 1
+    n += 1
   endwhile
   setf mmix
-endfunc
+enddef
 
-" This function checks if one of the first five lines start with a dot.  In
-" that case it is probably an nroff file: 'filetype' is set and 1 is returned.
-func dist#ft#FTnroff()
-  if getline(1)[0] . getline(2)[0] . getline(3)[0] . getline(4)[0] . getline(5)[0] =~ '\.'
+# This function checks if one of the first five lines start with a dot.  In
+# that case it is probably an nroff file: 'filetype' is set and 1 is returned.
+export def FTnroff(): number
+  if getline(1)[0] .. getline(2)[0] .. getline(3)[0]
+    			.. getline(4)[0] .. getline(5)[0] =~ '\.'
     setf nroff
     return 1
   endif
   return 0
-endfunc
+enddef
 
-func dist#ft#FTmm()
-  let n = 1
+export def FTmm()
+  var n = 1
   while n < 20
-    let line = getline(n)
-    if line =~ '^\s*\(#\s*\(include\|import\)\>\|@import\>\|/\*\)'
+    if getline(n) =~ '^\s*\(#\s*\(include\|import\)\>\|@import\>\|/\*\)'
       setf objcpp
       return
     endif
-    let n = n + 1
+    n += 1
   endwhile
   setf nroff
-endfunc
+enddef
 
-func dist#ft#FTpl()
+export def FTpl()
   if exists("g:filetype_pl")
-    exe "setf " . g:filetype_pl
+    exe "setf " .. g:filetype_pl
   else
-    " recognize Prolog by specific text in the first non-empty line
-    " require a blank after the '%' because Perl uses "%list" and "%translate"
-    let l = getline(nextnonblank(1))
+    # recognize Prolog by specific text in the first non-empty line
+    # require a blank after the '%' because Perl uses "%list" and "%translate"
+    var l = getline(nextnonblank(1))
     if l =~ '\<prolog\>' || l =~ '^\s*\(%\+\(\s\|$\)\|/\*\)' || l =~ ':-'
       setf prolog
     else
       setf perl
     endif
   endif
-endfunc
+enddef
 
-func dist#ft#FTinc()
+export def FTinc()
   if exists("g:filetype_inc")
-    exe "setf " . g:filetype_inc
+    exe "setf " .. g:filetype_inc
   else
-    let lines = getline(1).getline(2).getline(3)
+    var lines = getline(1) .. getline(2) .. getline(3)
     if lines =~? "perlscript"
       setf aspperl
     elseif lines =~ "<%"
       setf aspvbs
     elseif lines =~ "<?"
       setf php
-    " Pascal supports // comments but they're vary rarely used for file
-    " headers so assume POV-Ray
+    # Pascal supports // comments but they're vary rarely used for file
+    # headers so assume POV-Ray
     elseif lines =~ '^\s*\%({\|(\*\)' || lines =~? s:ft_pascal_keywords
       setf pascal
     else
-      call dist#ft#FTasmsyntax()
+      FTasmsyntax()
       if exists("b:asmsyntax")
-	exe "setf " . fnameescape(b:asmsyntax)
+	exe "setf " .. fnameescape(b:asmsyntax)
       else
 	setf pov
       endif
     endif
   endif
-endfunc
+enddef
 
-func dist#ft#FTprogress_cweb()
+export def FTprogress_cweb()
   if exists("g:filetype_w")
-    exe "setf " . g:filetype_w
+    exe "setf " .. g:filetype_w
     return
   endif
   if getline(1) =~ '&ANALYZE' || getline(3) =~ '&GLOBAL-DEFINE'
@@ -462,76 +457,76 @@
   else
     setf cweb
   endif
-endfunc
+enddef
 
-func dist#ft#FTprogress_asm()
+export def FTprogress_asm()
   if exists("g:filetype_i")
-    exe "setf " . g:filetype_i
+    exe "setf " .. g:filetype_i
     return
   endif
-  " This function checks for an assembly comment the first ten lines.
-  " If not found, assume Progress.
-  let lnum = 1
+  # This function checks for an assembly comment the first ten lines.
+  # If not found, assume Progress.
+  var lnum = 1
   while lnum <= 10 && lnum < line('$')
-    let line = getline(lnum)
+    var line = getline(lnum)
     if line =~ '^\s*;' || line =~ '^\*'
-      call dist#ft#FTasm()
+      FTasm()
       return
     elseif line !~ '^\s*$' || line =~ '^/\*'
-      " Not an empty line: Doesn't look like valid assembly code.
-      " Or it looks like a Progress /* comment
+      # Not an empty line: Doesn't look like valid assembly code.
+      # Or it looks like a Progress /* comment
       break
     endif
-    let lnum = lnum + 1
+    lnum += 1
   endw
   setf progress
-endfunc
+enddef
 
-let s:ft_pascal_comments = '^\s*\%({\|(\*\|//\)'
-let s:ft_pascal_keywords = '^\s*\%(program\|unit\|library\|uses\|begin\|procedure\|function\|const\|type\|var\)\>'
+var ft_pascal_comments = '^\s*\%({\|(\*\|//\)'
+var ft_pascal_keywords = '^\s*\%(program\|unit\|library\|uses\|begin\|procedure\|function\|const\|type\|var\)\>'
 
-func dist#ft#FTprogress_pascal()
+export def FTprogress_pascal()
   if exists("g:filetype_p")
-    exe "setf " . g:filetype_p
+    exe "setf " .. g:filetype_p
     return
   endif
-  " This function checks for valid Pascal syntax in the first ten lines.
-  " Look for either an opening comment or a program start.
-  " If not found, assume Progress.
-  let lnum = 1
+  # This function checks for valid Pascal syntax in the first ten lines.
+  # Look for either an opening comment or a program start.
+  # If not found, assume Progress.
+  var lnum = 1
   while lnum <= 10 && lnum < line('$')
-    let line = getline(lnum)
+    var line = getline(lnum)
     if line =~ s:ft_pascal_comments || line =~? s:ft_pascal_keywords
       setf pascal
       return
     elseif line !~ '^\s*$' || line =~ '^/\*'
-      " Not an empty line: Doesn't look like valid Pascal code.
-      " Or it looks like a Progress /* comment
+      # Not an empty line: Doesn't look like valid Pascal code.
+      # Or it looks like a Progress /* comment
       break
     endif
-    let lnum = lnum + 1
+    lnum += 1
   endw
   setf progress
-endfunc
+enddef
 
-func dist#ft#FTpp()
+export def FTpp()
   if exists("g:filetype_pp")
-    exe "setf " . g:filetype_pp
+    exe "setf " .. g:filetype_pp
   else
-    let line = getline(nextnonblank(1))
+    var line = getline(nextnonblank(1))
     if line =~ s:ft_pascal_comments || line =~? s:ft_pascal_keywords
       setf pascal
     else
       setf puppet
     endif
   endif
-endfunc
+enddef
 
-func dist#ft#FTr()
-  let max = line("$") > 50 ? 50 : line("$")
+export def FTr()
+  var max = line("$") > 50 ? 50 : line("$")
 
   for n in range(1, max)
-    " Rebol is easy to recognize, check for that first
+    # Rebol is easy to recognize, check for that first
     if getline(n) =~? '\<REBOL\>'
       setf rebol
       return
@@ -539,82 +534,82 @@
   endfor
 
   for n in range(1, max)
-    " R has # comments
+    # R has # comments
     if getline(n) =~ '^\s*#'
       setf r
       return
     endif
-    " Rexx has /* comments */
+    # Rexx has /* comments */
     if getline(n) =~ '^\s*/\*'
       setf rexx
       return
     endif
   endfor
 
-  " Nothing recognized, use user default or assume Rexx
+  # Nothing recognized, use user default or assume Rexx
   if exists("g:filetype_r")
-    exe "setf " . g:filetype_r
+    exe "setf " .. g:filetype_r
   else
-    " Rexx used to be the default, but R appears to be much more popular.
+    # Rexx used to be the default, but R appears to be much more popular.
     setf r
   endif
-endfunc
+enddef
 
-func dist#ft#McSetf()
-  " Rely on the file to start with a comment.
-  " MS message text files use ';', Sendmail files use '#' or 'dnl'
+export def McSetf()
+  # Rely on the file to start with a comment.
+  # MS message text files use ';', Sendmail files use '#' or 'dnl'
   for lnum in range(1, min([line("$"), 20]))
-    let line = getline(lnum)
+    var line = getline(lnum)
     if line =~ '^\s*\(#\|dnl\)'
-      setf m4  " Sendmail .mc file
+      setf m4  # Sendmail .mc file
       return
     elseif line =~ '^\s*;'
-      setf msmessages  " MS Message text file
+      setf msmessages  # MS Message text file
       return
     endif
   endfor
   setf m4  " Default: Sendmail .mc file
-endfunc
+enddef
 
-" Called from filetype.vim and scripts.vim.
-func dist#ft#SetFileTypeSH(name)
+# Called from filetype.vim and scripts.vim.
+export def SetFileTypeSH(name: string)
   if did_filetype()
-    " Filetype was already detected
+    # Filetype was already detected
     return
   endif
   if expand("<amatch>") =~ g:ft_ignore_pat
     return
   endif
-  if a:name =~ '\<csh\>'
-    " Some .sh scripts contain #!/bin/csh.
-    call dist#ft#SetFileTypeShell("csh")
+  if name =~ '\<csh\>'
+    # Some .sh scripts contain #!/bin/csh.
+    SetFileTypeShell("csh")
     return
-  elseif a:name =~ '\<tcsh\>'
-    " Some .sh scripts contain #!/bin/tcsh.
-    call dist#ft#SetFileTypeShell("tcsh")
+  elseif name =~ '\<tcsh\>'
+    # Some .sh scripts contain #!/bin/tcsh.
+    SetFileTypeShell("tcsh")
     return
-  elseif a:name =~ '\<zsh\>'
-    " Some .sh scripts contain #!/bin/zsh.
-    call dist#ft#SetFileTypeShell("zsh")
+  elseif name =~ '\<zsh\>'
+    # Some .sh scripts contain #!/bin/zsh.
+    SetFileTypeShell("zsh")
     return
-  elseif a:name =~ '\<ksh\>'
-    let b:is_kornshell = 1
+  elseif name =~ '\<ksh\>'
+    b:is_kornshell = 1
     if exists("b:is_bash")
       unlet b:is_bash
     endif
     if exists("b:is_sh")
       unlet b:is_sh
     endif
-  elseif exists("g:bash_is_sh") || a:name =~ '\<bash\>' || a:name =~ '\<bash2\>'
-    let b:is_bash = 1
+  elseif exists("g:bash_is_sh") || name =~ '\<bash\>' || name =~ '\<bash2\>'
+    b:is_bash = 1
     if exists("b:is_kornshell")
       unlet b:is_kornshell
     endif
     if exists("b:is_sh")
       unlet b:is_sh
     endif
-  elseif a:name =~ '\<sh\>'
-    let b:is_sh = 1
+  elseif name =~ '\<sh\>'
+    b:is_sh = 1
     if exists("b:is_kornshell")
       unlet b:is_kornshell
     endif
@@ -622,75 +617,76 @@
       unlet b:is_bash
     endif
   endif
-  call dist#ft#SetFileTypeShell("sh")
-endfunc
+  SetFileTypeShell("sh")
+enddef
 
-" For shell-like file types, check for an "exec" command hidden in a comment,
-" as used for Tcl.
-" Also called from scripts.vim, thus can't be local to this script.
-func dist#ft#SetFileTypeShell(name)
+# For shell-like file types, check for an "exec" command hidden in a comment,
+# as used for Tcl.
+# Also called from scripts.vim, thus can't be local to this script.
+export def SetFileTypeShell(name: string)
   if did_filetype()
-    " Filetype was already detected
+    # Filetype was already detected
     return
   endif
   if expand("<amatch>") =~ g:ft_ignore_pat
     return
   endif
-  let l = 2
+  var l = 2
   while l < 20 && l < line("$") && getline(l) =~ '^\s*\(#\|$\)'
-    " Skip empty and comment lines.
-    let l = l + 1
+    # Skip empty and comment lines.
+    l += 1
   endwhile
   if l < line("$") && getline(l) =~ '\s*exec\s' && getline(l - 1) =~ '^\s*#.*\\$'
-    " Found an "exec" line after a comment with continuation
-    let n = substitute(getline(l),'\s*exec\s\+\([^ ]*/\)\=', '', '')
+    # Found an "exec" line after a comment with continuation
+    var n = substitute(getline(l), '\s*exec\s\+\([^ ]*/\)\=', '', '')
     if n =~ '\<tclsh\|\<wish'
       setf tcl
       return
     endif
   endif
-  exe "setf " . a:name
-endfunc
+  exe "setf " .. name
+enddef
 
-func dist#ft#CSH()
+export def CSH()
   if did_filetype()
-    " Filetype was already detected
+    # Filetype was already detected
     return
   endif
   if exists("g:filetype_csh")
-    call dist#ft#SetFileTypeShell(g:filetype_csh)
+    SetFileTypeShell(g:filetype_csh)
   elseif &shell =~ "tcsh"
-    call dist#ft#SetFileTypeShell("tcsh")
+    SetFileTypeShell("tcsh")
   else
-    call dist#ft#SetFileTypeShell("csh")
+    SetFileTypeShell("csh")
   endif
-endfunc
+enddef
 
-let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*'
-func dist#ft#FTRules()
-  let path = expand('<amatch>:p')
+var ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*'
+export def FTRules()
+  var path = expand('<amatch>:p')
   if path =~ '/\(etc/udev/\%(rules\.d/\)\=.*\.rules\|\%(usr/\)\=lib/udev/\%(rules\.d/\)\=.*\.rules\)$'
     setf udevrules
     return
   endif
   if path =~ '^/etc/ufw/'
-    setf conf  " Better than hog
+    setf conf  # Better than hog
     return
   endif
   if path =~ '^/\(etc\|usr/share\)/polkit-1/rules\.d'
     setf javascript
     return
   endif
+  var config_lines: list<string>
   try
-    let config_lines = readfile('/etc/udev/udev.conf')
+    config_lines = readfile('/etc/udev/udev.conf')
   catch /^Vim\%((\a\+)\)\=:E484/
     setf hog
     return
   endtry
-  let dir = expand('<amatch>:p:h')
+  var dir = expand('<amatch>:p:h')
   for line in config_lines
     if line =~ s:ft_rules_udev_rules_pattern
-      let udev_rules = substitute(line, s:ft_rules_udev_rules_pattern, '\1', "")
+      var udev_rules = substitute(line, s:ft_rules_udev_rules_pattern, '\1', "")
       if dir == udev_rules
 	setf udevrules
       endif
@@ -698,24 +694,24 @@
     endif
   endfor
   setf hog
-endfunc
+enddef
 
-func dist#ft#SQL()
+export def SQL()
   if exists("g:filetype_sql")
-    exe "setf " . g:filetype_sql
+    exe "setf " .. g:filetype_sql
   else
     setf sql
   endif
-endfunc
+enddef
 
-" If the file has an extension of 't' and is in a directory 't' or 'xt' then
-" it is almost certainly a Perl test file.
-" If the first line starts with '#' and contains 'perl' it's probably a Perl
-" file.
-" (Slow test) If a file contains a 'use' statement then it is almost certainly
-" a Perl file.
-func dist#ft#FTperl()
-  let dirname = expand("%:p:h:t")
+# If the file has an extension of 't' and is in a directory 't' or 'xt' then
+# it is almost certainly a Perl test file.
+# If the first line starts with '#' and contains 'perl' it's probably a Perl
+# file.
+# (Slow test) If a file contains a 'use' statement then it is almost certainly
+# a Perl file.
+export def FTperl(): number
+  var dirname = expand("%:p:h:t")
   if expand("%:e") == 't' && (dirname == 't' || dirname == 'xt')
     setf perl
     return 1
@@ -724,86 +720,87 @@
     setf perl
     return 1
   endif
-  let save_cursor = getpos('.')
-  call cursor(1,1)
-  let has_use = search('^use\s\s*\k', 'c', 30)
+  var save_cursor = getpos('.')
+  call cursor(1, 1)
+  var has_use = search('^use\s\s*\k', 'c', 30)
   call setpos('.', save_cursor)
   if has_use
     setf perl
     return 1
   endif
   return 0
-endfunc
+enddef
 
-" Choose context, plaintex, or tex (LaTeX) based on these rules:
-" 1. Check the first line of the file for "%&<format>".
-" 2. Check the first 1000 non-comment lines for LaTeX or ConTeXt keywords.
-" 3. Default to "plain" or to g:tex_flavor, can be set in user's vimrc.
-func dist#ft#FTtex()
-  let firstline = getline(1)
+# Choose context, plaintex, or tex (LaTeX) based on these rules:
+# 1. Check the first line of the file for "%&<format>".
+# 2. Check the first 1000 non-comment lines for LaTeX or ConTeXt keywords.
+# 3. Default to "plain" or to g:tex_flavor, can be set in user's vimrc.
+export def FTtex()
+  var firstline = getline(1)
+  var format: string
   if firstline =~ '^%&\s*\a\+'
-    let format = tolower(matchstr(firstline, '\a\+'))
-    let format = substitute(format, 'pdf', '', '')
+    format = tolower(matchstr(firstline, '\a\+'))
+    format = substitute(format, 'pdf', '', '')
     if format == 'tex'
-      let format = 'latex'
+      format = 'latex'
     elseif format == 'plaintex'
-      let format = 'plain'
+      format = 'plain'
     endif
   elseif expand('%') =~ 'tex/context/.*/.*.tex'
-    let format = 'context'
+    format = 'context'
   else
-    " Default value, may be changed later:
-    let format = exists("g:tex_flavor") ? g:tex_flavor : 'plain'
-    " Save position, go to the top of the file, find first non-comment line.
-    let save_cursor = getpos('.')
-    call cursor(1,1)
-    let firstNC = search('^\s*[^[:space:]%]', 'c', 1000)
-    if firstNC " Check the next thousand lines for a LaTeX or ConTeXt keyword.
-      let lpat = 'documentclass\>\|usepackage\>\|begin{\|newcommand\>\|renewcommand\>'
-      let cpat = 'start\a\+\|setup\a\+\|usemodule\|enablemode\|enableregime\|setvariables\|useencoding\|usesymbols\|stelle\a\+\|verwende\a\+\|stel\a\+\|gebruik\a\+\|usa\a\+\|imposta\a\+\|regle\a\+\|utilisemodule\>'
-      let kwline = search('^\s*\\\%(' . lpat . '\)\|^\s*\\\(' . cpat . '\)',
-			      \ 'cnp', firstNC + 1000)
-      if kwline == 1	" lpat matched
-	let format = 'latex'
-      elseif kwline == 2	" cpat matched
-	let format = 'context'
-      endif		" If neither matched, keep default set above.
-      " let lline = search('^\s*\\\%(' . lpat . '\)', 'cn', firstNC + 1000)
-      " let cline = search('^\s*\\\%(' . cpat . '\)', 'cn', firstNC + 1000)
-      " if cline > 0
-      "   let format = 'context'
-      " endif
-      " if lline > 0 && (cline == 0 || cline > lline)
-      "   let format = 'tex'
-      " endif
-    endif " firstNC
+    # Default value, may be changed later:
+    format = exists("g:tex_flavor") ? g:tex_flavor : 'plain'
+    # Save position, go to the top of the file, find first non-comment line.
+    var save_cursor = getpos('.')
+    call cursor(1, 1)
+    var firstNC = search('^\s*[^[:space:]%]', 'c', 1000)
+    if firstNC # Check the next thousand lines for a LaTeX or ConTeXt keyword.
+      var lpat = 'documentclass\>\|usepackage\>\|begin{\|newcommand\>\|renewcommand\>'
+      var cpat = 'start\a\+\|setup\a\+\|usemodule\|enablemode\|enableregime\|setvariables\|useencoding\|usesymbols\|stelle\a\+\|verwende\a\+\|stel\a\+\|gebruik\a\+\|usa\a\+\|imposta\a\+\|regle\a\+\|utilisemodule\>'
+      var kwline = search('^\s*\\\%(' .. lpat .. '\)\|^\s*\\\(' .. cpat .. '\)',
+			      'cnp', firstNC + 1000)
+      if kwline == 1		# lpat matched
+	format = 'latex'
+      elseif kwline == 2	# cpat matched
+	format = 'context'
+      endif		# If neither matched, keep default set above.
+      # let lline = search('^\s*\\\%(' . lpat . '\)', 'cn', firstNC + 1000)
+      # let cline = search('^\s*\\\%(' . cpat . '\)', 'cn', firstNC + 1000)
+      # if cline > 0
+      #   let format = 'context'
+      # endif
+      # if lline > 0 && (cline == 0 || cline > lline)
+      #   let format = 'tex'
+      # endif
+    endif # firstNC
     call setpos('.', save_cursor)
-  endif " firstline =~ '^%&\s*\a\+'
+  endif # firstline =~ '^%&\s*\a\+'
 
-  " Translation from formats to file types.  TODO:  add AMSTeX, RevTex, others?
+  # Translation from formats to file types.  TODO:  add AMSTeX, RevTex, others?
   if format == 'plain'
     setf plaintex
   elseif format == 'context'
     setf context
-  else " probably LaTeX
+  else # probably LaTeX
     setf tex
   endif
   return
-endfunc
+enddef
 
-func dist#ft#FTxml()
-  let n = 1
+export def FTxml()
+  var n = 1
   while n < 100 && n <= line("$")
-    let line = getline(n)
-    " DocBook 4 or DocBook 5.
-    let is_docbook4 = line =~ '<!DOCTYPE.*DocBook'
-    let is_docbook5 = line =~ ' xmlns="http://docbook.org/ns/docbook"'
+    var line = getline(n)
+    # DocBook 4 or DocBook 5.
+    var is_docbook4 = line =~ '<!DOCTYPE.*DocBook'
+    var is_docbook5 = line =~ ' xmlns="http://docbook.org/ns/docbook"'
     if is_docbook4 || is_docbook5
-      let b:docbk_type = "xml"
+      b:docbk_type = "xml"
       if is_docbook5
-	let b:docbk_ver = 5
+	b:docbk_ver = 5
       else
-	let b:docbk_ver = 4
+	b:docbk_ver = 4
       endif
       setf docbk
       return
@@ -812,15 +809,15 @@
       setf xbl
       return
     endif
-    let n += 1
+    n += 1
   endwhile
   setf xml
-endfunc
+enddef
 
-func dist#ft#FTy()
-  let n = 1
+export def FTy()
+  var n = 1
   while n < 100 && n <= line("$")
-    let line = getline(n)
+    var line = getline(n)
     if line =~ '^\s*%'
       setf yacc
       return
@@ -829,25 +826,25 @@
       setf racc
       return
     endif
-    let n = n + 1
+    n += 1
   endwhile
   setf yacc
-endfunc
+enddef
 
-func dist#ft#Redif()
-  let lnum = 1
+export def Redif()
+  var lnum = 1
   while lnum <= 5 && lnum < line('$')
     if getline(lnum) =~ "^\ctemplate-type:"
       setf redif
       return
     endif
-    let lnum = lnum + 1
+    lnum += 1
   endwhile
-endfunc
+enddef
 
-" This function is called for all files under */debian/patches/*, make sure not
-" to non-dep3patch files, such as README and other text files.
-func dist#ft#Dep3patch()
+# This function is called for all files under */debian/patches/*, make sure not
+# to non-dep3patch files, such as README and other text files.
+export def Dep3patch()
   if expand('%:t') ==# 'series'
     return
   endif
@@ -857,44 +854,43 @@
       setf dep3patch
       return
     elseif ln =~# '^---'
-      " end of headers found. stop processing
+      # end of headers found. stop processing
       return
     endif
   endfor
-endfunc
+enddef
 
-" This function checks the first 15 lines for appearance of 'FoamFile'
-" and then 'object' in a following line.
-" In that case, it's probably an OpenFOAM file
-func dist#ft#FTfoam()
-    let ffile = 0
-    let lnum = 1
+# This function checks the first 15 lines for appearance of 'FoamFile'
+# and then 'object' in a following line.
+# In that case, it's probably an OpenFOAM file
+export def FTfoam()
+    var ffile = 0
+    var lnum = 1
     while lnum <= 15
       if getline(lnum) =~# '^FoamFile'
-	let ffile = 1
+	ffile = 1
       elseif ffile == 1 && getline(lnum) =~# '^\s*object'
 	setf foam
 	return
       endif
-      let lnum = lnum + 1
+      lnum += 1
     endwhile
-endfunc
+enddef
 
-" Determine if a *.tf file is TF mud client or terraform
-func dist#ft#FTtf()
-  let numberOfLines = line('$')
+# Determine if a *.tf file is TF mud client or terraform
+export def FTtf()
+  var numberOfLines = line('$')
   for i in range(1, numberOfLines)
-    let currentLine = trim(getline(i))
-    let firstCharacter = currentLine[0]
+    var currentLine = trim(getline(i))
+    var firstCharacter = currentLine[0]
     if firstCharacter !=? ";" && firstCharacter !=? "/" && firstCharacter !=? ""
       setf terraform
       return
     endif
   endfor
   setf tf
-endfunc
+enddef
 
 
-" Restore 'cpoptions'
-let &cpo = s:cpo_save
-unlet s:cpo_save
+# Uncomment this line to check for compilation errors early
+defcompile
diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
index 98c358d..8299597 100644
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -1,4 +1,4 @@
-*builtin.txt*	For Vim version 8.2.  Last change: 2022 Jan 28
+*builtin.txt*	For Vim version 8.2.  Last change: 2022 Feb 04
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -1885,12 +1885,13 @@
 		display an error message.
 
 
-digraph_set({chars}, {digraph})				*digraph_set()* *E1205*
+digraph_set({chars}, {digraph})				*digraph_set()*
 		Add digraph {chars} to the list.  {chars} must be a string
 		with two characters.  {digraph} is a string with one UTF-8
-		encoded character. Be careful, composing characters are NOT
-		ignored.  This function is similar to |:digraphs| command, but
-		useful to add digraphs start with a white space.
+		encoded character.  *E1215*
+		Be careful, composing characters are NOT ignored.  This
+		function is similar to |:digraphs| command, but useful to add
+		digraphs start with a white space.
 
 		The function result is v:true if |digraph| is registered.  If
 		this fails an error message is given and v:false is returned.
@@ -1913,7 +1914,7 @@
 		Similar to |digraph_set()| but this function can add multiple
 		digraphs at once.  {digraphlist} is a list composed of lists,
 		where each list contains two strings with {chars} and
-		{digraph} as in |digraph_set()|.
+		{digraph} as in |digraph_set()|. *E1216*
 		Example: >
 		    call digraph_setlist([['aa', 'あ'], ['ii', 'い']])
 <
@@ -2531,7 +2532,7 @@
 		The {list} is changed in place, use |flattennew()| if you do
 		not want that.
 		In Vim9 script flatten() cannot be used, you must always use
-		|flattennew()|. *E1158*
+		|flattennew()|.
 								*E900*
 		{maxdepth} means how deep in nested lists changes are made.
 		{list} is not modified when {maxdepth} is 0.
@@ -3751,7 +3752,7 @@
 			:let cliptext = getreg('*')
 <		When register {regname} was not set the result is an empty
 		string.
-		The {regname} argument must be a string.
+		The {regname} argument must be a string.  *E1162*
 
 		getreg('=') returns the last evaluated value of the expression
 		register.  (For use in maps.)
@@ -4783,7 +4784,7 @@
 		Encode {expr} as JSON and return this as a string.
 		The encoding is specified in:
 		https://tools.ietf.org/html/rfc7159.html
-		Vim values are converted as follows:
+		Vim values are converted as follows:   *E1161*
 		   |Number|		decimal number
 		   |Float|		floating point number
 		   Float nan		"NaN"
@@ -4897,7 +4898,7 @@
 line({expr} [, {winid}])				*line()*
 		The result is a Number, which is the line number of the file
 		position given with {expr}.  The {expr} argument is a string.
-		The accepted positions are:
+		The accepted positions are:			 *E1209*
 		    .	    the cursor position
 		    $	    the last line in the current buffer
 		    'x	    position of mark x (if the mark is not set, 0 is
@@ -7644,10 +7645,12 @@
 		    module	name of a module; if given it will be used in
 				quickfix error window instead of the filename.
 		    lnum	line number in the file
+		    end_lnum	end of lines, if the item spans multiple lines
 		    pattern	search pattern used to locate the error
 		    col		column number
 		    vcol	when non-zero: "col" is visual column
 				when zero: "col" is byte index
+		    end_col	end column, if the item spans multiple columns
 		    nr		error number
 		    text	description of the error
 		    type	single-character error type, 'E', 'W', etc.
diff --git a/runtime/doc/change.txt b/runtime/doc/change.txt
index 7e1030b..d72e689 100644
--- a/runtime/doc/change.txt
+++ b/runtime/doc/change.txt
@@ -1,4 +1,4 @@
-*change.txt*    For Vim version 8.2.  Last change: 2022 Jan 28
+*change.txt*    For Vim version 8.2.  Last change: 2022 Feb 04
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -782,7 +782,7 @@
 For compatibility with Vi these two exceptions are allowed:
 "\/{string}/" and "\?{string}?" do the same as "//{string}/r".
 "\&{string}&" does the same as "//{string}/".
-						*pattern-delimiter* *E146*
+				*pattern-delimiter* *E146* *E1241* *E1242*
 Instead of the '/' which surrounds the pattern and replacement string, you can
 use another single-byte character.  This is useful if you want to include a
 '/' in the search pattern or replacement string.  Example: >
@@ -1076,7 +1076,7 @@
 			in [range] (default: current line |cmdline-ranges|),
 			[into register x].
 
-							*p* *put* *E353*
+						*p* *put* *E353* *E1240*
 ["x]p			Put the text [from register x] after the cursor
 			[count] times.
 
diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt
index c68c161..ad862bf 100644
--- a/runtime/doc/cmdline.txt
+++ b/runtime/doc/cmdline.txt
@@ -1,4 +1,4 @@
-*cmdline.txt*   For Vim version 8.2.  Last change: 2022 Jan 08
+*cmdline.txt*   For Vim version 8.2.  Last change: 2022 Feb 04
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -730,7 +730,7 @@
 one(s) will be ignored.
 
 Line numbers may be specified with:		*:range* *{address}*
-	{number}	an absolute line number
+	{number}	an absolute line number  *E1247*
 	.		the current line			  *:.*
 	$		the last line in the file		  *:$*
 	%		equal to 1,$ (the entire file)		  *:%*
diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt
index 00deef1..371450f 100644
--- a/runtime/doc/editing.txt
+++ b/runtime/doc/editing.txt
@@ -1,4 +1,4 @@
-*editing.txt*   For Vim version 8.2.  Last change: 2022 Jan 21
+*editing.txt*   For Vim version 8.2.  Last change: 2022 Feb 04
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -633,7 +633,7 @@
 			Also see |++opt| and |+cmd|.
 
 :[count]arga[dd] {name} ..			*:arga* *:argadd* *E479*
-:[count]arga[dd]
+:[count]arga[dd]						*E1156*
 			Add the {name}s to the argument list.  When {name} is
 			omitted add the current buffer name to the argument
 			list.
@@ -1772,10 +1772,8 @@
 	/u/user_x/include
 
 <   Note: If your 'path' setting includes a non-existing directory, Vim will
-   skip the non-existing directory, but continues searching in the parent of
-   the non-existing directory if upwards searching is used.  E.g. when
-   searching "../include" and that doesn't exist, and upward searching is
-   used, also searches in "..".
+   skip the non-existing directory, and also does not search in the parent of
+   the non-existing directory if upwards searching is used.
 
 3) Combined up/downward search:
    If Vim's current path is /u/user_x/work/release and you do >
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 258d0a1..9e1425b 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 8.2.  Last change: 2022 Jan 24
+*eval.txt*	For Vim version 8.2.  Last change: 2022 Feb 04
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -181,7 +181,7 @@
 
 
 1.2 Function references ~
-					*Funcref* *E695* *E718* *E1086*
+				*Funcref* *E695* *E718* *E1086* *E1192*
 A Funcref variable is obtained with the |function()| function, the |funcref()|
 function or created with the lambda expression |expr-lambda|.  It can be used
 in an expression in the place of a function name, before the parenthesis
@@ -765,7 +765,7 @@
 
 
 Blob modification ~
-							*blob-modification*
+					*blob-modification* *E1182* *E1184*
 To change a specific byte of a blob use |:let| this way: >
 	:let blob[4] = 0x44
 
@@ -1018,7 +1018,7 @@
 only be evaluated if "b" has been defined.
 
 
-expr4							*expr4*
+expr4							*expr4* *E1153*
 -----
 
 expr5 {cmp} expr5
@@ -1176,6 +1176,7 @@
 	 >0 / 0  =  0x7fffffff	(like positive infinity)
 	 <0 / 0  = -0x7fffffff	(like negative infinity)
 	(before Vim 7.2 it was always 0x7fffffff)
+In |Vim9| script dividing a number by zero is an error.	*E1154*
 
 When 64-bit Number support is enabled:
 	  0 / 0  = -0x8000000000000000	(like NaN for Float)
@@ -1243,7 +1244,7 @@
 byte under the cursor: >
 	:let c = getline(".")[col(".") - 1]
 
-In |Vim9| script:
+In |Vim9| script:					*E1147* *E1148*
 If expr9 is a String this results in a String that contains the expr1'th
 single character (including any composing characters) from expr9.  To use byte
 indexes use |strpart()|.
@@ -1323,7 +1324,7 @@
 
 
 expr9.name		entry in a |Dictionary|		*expr-entry*
-
+							*E1203* *E1229*
 If expr9 is a |Dictionary| and it is followed by a dot, then the following
 name will be used as a key in the |Dictionary|.  This is just like:
 expr9[name].
@@ -1350,7 +1351,7 @@
 
 expr9->name([args])	method call			*method* *->*
 expr9->{lambda}([args])
-							*E260* *E276*
+							*E260* *E276* *E1265*
 For methods that are also available as global functions this is the same as: >
 	name(expr9 [, args])
 There can also be methods specifically for the type of "expr9".
@@ -1550,7 +1551,7 @@
 evaluates to.  Use |eval()| to evaluate it.
 
 
-nesting							*expr-nesting* *E110*
+nesting						*expr-nesting* *E110*
 -------
 (expr1)			nested expression
 
@@ -2694,7 +2695,7 @@
 			implies that the effect of |:nohlsearch| is undone
 			when the function returns.
 
-				*:endf* *:endfunction* *E126* *E193* *W22*
+			*:endf* *:endfunction* *E126* *E193* *W22* *E1151*
 :endf[unction] [argument]
 			The end of a function definition.  Best is to put it
 			on a line by its own, without [argument].
@@ -3074,7 +3075,7 @@
 			length of the blob, in which case one byte is
 			appended.
 
-							*E711* *E719*
+					*E711* *E719* *E1165* *E1166* *E1183*
 :let {var-name}[{idx1}:{idx2}] = {expr1}		*E708* *E709* *E710*
 			Set a sequence of items in a |List| to the result of
 			the expression {expr1}, which must be a list with the
@@ -3410,7 +3411,7 @@
 			See |deepcopy()|.
 
 
-:unlo[ckvar][!] [depth] {name} ...			*:unlockvar* *:unlo*
+:unlo[ckvar][!] [depth] {name} ...		*:unlockvar* *:unlo* *E1246*
 			Unlock the internal variable {name}.  Does the
 			opposite of |:lockvar|.
 
@@ -3471,7 +3472,7 @@
 :endfo[r]						*:endfo* *:endfor*
 			Repeat the commands between ":for" and ":endfor" for
 			each item in {object}.  {object} can be a |List| or
-			a |Blob|.
+			a |Blob|. *E1177*
 
 			Variable {var} is set to the value of each item.
 			In |Vim9| script the loop variable must not have been
@@ -3725,6 +3726,9 @@
 			the `append()` call appends the List with text to the
 			buffer.  This is similar to `:call` but works with any
 			expression.
+			In |Vim9| script an expression without an effect will
+			result in error *E1207* .  This should help noticing
+			mistakes.
 
 			The command can be shortened to `:ev` or `:eva`, but
 			these are hard to recognize and therefore not to be
@@ -4892,6 +4896,9 @@
 compatible with older versions of Vim this will give an explicit error,
 instead of failing in mysterious ways.
 
+When using a legacy function, defined with `:function`, in |Vim9| script then
+scriptversion 4 is used.
+
 							*scriptversion-1*  >
  :scriptversion 1
 <	This is the original Vim script, same as not using a |:scriptversion|
diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt
index 9a614e2..d52103e 100644
--- a/runtime/doc/filetype.txt
+++ b/runtime/doc/filetype.txt
@@ -142,7 +142,8 @@
 	*.asm		g:asmsyntax	|ft-asm-syntax|
 	*.asp		g:filetype_asp	|ft-aspvbs-syntax| |ft-aspperl-syntax|
 	*.bas		g:filetype_bas	|ft-basic-syntax|
-	*.fs		g:filetype_fs   |ft-forth-syntax|
+	*.frm		g:filetype_frm	|ft-form-syntax|
+	*.fs		g:filetype_fs	|ft-forth-syntax|
 	*.i		g:filetype_i	|ft-progress-syntax|
 	*.inc		g:filetype_inc
 	*.m		g:filetype_m	|ft-mathematica-syntax|
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 8c9ff3d..732e5a7 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 8.2.  Last change: 2022 Jan 29
+*options.txt*	For Vim version 8.2.  Last change: 2022 Feb 04
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -800,6 +800,7 @@
 	need proper setting-up, so whenever the shell's pwd changes an OSC 7
 	escape sequence will be emitted. For example, on Linux, you can source
 	/etc/profile.d/vte.sh in your shell profile if you use bash or zsh.
+	When the parsing of the OSC sequence fails you get *E1179* .
 
 				*'arabic'* *'arab'* *'noarabic'* *'noarab'*
 'arabic' 'arab'		boolean (default off)
@@ -2476,7 +2477,7 @@
 			you write the file the encrypted bytes will be
 			different.  The whole undo file is encrypted, not just
 			the pieces of text.
-					*E1193* *E1194* *E1195* *E1196*
+					*E1193* *E1194* *E1195* *E1196* *E1230*
 					*E1197* *E1198* *E1199* *E1200* *E1201*
 	   xchacha20	XChaCha20 Cipher with Poly1305 Message Authentication
 			Code.  Medium strong till strong encryption.
@@ -6723,6 +6724,9 @@
 	See |option-backslash| about including spaces and backslashes.
 	Environment variables are expanded |:set_env|.
 
+	In |restricted-mode| shell commands will not be possible.  This mode
+	is used if the value of $SHELL ends in "false" or "nologin".
+
 	If the name of the shell contains a space, you need to enclose it in
 	quotes and escape the space.  Example with quotes: >
 		:set shell=\"c:\program\ files\unix\sh.exe\"\ -f
diff --git a/runtime/doc/pattern.txt b/runtime/doc/pattern.txt
index ce1d0f4..819975d 100644
--- a/runtime/doc/pattern.txt
+++ b/runtime/doc/pattern.txt
@@ -1,4 +1,4 @@
-*pattern.txt*   For Vim version 8.2.  Last change: 2022 Jan 08
+*pattern.txt*   For Vim version 8.2.  Last change: 2022 Feb 04
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -925,7 +925,7 @@
 	becomes invalid.  Vim doesn't automatically update the matches.
 	Similar to moving the cursor for "\%#" |/\%#|.
 
-						*/\%l* */\%>l* */\%<l* *E951*
+					*/\%l* */\%>l* */\%<l* *E951* *E1204*
 \%23l	Matches in a specific line.
 \%<23l	Matches above a specific line (lower line number).
 \%>23l	Matches below a specific line (higher line number).
diff --git a/runtime/doc/starting.txt b/runtime/doc/starting.txt
index bca2f97..84f3a75 100644
--- a/runtime/doc/starting.txt
+++ b/runtime/doc/starting.txt
@@ -1,4 +1,4 @@
-*starting.txt*  For Vim version 8.2.  Last change: 2022 Jan 20
+*starting.txt*  For Vim version 8.2.  Last change: 2022 Feb 01
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index 6b114a7..a23ac88 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt*	For Vim version 8.2.  Last change: 2021 Nov 20
+*syntax.txt*	For Vim version 8.2.  Last change: 2022 Feb 04
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -215,7 +215,8 @@
 
 The name for a highlight or syntax group must consist of ASCII letters, digits
 and the underscore.  As a regexp: "[a-zA-Z0-9_]*".  However, Vim does not give
-an error when using other characters.
+an error when using other characters.  The maxium length of a group name is
+about 200 bytes.  *E1249*
 
 To be able to allow each user to pick their favorite set of colors, there must
 be preferred names for highlight groups that are common for many languages.
@@ -1536,6 +1537,14 @@
 gvim display.  Here, statements are colored LightYellow instead of Yellow, and
 conditionals are LightBlue for better distinction.
 
+Both Visual Basic and FORM use the extension ".frm".  To detect which one
+should be used, Vim checks for the string "VB_Name" in the first five lines of
+the file.  If it is found, filetype will be "vb", otherwise "form".
+
+If the automatic detection doesn't work for you or you only edit, for
+example, FORM files, use this in your startup vimrc: >
+   :let filetype_frm = "form"
+
 
 FORTH						*forth.vim* *ft-forth-syntax*
 
diff --git a/runtime/doc/tabpage.txt b/runtime/doc/tabpage.txt
index 7512d0c..cb2f7ad 100644
--- a/runtime/doc/tabpage.txt
+++ b/runtime/doc/tabpage.txt
@@ -1,4 +1,4 @@
-*tabpage.txt*   For Vim version 8.2.  Last change: 2020 Oct 14
+*tabpage.txt*   For Vim version 8.2.  Last change: 2022 Feb 02
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -143,7 +143,9 @@
 		    :tabclose 3	    " close the third tab page
 		    :tabclose $	    " close the last tab page
 		    :tabclose #     " close the last accessed tab page
-<
+
+When a tab is closed the next tab page will become the current one.
+
 							*:tabo* *:tabonly*
 :tabo[nly][!]	Close all other tab pages.
 		When the 'hidden' option is set, all buffers in closed windows
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 0016643..a15371e 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -4041,6 +4041,7 @@
 E109	eval.txt	/*E109*
 E1090	eval.txt	/*E1090*
 E1091	vim9.txt	/*E1091*
+E1092	various.txt	/*E1092*
 E1093	eval.txt	/*E1093*
 E1094	vim9.txt	/*E1094*
 E1095	eval.txt	/*E1095*
@@ -4096,19 +4097,62 @@
 E114	eval.txt	/*E114*
 E1140	eval.txt	/*E1140*
 E1141	eval.txt	/*E1141*
+E1142	testing.txt	/*E1142*
 E1143	eval.txt	/*E1143*
 E1144	vim9.txt	/*E1144*
 E1145	eval.txt	/*E1145*
+E1146	vim9.txt	/*E1146*
+E1147	eval.txt	/*E1147*
+E1148	eval.txt	/*E1148*
+E1149	vim9.txt	/*E1149*
 E115	eval.txt	/*E115*
+E1150	vim9.txt	/*E1150*
+E1151	eval.txt	/*E1151*
+E1152	vim9.txt	/*E1152*
+E1153	eval.txt	/*E1153*
+E1154	eval.txt	/*E1154*
 E1155	autocmd.txt	/*E1155*
-E1158	builtin.txt	/*E1158*
+E1156	editing.txt	/*E1156*
+E1157	vim9.txt	/*E1157*
+E1158	vim9.txt	/*E1158*
+E1159	windows.txt	/*E1159*
 E116	eval.txt	/*E116*
+E1160	vim9.txt	/*E1160*
+E1161	builtin.txt	/*E1161*
+E1162	builtin.txt	/*E1162*
+E1163	vim9.txt	/*E1163*
+E1164	vim9.txt	/*E1164*
+E1165	eval.txt	/*E1165*
+E1166	eval.txt	/*E1166*
+E1167	vim9.txt	/*E1167*
+E1168	vim9.txt	/*E1168*
 E1169	eval.txt	/*E1169*
 E117	eval.txt	/*E117*
+E1170	vim9.txt	/*E1170*
+E1171	vim9.txt	/*E1171*
+E1172	vim9.txt	/*E1172*
+E1173	vim9.txt	/*E1173*
+E1174	vim9.txt	/*E1174*
+E1175	vim9.txt	/*E1175*
+E1176	vim9.txt	/*E1176*
+E1177	eval.txt	/*E1177*
+E1178	vim9.txt	/*E1178*
+E1179	options.txt	/*E1179*
 E118	eval.txt	/*E118*
+E1180	vim9.txt	/*E1180*
+E1181	vim9.txt	/*E1181*
+E1182	eval.txt	/*E1182*
+E1183	eval.txt	/*E1183*
+E1184	eval.txt	/*E1184*
+E1185	various.txt	/*E1185*
+E1186	vim9.txt	/*E1186*
 E1187	starting.txt	/*E1187*
 E1188	cmdline.txt	/*E1188*
+E1189	vim9.txt	/*E1189*
 E119	eval.txt	/*E119*
+E1190	vim9.txt	/*E1190*
+E1191	vim9.txt	/*E1191*
+E1192	eval.txt	/*E1192*
 E1193	options.txt	/*E1193*
 E1194	options.txt	/*E1194*
 E1195	options.txt	/*E1195*
@@ -4120,25 +4164,76 @@
 E120	eval.txt	/*E120*
 E1200	options.txt	/*E1200*
 E1201	options.txt	/*E1201*
-E1205	builtin.txt	/*E1205*
+E1202	vim9.txt	/*E1202*
+E1203	eval.txt	/*E1203*
+E1204	pattern.txt	/*E1204*
+E1205	vim9.txt	/*E1205*
+E1206	vim9.txt	/*E1206*
+E1207	eval.txt	/*E1207*
 E1208	map.txt	/*E1208*
+E1209	builtin.txt	/*E1209*
 E121	eval.txt	/*E121*
+E1210	vim9.txt	/*E1210*
+E1211	vim9.txt	/*E1211*
+E1212	vim9.txt	/*E1212*
+E1213	vim9.txt	/*E1213*
 E1214	builtin.txt	/*E1214*
+E1215	builtin.txt	/*E1215*
+E1216	builtin.txt	/*E1216*
+E1217	vim9.txt	/*E1217*
+E1218	vim9.txt	/*E1218*
+E1219	vim9.txt	/*E1219*
 E122	eval.txt	/*E122*
+E1220	vim9.txt	/*E1220*
+E1221	vim9.txt	/*E1221*
+E1222	vim9.txt	/*E1222*
+E1223	vim9.txt	/*E1223*
+E1224	vim9.txt	/*E1224*
+E1225	vim9.txt	/*E1225*
+E1226	vim9.txt	/*E1226*
+E1227	vim9.txt	/*E1227*
+E1228	vim9.txt	/*E1228*
+E1229	eval.txt	/*E1229*
 E123	eval.txt	/*E123*
+E1230	options.txt	/*E1230*
 E1231	map.txt	/*E1231*
 E1232	builtin.txt	/*E1232*
 E1233	builtin.txt	/*E1233*
+E1234	vim9.txt	/*E1234*
+E1235	vim9.txt	/*E1235*
+E1236	vim9.txt	/*E1236*
 E1237	map.txt	/*E1237*
+E1238	vim9.txt	/*E1238*
 E1239	builtin.txt	/*E1239*
 E124	eval.txt	/*E124*
+E1240	change.txt	/*E1240*
+E1241	change.txt	/*E1241*
+E1242	change.txt	/*E1242*
 E1243	options.txt	/*E1243*
 E1244	message.txt	/*E1244*
 E1245	cmdline.txt	/*E1245*
+E1246	eval.txt	/*E1246*
+E1247	cmdline.txt	/*E1247*
+E1248	vim9.txt	/*E1248*
+E1249	syntax.txt	/*E1249*
 E125	eval.txt	/*E125*
+E1250	vim9.txt	/*E1250*
+E1251	vim9.txt	/*E1251*
+E1252	vim9.txt	/*E1252*
+E1253	vim9.txt	/*E1253*
+E1254	vim9.txt	/*E1254*
 E1255	map.txt	/*E1255*
+E1256	vim9.txt	/*E1256*
+E1257	vim9.txt	/*E1257*
+E1258	vim9.txt	/*E1258*
+E1259	vim9.txt	/*E1259*
 E126	eval.txt	/*E126*
+E1260	vim9.txt	/*E1260*
+E1261	vim9.txt	/*E1261*
+E1262	vim9.txt	/*E1262*
 E1263	eval.txt	/*E1263*
+E1264	vim9.txt	/*E1264*
+E1265	eval.txt	/*E1265*
 E127	eval.txt	/*E127*
 E128	eval.txt	/*E128*
 E129	eval.txt	/*E129*
@@ -6125,6 +6220,7 @@
 convert-to-HTML	syntax.txt	/*convert-to-HTML*
 convert-to-XHTML	syntax.txt	/*convert-to-XHTML*
 convert-to-XML	syntax.txt	/*convert-to-XML*
+convert_legacy_function_to_vim9	vim9.txt	/*convert_legacy_function_to_vim9*
 copy()	builtin.txt	/*copy()*
 copy-diffs	diff.txt	/*copy-diffs*
 copy-move	change.txt	/*copy-move*
@@ -9931,7 +10027,6 @@
 test_option_not_set()	testing.txt	/*test_option_not_set()*
 test_override()	testing.txt	/*test_override()*
 test_refcount()	testing.txt	/*test_refcount()*
-test_scrollbar()	testing.txt	/*test_scrollbar()*
 test_setmouse()	testing.txt	/*test_setmouse()*
 test_settime()	testing.txt	/*test_settime()*
 test_srand_seed()	testing.txt	/*test_srand_seed()*
diff --git a/runtime/doc/testing.txt b/runtime/doc/testing.txt
index 8bd3cc9..c77d594 100644
--- a/runtime/doc/testing.txt
+++ b/runtime/doc/testing.txt
@@ -1,4 +1,4 @@
-*testing.txt*	For Vim version 8.2.  Last change: 2022 Jan 23
+*testing.txt*	For Vim version 8.2.  Last change: 2022 Feb 04
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -65,8 +65,9 @@
 		Like garbagecollect(), but executed right away.  This must
 		only be called directly to avoid any structure to exist
 		internally, and |v:testing| must have been set before calling
-		any function.  This will not work when called from a :def
-		function, because variables on the stack will be freed.
+		any function.   *E1142*
+		This will not work when called from a :def function, because
+		variables on the stack will be freed.
 
 
 test_garbagecollect_soon()			 *test_garbagecollect_soon()*
@@ -92,6 +93,7 @@
 		    "dropfiles"	drop one or more files in a window.
 		    "findrepl"  search and replace text
 		    "mouse"	mouse button click event.
+		    "scrollbar" move or drag the scrollbar
 		    "tabline"	select a tab page by mouse click.
 		    "tabmenu"	select a tabline menu entry.
 
@@ -113,6 +115,7 @@
 		  |drop_file| feature is present.
 
 		"findrepl":
+		  {only available when the GUI has a find/replace dialog}
 		  Perform a search and replace of text.  The supported items
 		  in {args} are:
 		    find_text:	string to find.
@@ -149,6 +152,22 @@
 				    8	alt is pressed
 				   16	ctrl is pressed
 
+		"scrollbar":
+		  Set or drag the left, right or horizontal scrollbar.  Only
+		  works when the scrollbar actually exists.  The supported
+		  items in {args} are:
+		    which:	scrollbar. The supported values are:
+				    left  Left scrollbar of the current window
+				    right Right scrollbar of the current window
+				    hor   Horizontal scrollbar
+		    value:	amount to scroll.  For the vertical scrollbars
+				the value can be 1 to the line-count of the
+				buffer.  For the horizontal scrollbar the
+				value can be between 1 and the maximum line
+				length, assuming 'wrap' is not set.
+		    dragging:	1 to drag the scrollbar and 0 to click in the
+				scrollbar.
+
 		"tabline":
 		  Inject a mouse click event on the tabline to select a
 		  tabpage. The supported items in {args} are:
@@ -284,27 +303,6 @@
 			GetVarname()->test_refcount()
 
 
-test_scrollbar({which}, {value}, {dragging})		*test_scrollbar()*
-		Pretend using scrollbar {which} to move it to position
-		{value}.  {which} can be:
-			left	Left scrollbar of the current window
-			right	Right scrollbar of the current window
-			hor	Horizontal scrollbar
-
-		For the vertical scrollbars {value} can be 1 to the
-		line-count of the buffer.  For the horizontal scrollbar the
-		{value} can be between 1 and the maximum line length, assuming
-		'wrap' is not set.
-
-		When {dragging} is non-zero it's like dragging the scrollbar,
-		otherwise it's like clicking in the scrollbar.
-		Only works when the {which} scrollbar actually exists,
-		obviously only when using the GUI.
-
-		Can also be used as a |method|: >
-			GetValue()->test_scrollbar('right', 0)
-
-
 test_setmouse({row}, {col})				*test_setmouse()*
 		Set the mouse position to be used for the next mouse action.
 		{row} and {col} are one based.
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 5861fa8..c74bce6 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 8.2.  Last change: 2022 Jan 31
+*todo.txt*      For Vim version 8.2.  Last change: 2022 Feb 04
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -38,19 +38,7 @@
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-Cannot use command modifier for "import 'name.vim' as vim9"
-
-range() returns list<number>, but it's OK if map() changes the type.
-#9665  Change internal_func_ret_type() to return current and declared type?
-
-When making a copy of a list or dict, do not keep the type? #9644
-    With deepcopy() all, with copy() this still fails:
-    var l: list<list<number>> = [[1], [2]]
-    l->copy()[0][0] = 'x'
-
 Once Vim9 is stable:
-- Add all the error numbers in a good place in documentation.
-    done until E1145
 - Check code coverage, add more tests if needed.
 - Use Vim9 for runtime files.
 
diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt
index fb0a357..5b35dca 100644
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -1,4 +1,4 @@
-*various.txt*   For Vim version 8.2.  Last change: 2022 Jan 15
+*various.txt*   For Vim version 8.2.  Last change: 2022 Feb 03
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -424,7 +424,7 @@
 m  *+mzscheme/dyn*	Mzscheme interface |mzscheme-dynamic| |/dyn|
 m  *+netbeans_intg*	|netbeans|
 T  *+num64*		64-bit Number support |Number|
-   			Always enabled since 8.2.0271, use v:numbersize to
+			Always enabled since 8.2.0271, use v:numbersize to
 			check the actual size of a Number.
 m  *+ole*		Win32 GUI only: |ole-interface|
 N  *+packages*		Loading |packages|
@@ -549,7 +549,7 @@
 			backward compatibility, the ">" after the register
 			name can be omitted.
 :redi[r] @">>		Append messages to the unnamed register.
-
+							*E1092*
 :redi[r] => {var}	Redirect messages to a variable.
 			In legacy script: If the variable doesn't exist, then
 			it is created.  If the variable exists, then it is
@@ -566,7 +566,7 @@
 
 :redi[r] =>> {var}	Append messages to an existing variable.  Only string
 			variables can be used.
-
+								 *E1185*
 :redi[r] END		End redirecting messages.
 
 							*:filt* *:filter*
@@ -649,7 +649,7 @@
 			used.  In this example |:silent| is used to avoid the
 			message about reading the file and |:unsilent| to be
 			able to list the first line of each file. >
-    		:silent argdo unsilent echo expand('%') . ": " . getline(1)
+		:silent argdo unsilent echo expand('%') . ": " . getline(1)
 <
 
 						*:verb* *:verbose*
diff --git a/runtime/doc/version8.txt b/runtime/doc/version8.txt
index 225dee0..f0a5290 100644
--- a/runtime/doc/version8.txt
+++ b/runtime/doc/version8.txt
@@ -1,4 +1,4 @@
-*version8.txt*  For Vim version 8.2.  Last change: 2021 Jul 24
+*version8.txt*  For Vim version 8.2.  Last change: 2022 Feb 03
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -25971,7 +25971,7 @@
 	|test_getvalue()|
 	|test_null_blob()|
 	|test_refcount()|
-	|test_scrollbar()|
+	test_scrollbar() (later replaced with |test_gui_event()|)
 	|test_setmouse()|
 	|win_execute()|
 	|win_splitmove()|
diff --git a/runtime/doc/vim9.txt b/runtime/doc/vim9.txt
index 06f8925..afa3239 100644
--- a/runtime/doc/vim9.txt
+++ b/runtime/doc/vim9.txt
@@ -1,4 +1,4 @@
-*vim9.txt*	For Vim version 8.2.  Last change: 2022 Jan 30
+*vim9.txt*	For Vim version 8.2.  Last change: 2022 Feb 04
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -56,12 +56,12 @@
 rewrite old scripts, they keep working as before.  You may want to use a few
 `:def` functions for code that needs to be fast.
 
-:vim9[cmd] {cmd}				*:vim9* *:vim9cmd*
+:vim9[cmd] {cmd}				*:vim9* *:vim9cmd* *E1164*
 		Execute {cmd} using Vim9 script syntax and semantics.
 		Useful when typing a command and in a legacy script or
 		function.
 
-:leg[acy] {cmd}					*:leg* *:legacy*
+:leg[acy] {cmd}					*:leg* *:legacy* *E1189* *E1234*
 		Execute {cmd} using legacy script syntax and semantics.  Only
 		useful in a Vim9 script or a :def function.
 		Note that {cmd} cannot use local variables, since it is parsed
@@ -72,7 +72,7 @@
 2. Differences from legacy Vim script			*vim9-differences*
 
 Overview ~
-
+							*E1146*
 Brief summary of the differences you will most often encounter when using Vim9
 script and `:def` functions; details are below:
 - Comments start with #, not ": >
@@ -128,7 +128,7 @@
 that starts a comment: >
 	var name = value # comment
 	var name = value# error!
-
+<							*E1170*
 Do not start a comment with #{, it looks like the legacy dictionary literal
 and produces an error where this might be confusing.  #{{ or #{{{ are OK,
 these can be used to start a fold.
@@ -153,7 +153,7 @@
 - `:disassemble` is used for the function.
 - a function that is compiled calls the function or uses it as a function
   reference (so that the argument and return types can be checked)
-							*E1091*
+						*E1091* *E1191*
 If compilation fails it is not tried again on the next call, instead this
 error is given: "E1091: Function is not compiled: {name}".
 Compilation will fail when encountering a user command that has not been
@@ -183,14 +183,14 @@
 	  var d = {func: Legacy, value: 'text'}
 	  d.func()
 	enddef
-<							*E1096*
+<						*E1096* *E1174* *E1175*
 The argument types and return type need to be specified.  The "any" type can
 be used, type checking will then be done at runtime, like with legacy
 functions.
 							*E1106*
 Arguments are accessed by name, without "a:", just like any other language.
 There is no "a:" dictionary or "a:000" list.
-					*vim9-variable-arguments* *E1055*
+			*vim9-variable-arguments* *E1055* *E1160* *E1180*
 Variable arguments are defined as the last argument, with a name and have a
 list type, similar to TypeScript.  For example, a list of numbers: >
 	def MyFunc(...itemlist: list<number>)
@@ -206,7 +206,7 @@
 	enddef
 	MyFunc(v:none, 'LAST')  # first argument uses default value 'one'
 <
-						*vim9-ignored-argument*
+					*vim9-ignored-argument* *E1181*
 The argument "_" (an underscore) can be used to ignore the argument.  This is
 most useful in callbacks where you don't need it, but do need to give an
 argument to match the call.  E.g. when using map() two arguments are passed,
@@ -264,7 +264,7 @@
 
 
 Reloading a Vim9 script clears functions and variables by default ~
-							*vim9-reload*
+						*vim9-reload* *E1149* *E1150*
 When loading a legacy Vim script a second time nothing is removed, the
 commands will replace existing variables and functions and create new ones.
 
@@ -345,7 +345,8 @@
 	   }
 
 Although using a :def function probably works better.
-				*E1022* *E1103* *E1130* *E1131* *E1133* *E1134*
+				*E1022* *E1103* *E1130* *E1131* *E1133*
+				*E1134* *E1235*
 Declaring a variable with a type but without an initializer will initialize to
 false (for bool), empty (for string, list, dict, etc.) or zero (for number,
 any, etc.).  This matters especially when using the "any" type, the value will
@@ -355,13 +356,13 @@
 without any command.  The same for global, window, tab, buffer and Vim
 variables, because they are not really declared.  Those can also be deleted
 with `:unlet`.
-
+							*E1178*
 `:lockvar` does not work on local variables.  Use `:const` and `:final`
 instead.
 
 The `exists()` and `exists_compiled()` functions do not work on local variables
 or arguments.
-						*E1006* *E1041*
+				*E1006* *E1041* *E1167* *E1168* *E1213*
 Variables, functions and function arguments cannot shadow previously defined
 or imported variables and functions in the same script file.
 Variables may shadow Ex commands, rename the variable if needed.
@@ -414,7 +415,7 @@
 	[a, _, c] = theList
 To ignore any remaining items: >
 	[a, b; _] = longList
-
+<							*E1163*
 Declaring more than one variable at a time, using the unpack notation, is
 possible.  Each variable can have a type or infer it from the value: >
 	var [v1: number, v2] = GetValues()
@@ -456,7 +457,7 @@
 
 
 Omitting :call and :eval ~
-
+							*E1190*
 Functions can be called without `:call`: >
 	writefile(lines, 'file')
 Using `:call` is still possible, but this is discouraged.
@@ -516,7 +517,8 @@
 To avoid these problems Vim9 script uses a different syntax for a lambda,
 which is similar to JavaScript: >
 	var Lambda = (arg) => expression
-
+	var Lambda = (arg): type => expression
+<							*E1157*
 No line break is allowed in the arguments of a lambda up to and including the
 "=>" (so that Vim can tell the difference between an expression in parentheses
 and lambda arguments).  This is OK: >
@@ -532,7 +534,7 @@
 	filter(list, (k,
 		\	v)
 		\	=> v > 0)
-<							*vim9-lambda-arguments*
+<					*vim9-lambda-arguments* *E1172*
 In legacy script a lambda could be called with any number of extra arguments,
 there was no way to warn for not using them.  In Vim9 script the number of
 arguments must match.  If you do want to accept any arguments, or any further
@@ -541,7 +543,7 @@
 	var Callback = (..._) => 'anything'
 	echo Callback(1, 2, 3)  # displays "anything"
 
-<							*inline-function*
+<						*inline-function* *E1171*
 Additionally, a lambda can contain statements in {}: >
 	var Lambda = (arg) => {
 		g:was_called = 'yes'
@@ -735,7 +737,7 @@
 
 
 White space ~
-				*E1004* *E1068* *E1069* *E1074* *E1127*
+			*E1004* *E1068* *E1069* *E1074* *E1127* *E1202*
 Vim9 script enforces proper use of white space.  This is no longer allowed: >
 	var name=234	# Error!
 	var name= 234	# Error!
@@ -769,7 +771,7 @@
 	Func(
 	      arg	   # OK
 	      )
-
+<							*E1205*
 White space is not allowed in a `:set` command between the option name and a
 following "&", "!", "<", "=", "+=", "-=" or "^=".
 
@@ -779,6 +781,11 @@
 |curly-braces-names| cannot be used.
 
 
+Command modifiers are not ignored ~
+								*E1176*
+Using a command modifier for a command that does not use it gives an error.
+
+
 Dictionary literals ~
 						*vim9-literal-dict* *E1014*
 Traditionally Vim has supported dictionary literals with a {} syntax: >
@@ -837,7 +844,7 @@
 
 
 For loop ~
-
+							*E1254*
 The loop variable must not be declared yet: >
 	var i = 1
 	for i in [1, 2, 3]   # Error!
@@ -1103,7 +1110,7 @@
 			later in Vim9 script.  They can only be removed by
 			reloading the same script.
 
-							*:enddef* *E1057*
+					*:enddef* *E1057* *E1152* *E1173*
 :enddef			End of a function defined with `:def`. It should be on
 			a line by its own.
 
@@ -1182,6 +1189,67 @@
 	echo range(5)->map((i, _) => flist[i]())
 	# Result: [0, 1, 2, 3, 4]
 
+In some situations, especially when calling a Vim9 closure from legacy
+context, the evaluation will fail.  *E1248*
+
+
+Converting a function from legacy to Vim9 ~
+					*convert_legacy_function_to_vim9*
+These are the most changes that need to be made to convert a legacy function
+to a Vim9 function:
+
+- Change `func` or `function` to `def`.
+- Change `endfunc` or `endfunction` to `enddef`.
+- Add types to the function arguments.
+- If the function returns something, add the return type.
+- Change comments to start with # instead of ".
+
+  For example, a legacy function: >
+	func MyFunc(text)
+	  " function body
+	endfunc
+<  Becomes: >
+	def MyFunc(text: string): number
+	  # function body
+	enddef
+
+- Remove "a:" used for arguments. E.g.: >
+	return len(a:text)
+<  Becomes: >
+	return len(text)
+
+- Change `let` used to declare a variable to `var`.
+- Remove `let` used to assign a value to a variable.  This is for local
+  variables already declared and b: w: g: and t: variables.
+
+  For example, legacy function: >
+	  let lnum = 1
+	  let lnum += 3
+	  let b:result = 42
+<  Becomes: >
+	  var lnum = 1
+	  lnum += 3
+	  b:result = 42
+
+- Insert white space in expressions where needed.
+- Change "." used for concatenation to "..".
+
+  For example, legacy function: >
+	  echo line(1).line(2)
+<  Becomes: >
+	  echo line(1) .. line(2)
+
+- line continuation does not always require a backslash: >
+  	echo ['one',
+		\ 'two',
+		\ 'three'
+		\ ]
+<  Becomes: >
+	echo ['one',
+		'two',
+		'three'
+		]
+
 ==============================================================================
 
 4. Types					*vim9-types*
@@ -1208,7 +1276,7 @@
 
 These types can be used in declarations, but no simple value will actually
 have the "void" type.  Trying to use a void (e.g. a function without a
-return value) results in error *E1031* .
+return value) results in error *E1031*  *E1186* .
 
 There is no array type, use list<{type}> instead.  For a list constant an
 efficient implementation is used that avoids allocating lot of small pieces of
@@ -1346,7 +1414,7 @@
 such as "123", but leads to unexpected problems (and no error message) if the
 string doesn't start with a number.  Quite often this leads to hard-to-find
 bugs.
-
+							*E1206* *E1210* *E1212*
 In Vim9 script this has been made stricter.  In most places it works just as
 before, if the value used matches the expected type.  There will sometimes be
 an error, thus breaking backwards compatibility.  For example:
@@ -1368,9 +1436,15 @@
 	# typename(mylist) == "list<any>"
 	map(mylist, (i, v) => 'item ' .. i)
 	# typename(mylist) == "list<string>", no error
-
+<								*E1158*
 Same for |extend()|, use |extendnew()| instead, and for |flatten()|, use
 |flattennew()| instead.
+			 *E1211* *E1217* *E1218* *E1219* *E1220* *E1221*
+			 *E1222* *E1223* *E1224* *E1225* *E1226* *E1227*
+			 *E1228* *E1238* *E1250* *E1251* *E1252* *E1253*
+			 *E1256*
+Types are checked for most builtin functions to make it easier to spot
+mistakes.
 
 ==============================================================================
 
@@ -1459,16 +1533,16 @@
 
 
 Import ~
-					*:import* *:imp* *E1094* *E1047*
-					*E1048* *E1049* *E1053* *E1071*
+					*:import* *:imp* *E1094* *E1047* *E1262*
+					*E1048* *E1049* *E1053* *E1071* *E1236*
 The exported items can be imported in another Vim9 script: >
 	import "myscript.vim"
 
 This makes each item available as "myscript.item".
-							*:import-as*
+						*:import-as* *E1257* *E1261*
 In case the name is long or ambiguous, another name can be specified: >
 	import "thatscript.vim" as that
-<							*E1060*
+<						*E1060* *E1258* *E1259* *E1260*
 Then you can use "that.EXPORTED_CONST", "that.someValue", etc.  You are free
 to choose the name "that".  Use something that will be recognized as referring
 to the imported script.  Avoid command names, command modifiers and builtin
@@ -1526,17 +1600,19 @@
 	echo that
 		.name  # Error!
 <							*:import-cycle*
-The `import` commands are executed when encountered.  If that script (directly
-or indirectly) imports the current script, then items defined after the
-`import` won't be processed yet.  Therefore cyclic imports can exist, but may
-result in undefined items.
+The `import` commands are executed when encountered.  If script A imports
+script B, and B (directly or indirectly) imports A, this will be skipped over.
+At this point items in A after "import B" will not have been processed and
+defined yet.  Therefore cyclic imports can exist and not result in an error
+directly, but may result in an error for items in A after "import B" not being
+defined.  This does not apply to autoload imports, see the next section.
 
 
 Importing an autoload script ~
 							*vim9-autoload*
 For optimal startup speed, loading scripts should be postponed until they are
 actually needed.  Using the autoload mechanism is recommended:
-
+							*E1264*
 1. In the plugin define user commands, functions and/or mappings that refer to
    items imported from an autoload script. >
 	import autoload 'for/search.vim'
diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt
index 79d00a7..2906298 100644
--- a/runtime/doc/windows.txt
+++ b/runtime/doc/windows.txt
@@ -1,4 +1,4 @@
-*windows.txt*   For Vim version 8.2.  Last change: 2022 Jan 08
+*windows.txt*   For Vim version 8.2.  Last change: 2022 Feb 03
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -168,7 +168,7 @@
 		Note: CTRL-S does not work on all terminals and might block
 		further input, use CTRL-Q to get going again.
 		Also see |++opt| and |+cmd|.
-							*E242*
+							*E242* *E1159*
 		Be careful when splitting a window in an autocommand, it may
 		mess up the window layout if this happens while making other
 		window layout changes.
diff --git a/runtime/gvim.desktop b/runtime/gvim.desktop
index 68c5eee..2fc06c2 100644
--- a/runtime/gvim.desktop
+++ b/runtime/gvim.desktop
@@ -6,6 +6,7 @@
 Name[eo]=GVim
 Name[fi]=GVim
 Name[fr]=GVim
+Name[ga]=GVim
 Name[it]=GVim
 Name[ru]=GVim
 Name[sr]=GVim
@@ -16,6 +17,7 @@
 GenericName[eo]=Tekstoredaktilo
 GenericName[fi]=Tekstinmuokkain
 GenericName[fr]=Éditeur de texte
+GenericName[ga]=Eagarthóir Téacs
 GenericName[it]=Editor di testi
 GenericName[ja]=テキストエディタ
 GenericName[ru]=Текстовый редактор
@@ -27,6 +29,7 @@
 Comment[eo]=Redakti tekstajn dosierojn
 Comment[fi]=Muokkaa tekstitiedostoja
 Comment[fr]=Éditer des fichiers texte
+Comment[ga]=Cuir comhaid téacs in eagar
 Comment[it]=Edita file di testo
 Comment[ja]=テキストファイルを編集します
 Comment[ru]=Редактирование текстовых файлов
@@ -57,7 +60,6 @@
 Comment[et]=Redigeeri tekstifaile
 Comment[eu]=Editatu testu-fitxategiak
 Comment[fa]=ویرایش پرونده‌های متنی
-Comment[ga]=Eagar comhad Téacs
 Comment[gu]=લખાણ ફાઇલોમાં ફેરફાર કરો
 Comment[he]=ערוך קבצי טקסט
 Comment[hi]=पाठ फ़ाइलें संपादित करें
@@ -107,6 +109,7 @@
 Keywords[eo]=Teksto;redaktilo;
 Keywords[fi]=Teksti;muokkain;editori;
 Keywords[fr]=Texte;éditeur;
+Keywords[ga]=Téacs;eagarthóir;
 Keywords[it]=Testo;editor;
 Keywords[ja]=テキスト;エディタ;
 Keywords[ru]=текст;текстовый редактор;
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index 022439c..ae70087 100644
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	Vim 8.2 script
 " Maintainer:	Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
-" Last Change:	January 30, 2022
-" Version:	8.2-26
+" Last Change:	February 01, 2022
+" Version:	8.2-27
 " URL:	http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM
 " Automatically generated keyword lists: {{{1
 
@@ -78,12 +78,12 @@
 syn case match
 
 " Function Names {{{2
-syn keyword vimFuncName contained	abs argc assert_equal assert_match atan browse bufloaded byteidx charclass chdir ch_log ch_sendexpr col copy debugbreak diff_hlID empty execute expandcmd filter floor foldlevel function getchangelist getcmdline getcursorcharpos getftime getmarklist getreg gettagstack getwinvar has_key histget hlset input inputsecret isdirectory job_getchannel job_stop json_encode line listener_add log10 mapnew matcharg matchlist min nr2char popup_beval popup_filter_menu 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 setenv setpos settagstack sign_define sign_placelist sin soundfold spellsuggest str2float strchars string strtrans swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled terminalprops term_setapi term_wait test_garbagecollect_soon test_null_channel test_null_partial test_scrollbar test_void timer_stopall trunc uniq winbufnr win_getid win_id2win winnr win_splitmove
-syn keyword vimFuncName contained	acos argidx assert_equalfile assert_nobeep atan2 browsedir bufname byteidxcomp charcol ch_evalexpr ch_logfile ch_sendraw complete cos deepcopy digraph_get environ exepath extend finddir fmod foldtext garbagecollect getchar getcmdpos getcwd getftype getmatches getreginfo gettext glob haslocaldir histnr hostname inputdialog insert isinf job_info join keys line2byte listener_flush luaeval mapset matchdelete matchstr mkdir or popup_clear popup_filter_yesno popup_hide popup_notification prevnonblank prompt_setprompt prop_list prop_type_get pyeval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcharpos setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playevent split str2list strdisplaywidth strlen strwidth synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_list term_setkill test_alloc_fail test_getvalue test_null_dict test_null_string test_setmouse timer_info tolower type values wincol win_gettype winlayout winrestcmd winwidth
-syn keyword vimFuncName contained	add arglistid assert_exception assert_notequal balloon_gettext bufadd bufnr call charidx ch_evalraw ch_open ch_setoptions complete_add cosh delete digraph_getlist escape exists extendnew findfile fnameescape foldtextresult get getcharmod getcmdtype getenv getimstatus getmousepos getregtype getwininfo glob2regpat hasmapto hlexists iconv inputlist internal_get_nv_cmdchar islocked job_setoptions js_decode len lispindent listener_remove map match matchend matchstrpos mode pathshorten popup_close 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 setline setreg sha256 sign_getplaced sign_unplace slice sound_playfile sqrt str2nr strftime strpart submatch synID systemlist taglist term_dumpload term_getcursor term_getstatus term_scrape term_setrestore test_autochdir test_gui_event test_null_function test_option_not_set test_settime timer_pause toupper typename virtcol windowsversion win_gotoid winline winrestview wordcount
-syn keyword vimFuncName contained	and argv assert_fails assert_notmatch balloon_show bufexists bufwinid ceil ch_canread ch_getbufnr ch_read ch_status complete_check count deletebufline digraph_set eval exists_compiled feedkeys flatten fnamemodify foreground getbufinfo getcharpos getcmdwintype getfontname getjumplist getpid gettabinfo getwinpos globpath histadd hlget indent inputrestore interrupt isnan job_start js_encode libcall list2blob localtime maparg matchadd matchfuzzy max mzeval perleval popup_create 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 setcmdpos setloclist settabvar shellescape sign_jump sign_unplacelist sort sound_stop srand strcharlen strgetchar strptime substitute synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_sendkeys term_setsize test_feedinput test_ignore_error test_null_job test_override test_srand_seed timer_start tr undofile visualmode win_execute winheight win_move_separator winsaveview writefile
-syn keyword vimFuncName contained	append asin assert_false assert_report balloon_split buflisted bufwinnr changenr ch_close ch_getjob ch_readblob cindent complete_info cscope_connection did_filetype digraph_setlist eventhandler exp filereadable flattennew foldclosed fullcommand getbufline getcharsearch getcompletion getfperm getline getpos gettabvar getwinposx has histdel hlID index inputsave invert items job_status json_decode libcallnr list2str log mapcheck matchaddpos matchfuzzypos menu_info nextnonblank popup_atcursor popup_dialog popup_getoptions popup_menu popup_show prompt_setcallback prop_clear prop_type_change pumvisible range reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setcursorcharpos setmatches settabwinvar shiftwidth sign_place simplify sound_clear spellbadword state strcharpart stridx strridx swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setansicolors term_start test_garbagecollect_now test_null_blob test_null_list test_refcount test_unknown timer_stop trim undotree wildmenumode win_findbuf win_id2tabwin win_move_statusline win_screenpos xor
-syn keyword vimFuncName contained	appendbufline assert_beeps assert_inrange assert_true blob2list bufload byte2line char2nr ch_close_in ch_info ch_readraw clearmatches confirm cursor diff_filler echoraw executable expand filewritable float2nr foldclosedend funcref getbufvar getcharstr getcurpos getfsize getloclist getqflist gettabwinvar getwinposy
+syn keyword vimFuncName contained	abs argc assert_equal assert_match atan browse bufloaded byteidx charclass chdir ch_log ch_sendexpr col copy debugbreak diff_hlID empty execute expandcmd filter floor foldlevel function getchangelist getcmdline getcursorcharpos getftime getmarklist getreg gettabwinvar getwinposx globpath histadd hlget indent inputrestore invert items job_status json_decode libcallnr list2str log mapcheck matchaddpos matchfuzzypos menu_info nextnonblank popup_atcursor popup_dialog popup_getoptions popup_menu popup_show prompt_setcallback prop_clear prop_type_change pumvisible range reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setcursorcharpos setmatches settabwinvar shiftwidth sign_place simplify sound_clear spellbadword state strcharpart stridx strridx swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setansicolors term_start test_garbagecollect_now test_null_blob test_null_list test_refcount test_void timer_stopall trunc uniq winbufnr win_getid win_id2win winnr win_splitmove
+syn keyword vimFuncName contained	acos argidx assert_equalfile assert_nobeep atan2 browsedir bufname byteidxcomp charcol ch_evalexpr ch_logfile ch_sendraw complete cos deepcopy digraph_get environ exepath extend finddir fmod foldtext garbagecollect getchar getcmdpos getcwd getftype getmatches getreginfo gettagstack getwinposy has histdel hlID index inputsave isdirectory job_getchannel job_stop json_encode line listener_add log10 mapnew matcharg matchlist min nr2char popup_beval popup_filter_menu 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 setenv setpos settagstack sign_define sign_placelist sin soundfold spellsuggest str2float strchars string strtrans swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled terminalprops term_setapi term_wait test_garbagecollect_soon test_null_channel test_null_partial test_setmouse timer_info tolower type values wincol win_gettype winlayout winrestcmd winwidth
+syn keyword vimFuncName contained	add arglistid assert_exception assert_notequal balloon_gettext bufadd bufnr call charidx ch_evalraw ch_open ch_setoptions complete_add cosh delete digraph_getlist escape exists extendnew findfile fnameescape foldtextresult get getcharmod getcmdtype getenv getimstatus getmousepos getregtype gettext getwinvar has_key histget hlset input inputsecret isinf job_info join keys line2byte listener_flush luaeval mapset matchdelete matchstr mkdir or popup_clear popup_filter_yesno popup_hide popup_notification prevnonblank prompt_setprompt prop_list prop_type_get pyeval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcharpos setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playevent split str2list strdisplaywidth strlen strwidth synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_list term_setkill test_alloc_fail test_getvalue test_null_dict test_null_string test_settime timer_pause toupper typename virtcol windowsversion win_gotoid winline winrestview wordcount
+syn keyword vimFuncName contained	and argv assert_fails assert_notmatch balloon_show bufexists bufwinid ceil ch_canread ch_getbufnr ch_read ch_status complete_check count deletebufline digraph_set eval exists_compiled feedkeys flatten fnamemodify foreground getbufinfo getcharpos getcmdwintype getfontname getjumplist getpid gettabinfo getwininfo glob haslocaldir histnr hostname inputdialog insert islocked job_setoptions js_decode len lispindent listener_remove map match matchend matchstrpos mode pathshorten popup_close 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 setline setreg sha256 sign_getplaced sign_unplace slice sound_playfile sqrt str2nr strftime strpart submatch synID systemlist taglist term_dumpload term_getcursor term_getstatus term_scrape term_setrestore test_autochdir test_gui_event test_null_function test_option_not_set test_srand_seed timer_start tr undofile visualmode win_execute winheight win_move_separator winsaveview writefile
+syn keyword vimFuncName contained	append asin assert_false assert_report balloon_split buflisted bufwinnr changenr ch_close ch_getjob ch_readblob cindent complete_info cscope_connection did_filetype digraph_setlist eventhandler exp filereadable flattennew foldclosed fullcommand getbufline getcharsearch getcompletion getfperm getline getpos gettabvar getwinpos glob2regpat hasmapto hlexists iconv inputlist interrupt isnan job_start js_encode libcall list2blob localtime maparg matchadd matchfuzzy max mzeval perleval popup_create 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 setcmdpos setloclist settabvar shellescape sign_jump sign_unplacelist sort sound_stop srand strcharlen strgetchar strptime substitute synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_sendkeys term_setsize test_feedinput test_ignore_error test_null_job test_override test_unknown timer_stop trim undotree wildmenumode win_findbuf win_id2tabwin win_move_statusline win_screenpos xor
+syn keyword vimFuncName contained	appendbufline assert_beeps assert_inrange assert_true blob2list bufload byte2line char2nr ch_close_in ch_info ch_readraw clearmatches confirm cursor diff_filler echoraw executable expand filewritable float2nr foldclosedend funcref getbufvar getcharstr getcurpos getfsize getloclist getqflist
 
 "--- syntax here and above generated by mkvimvim ---
 " Special Vim Highlighting (not automatic) {{{1
diff --git a/runtime/vim.desktop b/runtime/vim.desktop
index 3bdaed9..2d6e7c1 100644
--- a/runtime/vim.desktop
+++ b/runtime/vim.desktop
@@ -6,6 +6,7 @@
 Name[eo]=Vim
 Name[fi]=Vim
 Name[fr]=Vim
+Name[ga]=Vim
 Name[it]=Vim
 Name[ru]=Vim
 Name[sr]=Vim
@@ -16,6 +17,7 @@
 GenericName[eo]=Tekstoredaktilo
 GenericName[fi]=Tekstinmuokkain
 GenericName[fr]=Éditeur de texte
+GenericName[ga]=Eagarthóir Téacs
 GenericName[it]=Editor di testi
 GenericName[ja]=テキストエディタ
 GenericName[ru]=Текстовый редактор
@@ -27,6 +29,7 @@
 Comment[eo]=Redakti tekstajn dosierojn
 Comment[fi]=Muokkaa tekstitiedostoja
 Comment[fr]=Éditer des fichiers texte
+Comment[ga]=Cuir comhaid téacs in eagar
 Comment[it]=Edita file di testo
 Comment[ja]=テキストファイルを編集します
 Comment[ru]=Редактирование текстовых файлов
@@ -57,7 +60,6 @@
 Comment[et]=Redigeeri tekstifaile
 Comment[eu]=Editatu testu-fitxategiak
 Comment[fa]=ویرایش پرونده‌های متنی
-Comment[ga]=Eagar comhad Téacs
 Comment[gu]=લખાણ ફાઇલોમાં ફેરફાર કરો
 Comment[he]=ערוך קבצי טקסט
 Comment[hi]=पाठ फ़ाइलें संपादित करें
@@ -107,6 +109,7 @@
 Keywords[eo]=Teksto;redaktilo;
 Keywords[fi]=Teksti;muokkain;editori;
 Keywords[fr]=Texte;éditeur;
+Keywords[ga]=Téacs;eagarthóir;
 Keywords[it]=Testo;editor;
 Keywords[ja]=テキスト;エディタ;
 Keywords[ru]=текст;текстовый редактор;
