diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim
index 1b32115..d4e7be4 100644
--- a/runtime/autoload/dist/ft.vim
+++ b/runtime/autoload/dist/ft.vim
@@ -893,4 +893,4 @@
 
 
 # Uncomment this line to check for compilation errors early
-defcompile
+# defcompile
diff --git a/runtime/doc/uganda.txt b/runtime/doc/uganda.txt
index 8ea8975..a71cf03 100644
--- a/runtime/doc/uganda.txt
+++ b/runtime/doc/uganda.txt
@@ -1,4 +1,4 @@
-*uganda.txt*    For Vim version 8.2.  Last change: 2020 Jan 08
+*uganda.txt*    For Vim version 8.2.  Last change: 2022 Feb 04
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -11,9 +11,9 @@
 encouraged to make a donation for needy children in Uganda.  Please see |kcc|
 below or visit the ICCF web site, available at these URLs:
 
-	http://iccf-holland.org/
-	http://www.vim.org/iccf/
-	http://www.iccf.nl/
+	https://iccf-holland.org/
+	https://www.vim.org/iccf/
+	https://www.iccf.nl/
 
 You can also sponsor the development of Vim.  Vim sponsors can vote for
 features.  See |sponsor|.  The money goes to Uganda anyway.
@@ -169,10 +169,11 @@
 production site for cement slabs.  These are used to build a good latrine.
 They are sold below cost price.
 
-There is a small clinic at the project, which provides children and their
-family with medical help.  When needed, transport to a hospital is offered.
-Immunization programs are carried out and help is provided when an epidemic is
-breaking out (measles and cholera have been a problem).
+There is a clinic at the project, which provides children and their family
+medical help.  Since 2020 a maternity ward was added and 24/7 service is
+available.  When needed, transport to a hospital is offered.  Immunization
+programs are carried out and help is provided when an epidemic is breaking out
+(measles and cholera have been a problem).
 							*donate*
 Summer 1994 to summer 1995 I spent a whole year at the centre, working as a
 volunteer.  I have helped to expand the centre and worked in the area of water
@@ -214,44 +215,29 @@
 
 
 USA:		The methods mentioned below can be used.
-		Sending a check to the Nehemiah Group Outreach Society (NGOS)
-		is no longer possible, unfortunately. We are looking for
-		another way to get you an IRS tax receipt.
-		For sponsoring a child contact KCF in Canada (see below). US
-		checks can be sent to them to lower banking costs.
+		If you must send a check send it to our Canadian partner:
+		https://www.kuwasha.net/
 
-Canada:		Contact Kibaale Children's Fund (KCF) in Surrey, Canada.  They
-		take care of the Canadian sponsors for the children in
-		Kibaale.  KCF forwards 100% of the money to the project in
-		Uganda.  You can send them a one time donation directly.
+Canada:		Contact Kuwasha in Surrey, Canada.  They take care of the
+		Canadian sponsors for the children in Kibaale.  Kuwasha
+		forwards 100% of the money to the project in Uganda.  You can
+		send them a one time donation directly.
 		Please send me a note so that I know what has been donated
-		because of Vim.  Ask KCF for information about sponsorship.
-			Kibaale Children's Fund c/o Pacific Academy
-			10238-168 Street
-			Surrey, B.C. V4N 1Z4
-			Canada
-			Phone: 604-581-5353
-		If you make a donation to Kibaale Children's Fund (KCF) you
-		will receive a tax receipt which can be submitted with your
-		tax return.
+		because of Vim.  Look on their for information about
+		sponsorship: https://www.kuwasha.net/
+		If you make a donation to Kuwasha you will receive a tax
+		receipt which can be submitted with your tax return.
 
-Holland:	Transfer to the account of "Stichting ICCF Holland" in Lisse.
-		This will allow for tax deduction if you live in Holland.
-			Postbank, nr. 4548774
-			IBAN: NL95 INGB 0004 5487 74
+Holland:	Transfer to the account of "Stichting ICCF Holland" in
+		Amersfoort.  This will allow for tax deduction if you live in
+		Holland.  ING bank, IBAN: NL95 INGB 0004 5487 74
 
 Germany:	It is possible to make donations that allow for a tax return.
 		Check the ICCF web site for the latest information:
-			http://iccf-holland.org/germany.html
+			https://iccf-holland.org/germany.html
 
-World:		Use a postal money order.  That should be possible from any
-		country, mostly from the post office.  Use this name (which is
-		in my passport): "Abraham Moolenaar".  Use Euro for the
-		currency if possible.
-
-Europe:		Use a bank transfer if possible.  Your bank should have a form
-		that you can use for this.  See "Others" below for the swift
-		code and IBAN number.
+Europe:		Use a bank transfer if possible.  See "Others" below for the
+		swift code and IBAN number.
 		Any other method should work.  Ask for information about
 		sponsorship.
 
@@ -261,28 +247,12 @@
 		    https://www.paypal.com/en_US/mrb/pal=XAC62PML3GF8Q
 		The e-mail address for sending the money to is:
 		    Bram@iccf-holland.org
-		For amounts above 400 Euro ($500) sending a check is
-		preferred.
 
 Others:		Transfer to one of these accounts if possible:
-		    Postbank, account 4548774
-				Swift code: INGB NL 2A
-				IBAN: NL95 INGB 0004 5487 74
-			under the name "stichting ICCF Holland", Lisse
-		    If that doesn't work:
-		    Rabobank Lisse, account 3765.05.117
-				Swift code: RABO NL 2U
-			under the name "Bram Moolenaar", Lisse
-		Otherwise, send a check in euro or US dollars to the address
-		below.  Minimal amount: $70 (my bank does not accept smaller
-		amounts for foreign check, sorry)
+		    ING bank: 	IBAN: NL95 INGB 0004 5487 74
+				Swift code: INGBNL2A
+		    under the name "stichting ICCF Holland", Amersfoort
+		Checks are not accepted.
 
-Address to send checks to:
-			Bram Moolenaar
-			Finsterruetihof 1
-			8134 Adliswil
-			Switzerland
-
-This address is expected to be valid for a long time.
 
  vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/runtime/ftplugin.vim b/runtime/ftplugin.vim
index a434b93..645f8c3 100644
--- a/runtime/ftplugin.vim
+++ b/runtime/ftplugin.vim
@@ -1,7 +1,7 @@
 " Vim support file to switch on loading plugins for file types
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last change:	2006 Apr 30
+" Last change:	2022 Feb 04
 
 if exists("did_load_ftplugin")
   finish
@@ -10,26 +10,26 @@
 
 augroup filetypeplugin
   au FileType * call s:LoadFTPlugin()
-
-  func! s:LoadFTPlugin()
-    if exists("b:undo_ftplugin")
-      exe b:undo_ftplugin
-      unlet! b:undo_ftplugin b:did_ftplugin
-    endif
-
-    let s = expand("<amatch>")
-    if s != ""
-      if &cpo =~# "S" && exists("b:did_ftplugin")
-	" In compatible mode options are reset to the global values, need to
-	" set the local values also when a plugin was already used.
-	unlet b:did_ftplugin
-      endif
-
-      " When there is a dot it is used to separate filetype names.  Thus for
-      " "aaa.bbb" load "aaa" and then "bbb".
-      for name in split(s, '\.')
-	exe 'runtime! ftplugin/' . name . '.vim ftplugin/' . name . '_*.vim ftplugin/' . name . '/*.vim'
-      endfor
-    endif
-  endfunc
 augroup END
+
+def s:LoadFTPlugin()
+  if exists("b:undo_ftplugin")
+    exe b:undo_ftplugin
+    unlet! b:undo_ftplugin b:did_ftplugin
+  endif
+
+  var s = expand("<amatch>")
+  if s != ""
+    if &cpo =~# "S" && exists("b:did_ftplugin")
+      # In compatible mode options are reset to the global values, need to
+      # set the local values also when a plugin was already used.
+      unlet b:did_ftplugin
+    endif
+
+    # When there is a dot it is used to separate filetype names.  Thus for
+    # "aaa.bbb" load "aaa" and then "bbb".
+    for name in split(s, '\.')
+      exe 'runtime! ftplugin/' .. name .. '.vim ftplugin/' .. name .. '_*.vim ftplugin/' .. name .. '/*.vim'
+    endfor
+  endif
+enddef
diff --git a/runtime/indent.vim b/runtime/indent.vim
index 12f0364..acddb92 100644
--- a/runtime/indent.vim
+++ b/runtime/indent.vim
@@ -1,7 +1,7 @@
 " Vim support file to switch on loading indent files for file types
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2008 Feb 22
+" Last Change:	2022 Feb 04
 
 if exists("did_indent_on")
   finish
@@ -10,22 +10,23 @@
 
 augroup filetypeindent
   au FileType * call s:LoadIndent()
-  func! s:LoadIndent()
-    if exists("b:undo_indent")
-      exe b:undo_indent
-      unlet! b:undo_indent b:did_indent
-    endif
-    let s = expand("<amatch>")
-    if s != ""
-      if exists("b:did_indent")
-	unlet b:did_indent
-      endif
-
-      " When there is a dot it is used to separate filetype names.  Thus for
-      " "aaa.bbb" load "indent/aaa.vim" and then "indent/bbb.vim".
-      for name in split(s, '\.')
-	exe 'runtime! indent/' . name . '.vim'
-      endfor
-    endif
-  endfunc
 augroup END
+
+def s:LoadIndent()
+  if exists("b:undo_indent")
+    exe b:undo_indent
+    unlet! b:undo_indent b:did_indent
+  endif
+  var s = expand("<amatch>")
+  if s != ""
+    if exists("b:did_indent")
+      unlet b:did_indent
+    endif
+
+    # When there is a dot it is used to separate filetype names.  Thus for
+    # "aaa.bbb" load "indent/aaa.vim" and then "indent/bbb.vim".
+    for name in split(s, '\.')
+      exe 'runtime! indent/' .. name .. '.vim'
+    endfor
+  endif
+enddef
diff --git a/runtime/makemenu.vim b/runtime/makemenu.vim
index 6173d8b..43f2eb6 100644
--- a/runtime/makemenu.vim
+++ b/runtime/makemenu.vim
@@ -1,52 +1,54 @@
-" Script to define the syntax menu in synmenu.vim
-" Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2019 Dec 07
+vim9script
 
-" This is used by "make menu" in the src directory.
+# Script to define the syntax menu in synmenu.vim
+# Maintainer:	Bram Moolenaar <Bram@vim.org>
+# Last Change:	2022 Feb 04
+
+# This is used by "make menu" in the src directory.
 edit <sfile>:p:h/synmenu.vim
 
-/The Start Of The Syntax Menu/+1,/The End Of The Syntax Menu/-1d
-let s:lnum = line(".") - 1
-call append(s:lnum, "")
-let s:lnum = s:lnum + 1
+:/The Start Of The Syntax Menu/+1,/The End Of The Syntax Menu/-1d
+var lnum = line(".") - 1
+call append(lnum, "")
+lnum += 1
 
-" Use the SynMenu command and function to define all menu entries
-command! -nargs=* SynMenu call <SID>Syn(<q-args>)
+# Use the SynMenu command and function to define all menu entries
+command! -nargs=* SynMenu call Syn(<q-args>)
 
-let s:cur_menu_name = ""
-let s:cur_menu_nr = 0
-let s:cur_menu_item = 0
-let s:cur_menu_char = ""
+var cur_menu_name = ""
+var cur_menu_nr = 0
+var cur_menu_item = 0
+var cur_menu_char = ""
 
-fun! <SID>Syn(arg)
-  " isolate menu name: until the first dot
-  let i = match(a:arg, '\.')
-  let menu_name = strpart(a:arg, 0, i)
-  let r = strpart(a:arg, i + 1, 999)
-  " isolate submenu name: until the colon
-  let i = match(r, ":")
-  let submenu_name = strpart(r, 0, i)
-  " after the colon is the syntax name
-  let syntax_name = strpart(r, i + 1, 999)
+def Syn(arg: string)
+  # isolate menu name: until the first dot
+  var i = match(arg, '\.')
+  var menu_name = strpart(arg, 0, i)
+  var r = strpart(arg, i + 1, 999)
+  # isolate submenu name: until the colon
+  i = match(r, ":")
+  var submenu_name = strpart(r, 0, i)
+  # after the colon is the syntax name
+  var syntax_name = strpart(r, i + 1, 999)
 
-  if s:cur_menu_name != menu_name
-    let s:cur_menu_name = menu_name
-    let s:cur_menu_nr = s:cur_menu_nr + 10
-    let s:cur_menu_item = 100
-    let s:cur_menu_char = submenu_name[0]
+  if cur_menu_name != menu_name
+    cur_menu_name = menu_name
+    cur_menu_nr += 10
+    cur_menu_item = 100
+    cur_menu_char = submenu_name[0]
   else
-    " When starting a new letter, insert a menu separator.
-    let c = submenu_name[0]
+    # When starting a new letter, insert a menu separator.
+    var c = submenu_name[0]
     if c != s:cur_menu_char
-      exe 'an 50.' . s:cur_menu_nr . '.' . s:cur_menu_item . ' &Syntax.' . menu_name . ".-" . c . '- <nul>'
-      let s:cur_menu_item = s:cur_menu_item + 10
-      let s:cur_menu_char = c
+      exe 'an 50.' .. s:cur_menu_nr .. '.' .. s:cur_menu_item .. ' &Syntax.' .. menu_name .. ".-" .. c .. '- <nul>'
+      cur_menu_item += 10
+      cur_menu_char = c
     endif
   endif
-  call append(s:lnum, 'an 50.' . s:cur_menu_nr . '.' . s:cur_menu_item . ' &Syntax.' . menu_name . "." . submenu_name . ' :cal SetSyn("' . syntax_name . '")<CR>')
-  let s:cur_menu_item = s:cur_menu_item + 10
-  let s:lnum = s:lnum + 1
-endfun
+  append(lnum, 'an 50.' .. s:cur_menu_nr .. '.' .. s:cur_menu_item .. ' &Syntax.' .. menu_name .. "." .. submenu_name .. ' :cal SetSyn("' .. syntax_name .. '")<CR>')
+  cur_menu_item += 10
+  lnum += 1
+enddef
 
 SynMenu AB.A2ps\ config:a2ps
 SynMenu AB.Aap:aap
@@ -676,6 +678,6 @@
 SynMenu WXYZ.Yacc:yacc
 SynMenu WXYZ.Zimbu:zimbu
 
-call append(s:lnum, "")
+append(lnum, "")
 
 wq
diff --git a/runtime/menu.vim b/runtime/menu.vim
index 5f4e395..0a2bd1f 100644
--- a/runtime/menu.vim
+++ b/runtime/menu.vim
@@ -2,7 +2,7 @@
 " You can also use this as a start for your own set of menus.
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2021 Dec 22
+" Last Change:	2022 Feb 04
 
 " Note that ":an" (short for ":anoremenu") is often used to make a menu work
 " in all modes and avoid side effects from mappings defined by the user.
@@ -33,7 +33,7 @@
   if strlen(s:lang) > 1 && s:lang !~? '^en_us'
     " When the language does not include the charset add 'encoding'
     if s:lang =~ '^\a\a$\|^\a\a_\a\a$'
-      let s:lang = s:lang . '.' . &enc
+      let s:lang = s:lang .. '.' .. &enc
     endif
 
     " We always use a lowercase name.
@@ -49,26 +49,26 @@
     " same menu file for them.
     let s:lang = substitute(s:lang, 'iso_8859-15\=$', "latin1", "")
     menutrans clear
-    exe "runtime! lang/menu_" . s:lang . ".vim"
+    exe "runtime! lang/menu_" .. s:lang .. ".vim"
 
     if !exists("did_menu_trans")
       " There is no exact match, try matching with a wildcard added
       " (e.g. find menu_de_de.iso_8859-1.vim if s:lang == de_DE).
       let s:lang = substitute(s:lang, '\.[^.]*', "", "")
-      exe "runtime! lang/menu_" . s:lang . "[^a-z]*vim"
+      exe "runtime! lang/menu_" .. s:lang .. "[^a-z]*vim"
 
       if !exists("did_menu_trans") && s:lang =~ '_'
 	" If the language includes a region try matching without that region.
 	" (e.g. find menu_de.vim if s:lang == de_DE).
 	let langonly = substitute(s:lang, '_.*', "", "")
-	exe "runtime! lang/menu_" . langonly . "[^a-z]*vim"
+	exe "runtime! lang/menu_" .. langonly .. "[^a-z]*vim"
       endif
 
       if !exists("did_menu_trans") && strlen($LANG) > 1 && s:lang !~ '^en_us'
 	" On windows locale names are complicated, try using $LANG, it might
 	" have been set by set_init_1().  But don't do this for "en" or "en_us".
 	" But don't match "slovak" when $LANG is "sl".
-	exe "runtime! lang/menu_" . tolower($LANG) . "[^a-z]*vim"
+	exe "runtime! lang/menu_" .. tolower($LANG) .. "[^a-z]*vim"
       endif
     endif
   endif
@@ -104,19 +104,19 @@
   tlnoremenu 9999.90 &Help.&About			<C-W>:intro<CR>
 endif
 
-fun! s:Helpfind()
+def s:Helpfind()
   if !exists("g:menutrans_help_dialog")
-    let g:menutrans_help_dialog = "Enter a command or word to find help on:\n\nPrepend i_ for Input mode commands (e.g.: i_CTRL-X)\nPrepend c_ for command-line editing commands (e.g.: c_<Del>)\nPrepend ' for an option name (e.g.: 'shiftwidth')"
+    g:menutrans_help_dialog = "Enter a command or word to find help on:\n\nPrepend i_ for Input mode commands (e.g.: i_CTRL-X)\nPrepend c_ for command-line editing commands (e.g.: c_<Del>)\nPrepend ' for an option name (e.g.: 'shiftwidth')"
   endif
-  let h = inputdialog(g:menutrans_help_dialog)
+  var h = inputdialog(g:menutrans_help_dialog)
   if h != ""
-    let v:errmsg = ""
-    silent! exe "help " . h
+    v:errmsg = ""
+    silent! exe "help " .. h
     if v:errmsg != ""
       echo v:errmsg
     endif
   endif
-endfun
+enddef
 
 " File menu
 an 10.310 &File.&Open\.\.\.<Tab>:e		:browse confirm e<CR>
@@ -154,16 +154,9 @@
 an 10.610 &File.Sa&ve-Exit<Tab>:wqa		:confirm wqa<CR>
 an 10.620 &File.E&xit<Tab>:qa			:confirm qa<CR>
 
-func s:SelectAll()
-  exe "norm! gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
-endfunc
-
-func s:FnameEscape(fname)
-  if exists('*fnameescape')
-    return fnameescape(a:fname)
-  endif
-  return escape(a:fname, " \t\n*?[{`$\\%#'\"|!<")
-endfunc
+def s:SelectAll()
+  exe "norm! gg" .. (&slm == "" ? "VG" : "gH\<C-O>G")
+enddef
 
 " Edit menu
 an 20.310 &Edit.&Undo<Tab>u			u
@@ -182,8 +175,8 @@
 if exists(':tlmenu')
   tlnoremenu	 &Edit.&Paste<Tab>"+gP		<C-W>"+
 endif
-exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP	' . paste#paste_cmd['v']
-exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP	' . paste#paste_cmd['i']
+exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP	' .. paste#paste_cmd['v']
+exe 'inoremenu <script> &Edit.&Paste<Tab>"+gP	' .. paste#paste_cmd['i']
 nnoremenu 20.370 &Edit.Put\ &Before<Tab>[p	[p
 inoremenu	 &Edit.Put\ &Before<Tab>[p	<C-O>[p
 nnoremenu 20.380 &Edit.Put\ &After<Tab>]p	]p
@@ -214,32 +207,33 @@
 an 20.430	 &Edit.Settings\ &Window		:options<CR>
 an 20.435	 &Edit.Startup\ &Settings		:call <SID>EditVimrc()<CR>
 
-fun! s:EditVimrc()
+def s:EditVimrc()
+  var fname: string
   if $MYVIMRC != ''
-    let fname = $MYVIMRC
+    fname = $MYVIMRC
   elseif has("win32")
     if $HOME != ''
-      let fname = $HOME . "/_vimrc"
+      fname = $HOME .. "/_vimrc"
     else
-      let fname = $VIM . "/_vimrc"
+      fname = $VIM .. "/_vimrc"
     endif
   elseif has("amiga")
-    let fname = "s:.vimrc"
+    fname = "s:.vimrc"
   else
-    let fname = $HOME . "/.vimrc"
+    fname = $HOME .. "/.vimrc"
   endif
-  let fname = s:FnameEscape(fname)
+  fname = fnameescape(fname)
   if &mod
-    exe "split " . fname
+    exe "split " .. fname
   else
-    exe "edit " . fname
+    exe "edit " .. fname
   endif
-endfun
+enddef
 
-fun! s:FixFText()
-  " Fix text in nameless register to be used with :promptfind.
+def s:FixFText(): string
+  # Fix text in nameless register to be used with :promptfind.
   return substitute(@", "[\r\n]", '\\n', 'g')
-endfun
+enddef
 
 " Edit/Global Settings
 an 20.440.100 &Edit.&Global\ Settings.Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	:set hls! hls?<CR>
@@ -272,34 +266,34 @@
 an <silent> 20.440.330 &Edit.&Global\ Settings.Toggle\ &Left\ Scrollbar	:call <SID>ToggleGuiOption("l")<CR>
 an <silent> 20.440.340 &Edit.&Global\ Settings.Toggle\ &Right\ Scrollbar :call <SID>ToggleGuiOption("r")<CR>
 
-fun! s:SearchP()
+def s:SearchP()
   if !exists("g:menutrans_path_dialog")
-    let g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
+    g:menutrans_path_dialog = "Enter search path for files.\nSeparate directory names with a comma."
   endif
-  let n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
+  var n = inputdialog(g:menutrans_path_dialog, substitute(&path, '\\ ', ' ', 'g'))
   if n != ""
-    let &path = substitute(n, ' ', '\\ ', 'g')
+    &path = substitute(n, ' ', '\\ ', 'g')
   endif
-endfun
+enddef
 
-fun! s:TagFiles()
+def s:TagFiles()
   if !exists("g:menutrans_tags_dialog")
-    let g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
+    g:menutrans_tags_dialog = "Enter names of tag files.\nSeparate the names with a comma."
   endif
-  let n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
+  var n = inputdialog(g:menutrans_tags_dialog, substitute(&tags, '\\ ', ' ', 'g'))
   if n != ""
-    let &tags = substitute(n, ' ', '\\ ', 'g')
+    &tags = substitute(n, ' ', '\\ ', 'g')
   endif
-endfun
+enddef
 
-fun! s:ToggleGuiOption(option)
-    " If a:option is already set in guioptions, then we want to remove it
-    if match(&guioptions, "\\C" . a:option) > -1
-	exec "set go-=" . a:option
-    else
-	exec "set go+=" . a:option
-    endif
-endfun
+def s:ToggleGuiOption(option: string)
+  # If a:option is already set in guioptions, then we want to remove it
+  if match(&guioptions, "\\C" .. option) > -1
+    exec "set go-=" .. option
+  else
+    exec "set go+=" .. option
+  endif
+enddef
 
 " Edit/File Settings
 
@@ -331,34 +325,36 @@
 
 an <silent> 20.440.630 &Edit.F&ile\ Settings.Te&xt\ Width\.\.\.  :call <SID>TextWidth()<CR>
 an <silent> 20.440.640 &Edit.F&ile\ Settings.&File\ Format\.\.\.  :call <SID>FileFormat()<CR>
-fun! s:TextWidth()
-  if !exists("g:menutrans_textwidth_dialog")
-    let g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
-  endif
-  let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
-  if n != ""
-    " Remove leading zeros to avoid it being used as an octal number.
-    " But keep a zero by itself.
-    let tw = substitute(n, "^0*", "", "")
-    let &tw = tw == '' ? 0 : tw
-  endif
-endfun
 
-fun! s:FileFormat()
+def s:TextWidth()
+  if !exists("g:menutrans_textwidth_dialog")
+    g:menutrans_textwidth_dialog = "Enter new text width (0 to disable formatting): "
+  endif
+  var n = inputdialog(g:menutrans_textwidth_dialog, &tw .. '')
+  if n != ""
+    # Remove leading zeros to avoid it being used as an octal number.
+    # But keep a zero by itself.
+    var tw = substitute(n, "^0*", "", "")
+    &tw = tw == '' ? 0 : tw
+  endif
+enddef
+
+def s:FileFormat()
   if !exists("g:menutrans_fileformat_dialog")
-    let g:menutrans_fileformat_dialog = "Select format for writing the file"
+    g:menutrans_fileformat_dialog = "Select format for writing the file"
   endif
   if !exists("g:menutrans_fileformat_choices")
-    let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
+    g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Cancel"
   endif
+  var def_choice: number
   if &ff == "dos"
-    let def = 2
+    def_choice = 2
   elseif &ff == "mac"
-    let def = 3
+    def_choice = 3
   else
-    let def = 1
+    def_choice = 1
   endif
-  let n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def, "Question")
+  var n = confirm(g:menutrans_fileformat_dialog, g:menutrans_fileformat_choices, def_choice, "Question")
   if n == 1
     set ff=unix
   elseif n == 2
@@ -366,32 +362,33 @@
   elseif n == 3
     set ff=mac
   endif
-endfun
+enddef
 
 let s:did_setup_color_schemes = 0
 
 " Setup the Edit.Color Scheme submenu
-func s:SetupColorSchemes() abort
+def s:SetupColorSchemes()
   if s:did_setup_color_schemes
     return
   endif
-  let s:did_setup_color_schemes = 1
+  s:did_setup_color_schemes = 1
 
-  let n = globpath(&runtimepath, "colors/*.vim", 1, 1)
-  let n += globpath(&packpath, "pack/*/start/*/colors/*.vim", 1, 1)
-  let n += globpath(&packpath, "pack/*/opt/*/colors/*.vim", 1, 1)
+  var n = globpath(&runtimepath, "colors/*.vim", 1, 1)
+  n += globpath(&packpath, "pack/*/start/*/colors/*.vim", 1, 1)
+  n += globpath(&packpath, "pack/*/opt/*/colors/*.vim", 1, 1)
 
-  " Ignore case for VMS and windows, sort on name
-  let names = sort(map(n, 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1)
+  # Ignore case for VMS and windows, sort on name
+  var names = sort(map(n, 'substitute(v:val, "\\c.*[/\\\\:\\]]\\([^/\\\\:]*\\)\\.vim", "\\1", "")'), 1)
 
-  " define all the submenu entries
-  let idx = 100
+  # define all the submenu entries
+  var idx = 100
   for name in names
-    exe "an 20.450." . idx . ' &Edit.C&olor\ Scheme.' . name . " :colors " . name . "<CR>"
-    let idx = idx + 10
+    exe "an 20.450." .. idx .. ' &Edit.C&olor\ Scheme.' .. name .. " :colors " .. name .. "<CR>"
+    idx += 10
   endfor
   silent! aunmenu &Edit.Show\ C&olor\ Schemes\ in\ Menu
-endfun
+enddef
+
 if exists("do_no_lazyload_menus")
   call s:SetupColorSchemes()
 else
@@ -403,31 +400,33 @@
 if has("keymap")
   let s:did_setup_keymaps = 0
 
-  func s:SetupKeymaps() abort
+  def s:SetupKeymaps()
     if s:did_setup_keymaps
       return
     endif
-    let s:did_setup_keymaps = 1
+    s:did_setup_keymaps = 1
 
-    let n = globpath(&runtimepath, "keymap/*.vim", 1, 1)
-    if !empty(n)
-      let idx = 100
+    var names = globpath(&runtimepath, "keymap/*.vim", 1, 1)
+    if !empty(names)
+      var idx = 100
       an 20.460.90 &Edit.&Keymap.None :set keymap=<CR>
-      for name in n
-	" Ignore case for VMS and windows
-	let name = substitute(name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
-	exe "an 20.460." . idx . ' &Edit.&Keymap.' . name . " :set keymap=" . name . "<CR>"
-	let idx = idx + 10
+      for name in names
+	# Ignore case for VMS and windows
+	var mapname = substitute(name, '\c.*[/\\:\]]\([^/\\:_]*\)\(_[0-9a-zA-Z-]*\)\=\.vim', '\1', '')
+	exe "an 20.460." .. idx .. ' &Edit.&Keymap.' .. mapname .. " :set keymap=" .. mapname .. "<CR>"
+	idx += 10
       endfor
     endif
     silent! aunmenu &Edit.Show\ &Keymaps\ in\ Menu
-  endfun
+  enddef
+
   if exists("do_no_lazyload_menus")
     call s:SetupKeymaps()
   else
     an <silent> 20.460 &Edit.Show\ &Keymaps\ in\ Menu :call <SID>SetupKeymaps()<CR>
   endif
 endif
+
 if has("win32") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
   an 20.470 &Edit.Select\ Fo&nt\.\.\.	:set guifont=*<CR>
 endif
@@ -445,7 +444,7 @@
 vunmenu &Tools.&Jump\ to\ This\ Tag<Tab>g^]
 vnoremenu &Tools.&Jump\ to\ This\ Tag<Tab>g^]	g<C-]>
 an 40.310 &Tools.Jump\ &Back<Tab>^T		<C-T>
-an 40.320 &Tools.Build\ &Tags\ File		:exe "!" . g:ctags_command<CR>
+an 40.320 &Tools.Build\ &Tags\ File		:exe "!" .. g:ctags_command<CR>
 
 if has("folding") || has("spell")
   an 40.330 &Tools.-SEP1-						<Nop>
@@ -469,50 +468,47 @@
   an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages	:call <SID>SpellLang()<CR>
 
   let s:undo_spelllang = ['aun &Tools.&Spelling.&Find\ More\ Languages']
-  func s:SpellLang()
+  def s:SpellLang()
     for cmd in s:undo_spelllang
-      exe "silent! " . cmd
+      exe "silent! " .. cmd
     endfor
-    let s:undo_spelllang = []
+    s:undo_spelllang = []
 
-    if &enc == "iso-8859-15"
-      let enc = "latin1"
-    else
-      let enc = &enc
-    endif
+    var enc = &enc == "iso-8859-15" ? "latin1" : &enc
 
     if !exists("g:menutrans_set_lang_to")
-      let g:menutrans_set_lang_to = 'Set Language to'
+      g:menutrans_set_lang_to = 'Set Language to'
     endif
 
-    let found = 0
-    let s = globpath(&runtimepath, "spell/*." . enc . ".spl", 1, 1)
-    if !empty(s)
-      let n = 300
-      for f in s
-	let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
+    var found = 0
+    var _nm = ''
+    var names = globpath(&runtimepath, "spell/*." .. enc .. ".spl", 1, 1)
+    if !empty(names)
+      var n = 300
+      for f in names
+	var nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
 	if nm != "en" && nm !~ '/'
-          let _nm = nm
-	  let found += 1
-	  let menuname = '&Tools.&Spelling.' . escape(g:menutrans_set_lang_to, "\\. \t|") . '\ "' . nm . '"'
-	  exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
-	  let s:undo_spelllang += ['aun ' . menuname]
+          _nm = nm
+	  found += 1
+	  var menuname = '&Tools.&Spelling.' .. escape(g:menutrans_set_lang_to, "\\. \t|") .. '\ "' .. nm .. '"'
+	  exe 'an 40.335.' .. n .. ' ' .. menuname .. ' :set spl=' .. nm .. ' spell<CR>'
+	  s:undo_spelllang += ['aun ' .. menuname]
 	endif
-	let n += 10
+	n += 10
       endfor
     endif
     if found == 0
       echomsg "Could not find other spell files"
     elseif found == 1
-      echomsg "Found spell file " . _nm
+      echomsg "Found spell file " .. _nm
     else
-      echomsg "Found " . found . " more spell files"
+      echomsg "Found " .. found .. " more spell files"
     endif
-    " Need to redo this when 'encoding' is changed.
+    # Need to redo this when 'encoding' is changed.
     augroup spellmenu
     au! EncodingChanged * call <SID>SpellLang()
     augroup END
-  endfun
+  enddef
 
 endif
 
@@ -581,66 +577,67 @@
 
 " Use a function to do the conversion, so that it also works with 'insertmode'
 " set.
-func s:XxdConv()
-  let mod = &mod
+def s:XxdConv()
+  var mod = &mod
   if has("vms")
-    %!mc vim:xxd
+    :%!mc vim:xxd
   else
-    call s:XxdFind()
-    exe '%!' . g:xxdprogram
+    s:XxdFind()
+    exe '%!' .. g:xxdprogram
   endif
-  if getline(1) =~ "^0000000:"		" only if it worked
+  if getline(1) =~ "^0000000:"		# only if it worked
     set ft=xxd
   endif
-  let &mod = mod
-endfun
+  &mod = mod
+enddef
 
-func s:XxdBack()
-  let mod = &mod
+def s:XxdBack()
+  var mod = &mod
   if has("vms")
-    %!mc vim:xxd -r
+    :%!mc vim:xxd -r
   else
-    call s:XxdFind()
-    exe '%!' . g:xxdprogram . ' -r'
+    s:XxdFind()
+    exe '%!' .. g:xxdprogram .. ' -r'
   endif
   set ft=
   doautocmd filetypedetect BufReadPost
-  let &mod = mod
-endfun
+  &mod = mod
+enddef
 
-func s:XxdFind()
+def s:XxdFind()
   if !exists("g:xxdprogram")
-    " On the PC xxd may not be in the path but in the install directory
+    # On the PC xxd may not be in the path but in the install directory
     if has("win32") && !executable("xxd")
-      let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe"
+      g:xxdprogram = $VIMRUNTIME .. (&shellslash ? '/' : '\') .. "xxd.exe"
       if g:xxdprogram =~ ' '
-	let g:xxdprogram = '"' .. g:xxdprogram .. '"'
+	g:xxdprogram = '"' .. g:xxdprogram .. '"'
       endif
     else
-      let g:xxdprogram = "xxd"
+      g:xxdprogram = "xxd"
     endif
   endif
-endfun
+enddef
 
 let s:did_setup_compilers = 0
 
 " Setup the Tools.Compiler submenu
-func s:SetupCompilers() abort
+def s:SetupCompilers()
   if s:did_setup_compilers
     return
   endif
-  let s:did_setup_compilers = 1
+  s:did_setup_compilers = 1
 
-  let n = globpath(&runtimepath, "compiler/*.vim", 1, 1)
-  let idx = 100
-  for name in n
-    " Ignore case for VMS and windows
-    let name = substitute(name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
-    exe "an 30.440." . idx . ' &Tools.Se&t\ Compiler.' . name . " :compiler " . name . "<CR>"
-    let idx = idx + 10
+  var names = globpath(&runtimepath, "compiler/*.vim", 1, 1)
+  var idx = 100
+  for name in names
+    # Ignore case for VMS and windows
+    var cname = substitute(name, '\c.*[/\\:\]]\([^/\\:]*\)\.vim', '\1', '')
+    exe "an 30.440." .. idx .. ' &Tools.Se&t\ Compiler.' .. cname .. " :compiler " .. cname .. "<CR>"
+    idx += 10
   endfor
   silent! aunmenu &Tools.Show\ Compiler\ Se&ttings\ in\ Menu
-endfun
+enddef
+
 if exists("do_no_lazyload_menus")
   call s:SetupCompilers()
 else
@@ -649,13 +646,13 @@
 
 " Load ColorScheme, Compiler Setting and Keymap menus when idle.
 if !exists("do_no_lazyload_menus")
-  func s:SetupLazyloadMenus()
-    call s:SetupColorSchemes()
-    call s:SetupCompilers()
+  def s:SetupLazyloadMenus()
+    s:SetupColorSchemes()
+    s:SetupCompilers()
     if has("keymap")
-      call s:SetupKeymaps()
+      s:SetupKeymaps()
     endif
-  endfunc
+  enddef
   augroup SetupLazyloadMenus
     au!
     au CursorHold,CursorHoldI * call <SID>SetupLazyloadMenus() | au! SetupLazyloadMenus
@@ -680,135 +677,133 @@
 endif
 
 " invoked from a BufCreate or BufFilePost autocommand
-func s:BMAdd()
+def s:BMAdd()
   if s:bmenu_wait == 0
-    " when adding too many buffers, redraw in short format
+    # when adding too many buffers, redraw in short format
     if s:bmenu_count == &menuitems && s:bmenu_short == 0
-      call s:BMShow()
+      s:BMShow()
     else
-      let name = expand("<afile>")
-      let num = expand("<abuf>") + 0 " add zero to convert to a number type
+      var name = expand("<afile>")
+      var num = str2nr(expand("<abuf>"))
       if s:BMCanAdd(name, num)
-	call <SID>BMFilename(name, num)
-	let s:bmenu_count += 1
+	s:BMFilename(name, num)
+	s:bmenu_count += 1
       endif
     endif
   endif
-endfunc
+enddef
 
 " invoked from a BufDelete or BufFilePre autocommand
-func s:BMRemove()
+def s:BMRemove()
   if s:bmenu_wait == 0
-    let bufnum = expand("<abuf>")
+    var bufnum = expand("<abuf>")
     if s:bmenu_items->has_key(bufnum)
-      let menu_name = s:bmenu_items[bufnum]
-      exe 'silent! aun &Buffers.' . menu_name
-      let s:bmenu_count = s:bmenu_count - 1
+      var menu_name = s:bmenu_items[bufnum]
+      exe 'silent! aun &Buffers.' .. menu_name
+      s:bmenu_count = s:bmenu_count - 1
       unlet s:bmenu_items[bufnum]
     endif
   endif
-endfunc
+enddef
 
 " Return non-zero if buffer with number "name" / "num" is useful to add in the
 " buffer menu.
-func s:BMCanAdd(name, num)
-  " no directory or unlisted buffer
-  if isdirectory(a:name) || !buflisted(a:num)
-    return 0
+def s:BMCanAdd(name: string, num: number): bool
+  # no directory or unlisted buffer
+  if isdirectory(name) || !buflisted(num)
+    return false
   endif
 
-  " no name with control characters
-  if a:name =~ '[\x01-\x1f]'
-    return 0
+  # no name with control characters
+  if name =~ '[\x01-\x1f]'
+    return false
   endif
 
-  " no special buffer, such as terminal or popup
-  let buftype = getbufvar(a:num, '&buftype')
+  # no special buffer, such as terminal or popup
+  var buftype = getbufvar(num, '&buftype')
   if buftype != '' && buftype != 'nofile' && buftype != 'nowrite'
-    return 0
+    return false
   endif
 
-  " only existing buffers
-  return bufexists(a:num)
-endfunc
+  # only existing buffers
+  return bufexists(num)
+enddef
 
 " Create the buffer menu (delete an existing one first).
-func s:BMShow(...)
-  let s:bmenu_wait = 1
-  let s:bmenu_short = 1
-  let s:bmenu_count = 0
-  let s:bmenu_items = {}
-  "
-  " get new priority, if exists
-  if a:0 == 1
-    let g:bmenu_priority = a:1
-  endif
+def s:BMShow()
+  s:bmenu_wait = 1
+  s:bmenu_short = 1
+  s:bmenu_count = 0
+  s:bmenu_items = {}
 
-  " Remove old menu, if it exists; keep one entry to avoid a torn off menu to
-  " disappear.  Use try/catch to avoid setting v:errmsg
-  try | unmenu &Buffers | catch | endtry
-  exe 'noremenu ' . g:bmenu_priority . ".1 &Buffers.Dummy l"
-  try | unmenu! &Buffers | catch | endtry
+  # Remove old menu, if it exists; keep one entry to avoid a torn off menu to
+  # disappear.  Use try/catch to avoid setting v:errmsg
+  try 
+    unmenu &Buffers 
+  catch 
+  endtry
+  exe 'noremenu ' .. g:bmenu_priority .. ".1 &Buffers.Dummy l"
+  try 
+    unmenu! &Buffers 
+  catch 
+  endtry
 
-  " create new menu; set 'cpo' to include the <CR>
-  let cpo_save = &cpo
-  set cpo&vim
-  exe 'an <silent> ' . g:bmenu_priority . ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
-  exe 'an ' . g:bmenu_priority . ".4 &Buffers.&Delete :confirm bd<CR>"
-  exe 'an ' . g:bmenu_priority . ".6 &Buffers.&Alternate :confirm b #<CR>"
-  exe 'an ' . g:bmenu_priority . ".7 &Buffers.&Next :confirm bnext<CR>"
-  exe 'an ' . g:bmenu_priority . ".8 &Buffers.&Previous :confirm bprev<CR>"
-  exe 'an ' . g:bmenu_priority . ".9 &Buffers.-SEP- :"
-  let &cpo = cpo_save
+  # create new menu
+  exe 'an <silent> ' .. g:bmenu_priority .. ".2 &Buffers.&Refresh\\ menu :call <SID>BMShow()<CR>"
+  exe 'an ' .. g:bmenu_priority .. ".4 &Buffers.&Delete :confirm bd<CR>"
+  exe 'an ' .. g:bmenu_priority .. ".6 &Buffers.&Alternate :confirm b #<CR>"
+  exe 'an ' .. g:bmenu_priority .. ".7 &Buffers.&Next :confirm bnext<CR>"
+  exe 'an ' .. g:bmenu_priority .. ".8 &Buffers.&Previous :confirm bprev<CR>"
+  exe 'an ' .. g:bmenu_priority .. ".9 &Buffers.-SEP- :"
   unmenu &Buffers.Dummy
 
-  " figure out how many buffers there are
-  let buf = 1
+  # figure out how many buffers there are
+  var buf = 1
   while buf <= bufnr('$')
     if s:BMCanAdd(bufname(buf), buf)
-      let s:bmenu_count = s:bmenu_count + 1
+      s:bmenu_count = s:bmenu_count + 1
     endif
-    let buf = buf + 1
+    buf += 1
   endwhile
   if s:bmenu_count <= &menuitems
-    let s:bmenu_short = 0
+    s:bmenu_short = 0
   endif
 
-  " iterate through buffer list, adding each buffer to the menu:
-  let buf = 1
+  # iterate through buffer list, adding each buffer to the menu:
+  buf = 1
   while buf <= bufnr('$')
-    let name = bufname(buf)
+    var name = bufname(buf)
     if s:BMCanAdd(name, buf)
-      call <SID>BMFilename(name, buf)
+      call s:BMFilename(name, buf)
     endif
-    let buf = buf + 1
+    buf += 1
   endwhile
-  let s:bmenu_wait = 0
+  s:bmenu_wait = 0
   aug buffer_list
-  au!
-  au BufCreate,BufFilePost * call <SID>BMAdd()
-  au BufDelete,BufFilePre * call <SID>BMRemove()
+    au!
+    au BufCreate,BufFilePost * call s:BMAdd()
+    au BufDelete,BufFilePre * call s:BMRemove()
   aug END
-endfunc
+enddef
 
-func s:BMHash(name)
-  " Make name all upper case, so that chars are between 32 and 96
-  let nm = substitute(a:name, ".*", '\U\0', "")
+def s:BMHash(name: string): number
+  # Make name all upper case, so that chars are between 32 and 96
+  var nm = substitute(name, ".*", '\U\0', "")
+  var sp: number
   if has("ebcdic")
-    " HACK: Replace all non alphabetics with 'Z'
-    "       Just to make it work for now.
-    let nm = substitute(nm, "[^A-Z]", 'Z', "g")
-    let sp = char2nr('A') - 1
+    # HACK: Replace all non alphabetics with 'Z'
+    #       Just to make it work for now.
+    nm = substitute(nm, "[^A-Z]", 'Z', "g")
+    sp = char2nr('A') - 1
   else
-    let sp = char2nr(' ')
+    sp = char2nr(' ')
   endif
-  " convert first six chars into a number for sorting:
+  # convert first six chars into a number for sorting:
   return (char2nr(nm[0]) - sp) * 0x800000 + (char2nr(nm[1]) - sp) * 0x20000 + (char2nr(nm[2]) - sp) * 0x1000 + (char2nr(nm[3]) - sp) * 0x80 + (char2nr(nm[4]) - sp) * 0x20 + (char2nr(nm[5]) - sp)
-endfunc
+enddef
 
-func s:BMHash2(name)
-  let nm = substitute(a:name, ".", '\L\0', "")
-  " Not exactly right for EBCDIC...
+def s:BMHash2(name: string): string
+  var nm = substitute(name, ".", '\L\0', "")
   if nm[0] < 'a' || nm[0] > 'z'
     return '&others.'
   elseif nm[0] <= 'd'
@@ -824,72 +819,70 @@
   else
     return '&u-z.'
   endif
-endfunc
+enddef
 
 " Insert a buffer name into the buffer menu.
-func s:BMFilename(name, num)
-  let munge = <SID>BMMunge(a:name, a:num)
-  let hash = <SID>BMHash(munge)
+def s:BMFilename(name: string, num: number)
+  var munge = s:BMMunge(name, num)
+  var hash = s:BMHash(munge)
+  var cmd: string
   if s:bmenu_short == 0
-    let s:bmenu_items[a:num] = munge
-    let cmd = 'an ' . g:bmenu_priority . '.' . hash . ' &Buffers.' . munge
+    s:bmenu_items[num] = munge
+    cmd = 'an ' .. g:bmenu_priority .. '.' .. hash .. ' &Buffers.' .. munge
   else
-    let menu_name = <SID>BMHash2(munge) . munge
-    let s:bmenu_items[a:num] = menu_name
-    let cmd = 'an ' . g:bmenu_priority . '.' . hash . '.' . hash . ' &Buffers.' . menu_name
+    var menu_name = s:BMHash2(munge) .. munge
+    s:bmenu_items[num] = menu_name
+    cmd = 'an ' .. g:bmenu_priority .. '.' .. hash .. '.' .. hash .. ' &Buffers.' .. menu_name
   endif
-  " set 'cpo' to include the <CR>
-  let cpo_save = &cpo
-  set cpo&vim
-  exe cmd . ' :confirm b' . a:num . '<CR>'
-  let &cpo = cpo_save
-endfunc
+  exe cmd .. ' :confirm b' .. num .. '<CR>'
+enddef
 
 " Truncate a long path to fit it in a menu item.
 if !exists("g:bmenu_max_pathlen")
   let g:bmenu_max_pathlen = 35
 endif
-func s:BMTruncName(fname)
-  let name = a:fname
+
+def s:BMTruncName(fname: string): string
+  var name = fname
   if g:bmenu_max_pathlen < 5
-    let name = ""
+    name = ""
   else
-    let len = strlen(name)
+    var len = strlen(name)
     if len > g:bmenu_max_pathlen
-      let amountl = (g:bmenu_max_pathlen / 2) - 2
-      let amountr = g:bmenu_max_pathlen - amountl - 3
-      let pattern = '^\(.\{,' . amountl . '}\).\{-}\(.\{,' . amountr . '}\)$'
-      let left = substitute(name, pattern, '\1', '')
-      let right = substitute(name, pattern, '\2', '')
+      var amountl = (g:bmenu_max_pathlen / 2) - 2
+      var amountr = g:bmenu_max_pathlen - amountl - 3
+      var pattern = '^\(.\{,' .. amountl .. '}\).\{-}\(.\{,' .. amountr .. '}\)$'
+      var left = substitute(name, pattern, '\1', '')
+      var right = substitute(name, pattern, '\2', '')
       if strlen(left) + strlen(right) < len
-	let name = left . '...' . right
+	name = left .. '...' .. right
       endif
     endif
   endif
   return name
-endfunc
+enddef
 
-func s:BMMunge(fname, bnum)
-  let name = a:fname
+def s:BMMunge(fname: string, bnum: number): string
+  var name = fname
   if name == ''
     if !exists("g:menutrans_no_file")
-      let g:menutrans_no_file = "[No Name]"
+      g:menutrans_no_file = "[No Name]"
     endif
-    let name = g:menutrans_no_file
+    name = g:menutrans_no_file
   else
-    let name = fnamemodify(name, ':p:~')
+    name = fnamemodify(name, ':p:~')
   endif
-  " detach file name and separate it out:
-  let name2 = fnamemodify(name, ':t')
-  if a:bnum >= 0
-    let name2 = name2 . ' (' . a:bnum . ')'
+  # detach file name and separate it out:
+  var name2 = fnamemodify(name, ':t')
+  if bnum >= 0
+    name2 = name2 .. ' (' .. bnum .. ')'
   endif
-  let name = name2 . "\t" . <SID>BMTruncName(fnamemodify(name,':h'))
-  let name = escape(name, "\\. \t|")
-  let name = substitute(name, "&", "&&", "g")
-  let name = substitute(name, "\n", "^@", "g")
+  name = name2 .. "\t" .. s:BMTruncName(fnamemodify(name, ':h'))
+  name = escape(name, "\\. \t|")
+  name = substitute(name, "&", "&&", "g")
+  name = substitute(name, "\n", "^@", "g")
   return name
-endfunc
+enddef
 
 " When just starting Vim, load the buffer menu later
 if has("vim_starting")
@@ -910,13 +903,13 @@
 an 70.330 &Window.Split\ &Vertically<Tab>^Wv	<C-W>v
 an <silent> 70.332 &Window.Split\ File\ E&xplorer	:call MenuExplOpen()<CR>
 if !exists("*MenuExplOpen")
-  fun MenuExplOpen()
+  def MenuExplOpen()
     if @% == ""
-      20vsp .
+      :20vsp .
     else
-      exe "20vsp " . s:FnameEscape(expand("%:p:h"))
+      exe ":20vsp " .. fnameescape(expand("%:p:h"))
     endif
-  endfun
+  enddef
 endif
 an 70.335 &Window.-SEP1-				<Nop>
 an 70.340 &Window.&Close<Tab>^Wc			:confirm close<CR>
@@ -943,8 +936,8 @@
 cnoremenu 1.30 PopUp.&Copy		<C-Y>
 nnoremenu 1.40 PopUp.&Paste		"+gP
 cnoremenu 1.40 PopUp.&Paste		<C-R>+
-exe 'vnoremenu <script> 1.40 PopUp.&Paste	' . paste#paste_cmd['v']
-exe 'inoremenu <script> 1.40 PopUp.&Paste	' . paste#paste_cmd['i']
+exe 'vnoremenu <script> 1.40 PopUp.&Paste	' .. paste#paste_cmd['v']
+exe 'inoremenu <script> 1.40 PopUp.&Paste	' .. paste#paste_cmd['i']
 vnoremenu 1.50 PopUp.&Delete		x
 an 1.55 PopUp.-SEP2-			<Nop>
 vnoremenu 1.60 PopUp.Select\ Blockwise	<C-V>
@@ -986,77 +979,75 @@
 if has("spell")
   " Spell suggestions in the popup menu.  Note that this will slow down the
   " appearance of the menu!
-  func s:SpellPopup()
+  def s:SpellPopup()
     if exists("s:changeitem") && s:changeitem != ''
-      call <SID>SpellDel()
+      call s:SpellDel()
     endif
 
-    " Return quickly if spell checking is not enabled.
+    # Return quickly if spell checking is not enabled.
     if !&spell || &spelllang == ''
       return
     endif
 
-    let curcol = col('.')
-    let [w, a] = spellbadword()
-    if col('.') > curcol		" don't use word after the cursor
-      let w = ''
+    var curcol = col('.')
+    var w: string
+    var a: string
+    [w, a] = spellbadword()
+    if col('.') > curcol		# don't use word after the cursor
+      w = ''
     endif
     if w != ''
       if a == 'caps'
-	let s:suglist = [substitute(w, '.*', '\u&', '')]
+	s:suglist = [substitute(w, '.*', '\u&', '')]
       else
-	let s:suglist = spellsuggest(w, 10)
+	s:suglist = spellsuggest(w, 10)
       endif
       if len(s:suglist) > 0
 	if !exists("g:menutrans_spell_change_ARG_to")
-	  let g:menutrans_spell_change_ARG_to = 'Change\ "%s"\ to'
+	  g:menutrans_spell_change_ARG_to = 'Change\ "%s"\ to'
 	endif
-	let s:changeitem = printf(g:menutrans_spell_change_ARG_to, escape(w, ' .'))
-	let s:fromword = w
-	let pri = 1
-	" set 'cpo' to include the <CR>
-	let cpo_save = &cpo
-	set cpo&vim
+	s:changeitem = printf(g:menutrans_spell_change_ARG_to, escape(w, ' .'))
+	s:fromword = w
+	var pri = 1
 	for sug in s:suglist
-	  exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
-		\ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
-	  let pri += 1
+	  exe 'anoremenu 1.5.' .. pri .. ' PopUp.' .. s:changeitem .. '.' .. escape(sug, ' .')
+		\ .. ' :call <SID>SpellReplace(' .. pri .. ')<CR>'
+	  pri += 1
 	endfor
 
 	if !exists("g:menutrans_spell_add_ARG_to_word_list")
-	  let g:menutrans_spell_add_ARG_to_word_list = 'Add\ "%s"\ to\ Word\ List'
+	  g:menutrans_spell_add_ARG_to_word_list = 'Add\ "%s"\ to\ Word\ List'
 	endif
-	let s:additem = printf(g:menutrans_spell_add_ARG_to_word_list, escape(w, ' .'))
-	exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
+	s:additem = printf(g:menutrans_spell_add_ARG_to_word_list, escape(w, ' .'))
+	exe 'anoremenu 1.6 PopUp.' .. s:additem .. ' :spellgood ' .. w .. '<CR>'
 
 	if !exists("g:menutrans_spell_ignore_ARG")
-	  let g:menutrans_spell_ignore_ARG = 'Ignore\ "%s"'
+	  g:menutrans_spell_ignore_ARG = 'Ignore\ "%s"'
 	endif
-	let s:ignoreitem = printf(g:menutrans_spell_ignore_ARG, escape(w, ' .'))
-	exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
+	s:ignoreitem = printf(g:menutrans_spell_ignore_ARG, escape(w, ' .'))
+	exe 'anoremenu 1.7 PopUp.' .. s:ignoreitem .. ' :spellgood! ' .. w .. '<CR>'
 
 	anoremenu 1.8 PopUp.-SpellSep- :
-	let &cpo = cpo_save
       endif
     endif
-    call cursor(0, curcol)	" put the cursor back where it was
-  endfunc
+    call cursor(0, curcol)	# put the cursor back where it was
+  enddef
 
-  func s:SpellReplace(n)
-    let l = getline('.')
-    " Move the cursor to the start of the word.
+  def s:SpellReplace(n: number)
+    var l = getline('.')
+    # Move the cursor to the start of the word.
     call spellbadword()
-    call setline('.', strpart(l, 0, col('.') - 1) . s:suglist[a:n - 1]
-	  \ . strpart(l, col('.') + len(s:fromword) - 1))
-  endfunc
+    call setline('.', strpart(l, 0, col('.') - 1) .. s:suglist[n - 1]
+	  \ .. strpart(l, col('.') + len(s:fromword) - 1))
+  enddef
 
-  func s:SpellDel()
-    exe "aunmenu PopUp." . s:changeitem
-    exe "aunmenu PopUp." . s:additem
-    exe "aunmenu PopUp." . s:ignoreitem
+  def s:SpellDel()
+    exe "aunmenu PopUp." .. s:changeitem
+    exe "aunmenu PopUp." .. s:additem
+    exe "aunmenu PopUp." .. s:ignoreitem
     aunmenu PopUp.-SpellSep-
-    let s:changeitem = ''
-  endfun
+    s:changeitem = ''
+  enddef
 
   augroup SpellPopupMenu
     au! MenuPopup * call <SID>SpellPopup()
@@ -1089,8 +1080,8 @@
   cnoremenu 1.80 ToolBar.Copy		<C-Y>
   nnoremenu 1.90 ToolBar.Paste		"+gP
   cnoremenu	 ToolBar.Paste		<C-R>+
-  exe 'vnoremenu <script>	 ToolBar.Paste	' . paste#paste_cmd['v']
-  exe 'inoremenu <script>	 ToolBar.Paste	' . paste#paste_cmd['i']
+  exe 'vnoremenu <script>	 ToolBar.Paste	' .. paste#paste_cmd['v']
+  exe 'inoremenu <script>	 ToolBar.Paste	' .. paste#paste_cmd['i']
 
   if !has("gui_athena")
     an 1.95   ToolBar.-sep3-		<Nop>
@@ -1108,7 +1099,7 @@
 
   an 1.245 ToolBar.-sep6-		<Nop>
   an 1.250 ToolBar.Make			:make<CR>
-  an 1.270 ToolBar.RunCtags		:exe "!" . g:ctags_command<CR>
+  an 1.270 ToolBar.RunCtags		:exe "!" .. g:ctags_command<CR>
   an 1.280 ToolBar.TagJump		g<C-]>
 
   an 1.295 ToolBar.-sep7-		<Nop>
@@ -1145,22 +1136,23 @@
 endif
 
 " Select a session to load; default to current session name if present
-fun! s:LoadVimSesn()
+def s:LoadVimSesn()
+  var name: string
   if strlen(v:this_session) > 0
-    let name = s:FnameEscape(v:this_session)
+    name = fnameescape(v:this_session)
   else
-    let name = "Session.vim"
+    name = "Session.vim"
   endif
-  execute "browse so " . name
-endfun
+  execute "browse so " .. name
+enddef
 
 " Select a session to save; default to current session name if present
-fun! s:SaveVimSesn()
+def s:SaveVimSesn()
   if strlen(v:this_session) == 0
-    let v:this_session = "Session.vim"
+    v:this_session = "Session.vim"
   endif
-  execute "browse mksession! " . s:FnameEscape(v:this_session)
-endfun
+  execute "browse mksession! " .. fnameescape(v:this_session)
+enddef
 
 endif
 
@@ -1173,7 +1165,7 @@
   an 50.214 &Syntax.A&utomatic		:syn on<CR>
   an <silent> 50.216 &Syntax.On/Off\ for\ &This\ File :call <SID>SynOnOff()<CR>
   if !exists("*s:SynOnOff")
-    fun s:SynOnOff()
+    def s:SynOnOff()
       if has("syntax_items")
 	syn clear
       else
@@ -1182,7 +1174,7 @@
 	endif
 	set syn=ON
       endif
-    endfun
+    enddef
   endif
 endif
 
@@ -1209,6 +1201,9 @@
 an 50.720 &Syntax.&Highlight\ Test	:runtime syntax/hitest.vim<CR>
 an 50.730 &Syntax.&Convert\ to\ HTML	:runtime syntax/2html.vim<CR>
 
+" Uncomment this to compile the functions early to find any mistakes
+defcompile
+
 endif " !exists("did_install_syntax_menu")
 
 " Restore the previous value of 'cpoptions'.
diff --git a/runtime/synmenu.vim b/runtime/synmenu.vim
index d1e4bec..06e3725 100644
--- a/runtime/synmenu.vim
+++ b/runtime/synmenu.vim
@@ -2,31 +2,26 @@
 " This file is normally sourced from menu.vim.
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2017 Oct 28
+" Last Change:	2022 Feb 04
 
 " Define the SetSyn function, used for the Syntax menu entries.
 " Set 'filetype' and also 'syntax' if it is manually selected.
-fun! SetSyn(name)
-  if a:name == "fvwm1"
-    let use_fvwm_1 = 1
-    let use_fvwm_2 = 0
-    let name = "fvwm"
-  elseif a:name == "fvwm2"
-    let use_fvwm_2 = 1
-    let use_fvwm_1 = 0
-    let name = "fvwm"
-  else
-    let name = a:name
+def SetSyn(name: string)
+  var filetype = name
+  if name == "fvwm1" || name == "fvwm2"
+    g:use_fvwm_1 = name == "fvwm1"
+    g:use_fvwm_2 = name == "fvwm2"
+    filetype = "fvwm"
   endif
   if !exists("s:syntax_menu_synonly")
-    exe "set ft=" . name
+    exe "set ft=" .. filetype
     if exists("g:syntax_manual")
-      exe "set syn=" . name
+      exe "set syn=" .. filetype
     endif
   else
-    exe "set syn=" . name
+    exe "set syn=" .. filetype
   endif
-endfun
+enddef
 
 " <> notation is used here, remove '<' from 'cpoptions'
 let s:cpo_save = &cpo
@@ -404,7 +399,6 @@
 an 50.90.130 &Syntax.PQ.PApp :cal SetSyn("papp")<CR>
 an 50.90.140 &Syntax.PQ.Pascal :cal SetSyn("pascal")<CR>
 an 50.90.150 &Syntax.PQ.Password\ file :cal SetSyn("passwd")<CR>
-an 50.90.490 &Syntax.PQ.Pbtxt :cal SetSyn("pbtxt")<CR>
 an 50.90.160 &Syntax.PQ.PCCTS :cal SetSyn("pccts")<CR>
 an 50.90.170 &Syntax.PQ.PDF :cal SetSyn("pdf")<CR>
 an 50.90.180 &Syntax.PQ.Perl.Perl :cal SetSyn("perl")<CR>
@@ -457,19 +451,20 @@
 an 50.100.190 &Syntax.R.Readline\ config :cal SetSyn("readline")<CR>
 an 50.100.200 &Syntax.R.Rebol :cal SetSyn("rebol")<CR>
 an 50.100.210 &Syntax.R.ReDIF :cal SetSyn("redif")<CR>
-an 50.100.220 &Syntax.R.Relax\ NG :cal SetSyn("rng")<CR>
-an 50.100.230 &Syntax.R.Remind :cal SetSyn("remind")<CR>
-an 50.100.240 &Syntax.R.Relax\ NG\ compact :cal SetSyn("rnc")<CR>
-an 50.100.250 &Syntax.R.Renderman.Renderman\ Shader\ Lang :cal SetSyn("sl")<CR>
-an 50.100.260 &Syntax.R.Renderman.Renderman\ Interface\ Bytestream :cal SetSyn("rib")<CR>
-an 50.100.270 &Syntax.R.Resolv\.conf :cal SetSyn("resolv")<CR>
-an 50.100.280 &Syntax.R.Reva\ Forth :cal SetSyn("reva")<CR>
-an 50.100.290 &Syntax.R.Rexx :cal SetSyn("rexx")<CR>
-an 50.100.300 &Syntax.R.Robots\.txt :cal SetSyn("robots")<CR>
-an 50.100.310 &Syntax.R.RockLinux\ package\ desc\. :cal SetSyn("desc")<CR>
-an 50.100.320 &Syntax.R.Rpcgen :cal SetSyn("rpcgen")<CR>
-an 50.100.330 &Syntax.R.RPL/2 :cal SetSyn("rpl")<CR>
-an 50.100.340 &Syntax.R.ReStructuredText :cal SetSyn("rst")<CR>
+an 50.100.220 &Syntax.R.Rego :cal SetSyn("rego")<CR>
+an 50.100.230 &Syntax.R.Relax\ NG :cal SetSyn("rng")<CR>
+an 50.100.240 &Syntax.R.Remind :cal SetSyn("remind")<CR>
+an 50.100.250 &Syntax.R.Relax\ NG\ compact :cal SetSyn("rnc")<CR>
+an 50.100.260 &Syntax.R.Renderman.Renderman\ Shader\ Lang :cal SetSyn("sl")<CR>
+an 50.100.270 &Syntax.R.Renderman.Renderman\ Interface\ Bytestream :cal SetSyn("rib")<CR>
+an 50.100.280 &Syntax.R.Resolv\.conf :cal SetSyn("resolv")<CR>
+an 50.100.290 &Syntax.R.Reva\ Forth :cal SetSyn("reva")<CR>
+an 50.100.300 &Syntax.R.Rexx :cal SetSyn("rexx")<CR>
+an 50.100.310 &Syntax.R.Robots\.txt :cal SetSyn("robots")<CR>
+an 50.100.320 &Syntax.R.RockLinux\ package\ desc\. :cal SetSyn("desc")<CR>
+an 50.100.330 &Syntax.R.Rpcgen :cal SetSyn("rpcgen")<CR>
+an 50.100.340 &Syntax.R.RPL/2 :cal SetSyn("rpl")<CR>
+an 50.100.350 &Syntax.R.ReStructuredText :cal SetSyn("rst")<CR>
 an 50.110.100 &Syntax.M.ReStructuredText\ with\ R\ statements :cal SetSyn("rrst")<CR>
 an 50.120.100 &Syntax.R.RTF :cal SetSyn("rtf")<CR>
 an 50.120.110 &Syntax.R.Ruby :cal SetSyn("ruby")<CR>
@@ -652,11 +647,11 @@
 an 50.195 &Syntax.-SEP1-			<Nop>
 
 an <silent> 50.200 &Syntax.Set\ '&syntax'\ Only :call <SID>Setsynonly()<CR>
-fun! s:Setsynonly()
+fun s:Setsynonly()
   let s:syntax_menu_synonly = 1
 endfun
 an <silent> 50.202 &Syntax.Set\ '&filetype'\ Too :call <SID>Nosynonly()<CR>
-fun! s:Nosynonly()
+fun s:Nosynonly()
   if exists("s:syntax_menu_synonly")
     unlet s:syntax_menu_synonly
   endif
