Update runtime files
diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim
index 74df871..a3db4ae 100644
--- a/runtime/autoload/dist/ft.vim
+++ b/runtime/autoload/dist/ft.vim
@@ -1,7 +1,7 @@
 " Vim functions for file type detection
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2020 Aug 17
+" Last Change:	2021 Nov 27
 
 " These functions are moved here from runtime/filetype.vim to make startup
 " faster.
diff --git a/runtime/doc/channel.txt b/runtime/doc/channel.txt
index 39cb43c..6124a89 100644
--- a/runtime/doc/channel.txt
+++ b/runtime/doc/channel.txt
@@ -1,4 +1,4 @@
-*channel.txt*      For Vim version 8.2.  Last change: 2020 Oct 17
+*channel.txt*      For Vim version 8.2.  Last change: 2021 Nov 28
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -101,7 +101,7 @@
 when opening the channel: >
 	call ch_close(channel)
 	let channel = ch_open('localhost:8765', {'callback': "MyHandler"})
-	call ch_sendexpr(channel, 'hello!')
+	call ch_sendexpr(channel, 'hello channel!')
 
 When trying out channels it's useful to see what is going on.  You can tell
 Vim to write lines in log file: >
@@ -132,8 +132,9 @@
 	"raw"  - Use raw messages
 						*channel-callback* *E921*
 "callback"	A function that is called when a message is received that is
-		not handled otherwise.  It gets two arguments: the channel
-		and the received message. Example: >
+		not handled otherwise (e.g. a JSON message with ID zero).  It
+		gets two arguments: the channel and the received message.
+		Example: >
 	func Handle(channel, msg)
 	  echo 'Received: ' . a:msg
 	endfunc
diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt
index eca741f..1dc3ebe 100644
--- a/runtime/doc/cmdline.txt
+++ b/runtime/doc/cmdline.txt
@@ -1,4 +1,4 @@
-*cmdline.txt*   For Vim version 8.2.  Last change: 2021 Nov 22
+*cmdline.txt*   For Vim version 8.2.  Last change: 2021 Dec 04
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -919,9 +919,11 @@
 							*:<amatch>* *<amatch>*
 	<amatch>   When executing autocommands, is replaced with the match for
 		   which this autocommand was executed.  *E497*
-		   It differs from <afile> only when the file name isn't used
-		   to match with (for FileType, Syntax and SpellFileMissing
+		   It differs from <afile> when the file name isn't used to
+		   match with (for FileType, Syntax and SpellFileMissing
 		   events).
+		   When the match is with a file name, it is expanded to the
+		   full path.
 							*:<sfile>* *<sfile>*
 	<sfile>    When executing a ":source" command, is replaced with the
 		   file name of the sourced file.  *E498*
diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt
index 8cb2e11..d832e9b 100644
--- a/runtime/doc/filetype.txt
+++ b/runtime/doc/filetype.txt
@@ -539,14 +539,6 @@
 For further discussion of fortran_have_tabs and the method used for the
 detection of source format see |ft-fortran-syntax|.
 
-GPROF							*ft-gprof-plugin*
-
-The gprof filetype plugin defines a mapping <C-]> to jump from a function
-entry in the gprof flat profile or from a function entry in the call graph
-to the details of that function in the call graph.
-
-The mapping can be disabled with: >
-	let g:no_gprof_maps = 1
 
 GIT COMMIT                                              *ft-gitcommit-plugin*
 
diff --git a/runtime/doc/motion.txt b/runtime/doc/motion.txt
index b50bd65..6e243fd 100644
--- a/runtime/doc/motion.txt
+++ b/runtime/doc/motion.txt
@@ -1,4 +1,4 @@
-*motion.txt*    For Vim version 8.2.  Last change: 2021 Jun 13
+*motion.txt*    For Vim version 8.2.  Last change: 2021 Dec 04
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -386,6 +386,8 @@
 
 <C-Right>	or					*<C-Right>* *W*
 W			[count] WORDS forward.  |exclusive| motion.
+			If <C-Right> does not work, check out
+			|arrow_modifiers|.
 
 							*e*
 e			Forward to the end of word [count] |inclusive|.
@@ -400,6 +402,8 @@
 
 <C-Left>	or					*<C-Left>* *B*
 B			[count] WORDS backward.  |exclusive| motion.
+			If <C-Left> does not work, check out
+			|arrow_modifiers|.
 
 							*ge*
 ge			Backward to the end of word [count] |inclusive|.
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 73c9212..ee03570 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 8.2.  Last change: 2021 Nov 24
+*options.txt*	For Vim version 8.2.  Last change: 2021 Dec 03
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -35,6 +35,8 @@
 			internally and can't be changed.  Changing the terminal
 			codes in the GUI is not useful either...
 
+:se[t]! termcap		Idem, but don't use multiple columns.
+
 								*E518* *E519*
 :se[t] {option}?	Show value of {option}.
 
@@ -869,9 +871,12 @@
 'autowrite' 'aw'	boolean	(default off)
 			global
 	Write the contents of the file, if it has been modified, on each
-	:next, :rewind, :last, :first, :previous, :stop, :suspend, :tag, :!,
-	:make, CTRL-] and CTRL-^ command; and when a :buffer, CTRL-O, CTRL-I,
-	'{A-Z0-9}, or `{A-Z0-9} command takes one to another file.
+	`:next`, `:rewind`, `:last`, `:first`, `:previous`, `:stop`,
+	`:suspend`, `:tag, `:!`, ``:make`, CTRL-] and CTRL-^ command; and when
+	a :buffer, CTRL-O, CTRL-I, '{A-Z0-9}, or `{A-Z0-9} command takes one
+	to another file.
+	A buffer is not written if it becomes hidden, e.g. when 'bufhidden' is
+	set to "hide" and `:next` is used
 	Note that for some commands the 'autowrite' option is not used, see
 	'autowriteall' for that.
 	Some buffers will not be written, specifically when 'buftype' is
diff --git a/runtime/doc/popup.txt b/runtime/doc/popup.txt
index 904abe7..b4d7702 100644
--- a/runtime/doc/popup.txt
+++ b/runtime/doc/popup.txt
@@ -1,4 +1,4 @@
-*popup.txt*  For Vim version 8.2.  Last change: 2021 Aug 15
+*popup.txt*  For Vim version 8.2.  Last change: 2021 Nov 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
diff --git a/runtime/doc/quickfix.txt b/runtime/doc/quickfix.txt
index 9ebefa9..47ead21 100644
--- a/runtime/doc/quickfix.txt
+++ b/runtime/doc/quickfix.txt
@@ -1,4 +1,4 @@
-*quickfix.txt*  For Vim version 8.2.  Last change: 2021 May 22
+*quickfix.txt*  For Vim version 8.2.  Last change: 2021 Dec 03
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -856,9 +856,9 @@
 						*:chistory* *:chi*
 :[count]chi[story]	Show the list of error lists.  The current list is
 			marked with ">".  The output looks like:
-				  error list 1 of 3; 43 errors ~
-				> error list 2 of 3; 0 errors ~
-				  error list 3 of 3; 15 errors ~
+			  error list 1 of 3; 43 errors   :make  ~
+			> error list 2 of 3; 0 errors    :helpgrep tag  ~
+			  error list 3 of 3; 15 errors   :grep ex_help *.c ~
 
 			When [count] is given, then the count'th quickfix
 			list is made the current list. Example: >
diff --git a/runtime/doc/sign.txt b/runtime/doc/sign.txt
index 489f3d8..7976cec 100644
--- a/runtime/doc/sign.txt
+++ b/runtime/doc/sign.txt
@@ -1,4 +1,4 @@
-*sign.txt*      For Vim version 8.2.  Last change: 2021 Mar 07
+*sign.txt*      For Vim version 8.2.  Last change: 2021 Dec 05
 
 
 		  VIM REFERENCE MANUAL    by Gordon Prieur
@@ -441,14 +441,16 @@
 		following entries:
 		   icon		full path to the bitmap file of the sign
 		   linehl	highlight group used for the whole line the
-				sign is placed in.
+				sign is placed in; not present if not set
 		   name		name of the sign
 		   text		text that is displayed when there is no icon
 				or the GUI is not being used.
-		   texthl	highlight group used for the text item
+		   texthl	highlight group used for the text item; not
+				present if not set
 		   culhl	highlight group used for the text item when
 				the cursor is on the same line as the sign and
-				'cursorline' is enabled.
+				'cursorline' is enabled; not present if not
+				set
 
 		Returns an empty List if there are no signs and when {name} is
 		not found.
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index 3bc5cf4..0101b51 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -3196,6 +3196,14 @@
 For more detailed instructions see |ft_sql.txt|.
 
 
+SQUIRREL				*squirrel.vim* *ft-squirrel-syntax*
+
+Squirrel is a high level imperative, object-oriented programming language,
+designed to be a light-weight scripting language that fits in the size, memory
+bandwidth, and real-time requirements of applications like video games.  Files
+with the following extensions are recognized as squirrel files: .nut.
+
+
 TCSH						*tcsh.vim* *ft-tcsh-syntax*
 
 This covers the shell named "tcsh".  It is a superset of csh.  See |csh.vim|
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 768b98c..f694ba2 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -3951,7 +3951,6 @@
 E108	eval.txt	/*E108*
 E109	eval.txt	/*E109*
 E1091	vim9.txt	/*E1091*
-E1092	vim9.txt	/*E1092*
 E1094	vim9.txt	/*E1094*
 E11	cmdline.txt	/*E11*
 E110	eval.txt	/*E110*
@@ -5463,6 +5462,7 @@
 argument-list	editing.txt	/*argument-list*
 argv()	eval.txt	/*argv()*
 argv-variable	eval.txt	/*argv-variable*
+arrow_modifiers	term.txt	/*arrow_modifiers*
 as	motion.txt	/*as*
 asin()	eval.txt	/*asin()*
 asm.vim	syntax.txt	/*asm.vim*
@@ -6562,6 +6562,7 @@
 format-comments	change.txt	/*format-comments*
 format-formatexpr	change.txt	/*format-formatexpr*
 formatting	change.txt	/*formatting*
+forth.vim	syntax.txt	/*forth.vim*
 fortran.vim	syntax.txt	/*fortran.vim*
 friendship	intro.txt	/*friendship*
 frombook	usr_01.txt	/*frombook*
@@ -6615,6 +6616,7 @@
 ft-euphoria-syntax	syntax.txt	/*ft-euphoria-syntax*
 ft-flexwiki-syntax	syntax.txt	/*ft-flexwiki-syntax*
 ft-form-syntax	syntax.txt	/*ft-form-syntax*
+ft-forth-syntax	syntax.txt	/*ft-forth-syntax*
 ft-fortran-indent	indent.txt	/*ft-fortran-indent*
 ft-fortran-plugin	filetype.txt	/*ft-fortran-plugin*
 ft-fortran-syntax	syntax.txt	/*ft-fortran-syntax*
@@ -6706,6 +6708,7 @@
 ft-sql-syntax	syntax.txt	/*ft-sql-syntax*
 ft-sqlanywhere-syntax	syntax.txt	/*ft-sqlanywhere-syntax*
 ft-sqlinformix-syntax	syntax.txt	/*ft-sqlinformix-syntax*
+ft-squirrel-syntax	syntax.txt	/*ft-squirrel-syntax*
 ft-syntax-omni	insert.txt	/*ft-syntax-omni*
 ft-tcsh-syntax	syntax.txt	/*ft-tcsh-syntax*
 ft-termcap-syntax	syntax.txt	/*ft-termcap-syntax*
@@ -9242,6 +9245,7 @@
 sqlserver	ft_sql.txt	/*sqlserver*
 sqlsettype	ft_sql.txt	/*sqlsettype*
 sqrt()	eval.txt	/*sqrt()*
+squirrel.vim	syntax.txt	/*squirrel.vim*
 srand()	eval.txt	/*srand()*
 sscanf	eval.txt	/*sscanf*
 standard-plugin	usr_05.txt	/*standard-plugin*
diff --git a/runtime/doc/term.txt b/runtime/doc/term.txt
index d6f31d3..3333a3a 100644
--- a/runtime/doc/term.txt
+++ b/runtime/doc/term.txt
@@ -1,4 +1,4 @@
-*term.txt*      For Vim version 8.2.  Last change: 2021 Aug 29
+*term.txt*      For Vim version 8.2.  Last change: 2021 Dec 04
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -151,7 +151,7 @@
         let &t_fe = "\<Esc>[?1004h"
         let &t_fd = "\<Esc>[?1004l"
 
-        " Enable modified arrow keys, see  :help xterm-modifier-keys
+        " Enable modified arrow keys, see  :help arrow_modifiers
         execute "silent! set <xUp>=\<Esc>[@;*A"
         execute "silent! set <xDown>=\<Esc>[@;*B"
         execute "silent! set <xRight>=\<Esc>[@;*C"
@@ -252,7 +252,19 @@
 Another special value is a termcap entry ending in "@;*X".  This is for cursor
 keys, which either use "CSI X" or "CSI 1 ; modifier X".  Thus the "@"
 stands for either "1" if a modifier follows, or nothing.
-							*xterm-scroll-region*
+							*arrow_modifiers*
+Several terminal emulators (alacritty, gnome, konsole, etc.) send special
+codes for keys with modifiers, but these do not have an entry in the
+termcap/terminfo database.  You can make them work by adding a few lines in
+your vimrc.  For example, to make the Control modifier work with arrow keys
+for the gnome terminal: >
+	if &term =~ 'gnome'
+	   execute "set <xUp>=\<Esc>[@;*A"
+	   execute "set <xDown>=\<Esc>[@;*B"
+	   execute "set <xRight>=\<Esc>[@;*C"
+	   execute "set <xLeft>=\<Esc>[@;*D"
+	endif
+<							*xterm-scroll-region*
 The default termcap entry for xterm on Sun and other platforms does not
 contain the entry for scroll regions.  Add ":cs=\E[%i%d;%dr:" to the xterm
 entry in /etc/termcap and everything should work.
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 4793abd..1772aa1 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 8.2.  Last change: 2021 Nov 26
+*todo.txt*      For Vim version 8.2.  Last change: 2021 Dec 05
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -38,13 +38,7 @@
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-refactor ex_let_one() to subfunctions.
-
 Vim9 - Make everything work:
-- "filter #pat# ls" should work, #pat# is not a comment
-    vim9script
-    edit foobar
-    filter #foobar# ls
 - Check TODO items in vim9compile.c and vim9execute.c
 - use CheckLegacyAndVim9Success(lines) in many more places
 - For builtin functions using tv_get_string*() use check_for_string() to be
@@ -263,6 +257,10 @@
 
 Mapping with partial match not executed properly in GTK. (Ingo Karkat, #7082)
 
+Information for a specific terminal (e.g. gnome, tmux, konsole, alacritty) is
+spread out.  Make a section with copy/paste examples of script and pointers to
+more information.
+
 Problem that a previous silent ":throw" causes a following try/catch not to
 work. (ZyX, 2013 Sep 28) With examples: (Malcolm Rowe, 2015 Dec 24)
 Also see #8487 for an example.
@@ -1470,10 +1468,6 @@
 restore the mode properly. (Andrew Stewart, 2016 Apr 20)
 Do not trigger the event?
 
-Patch to fix display of listchars on the cursorline. (Nayuri Aohime, 2013)
-Update suggested by Yasuhiro Matsumoto, 2014 Nov 25:
-https://gist.github.com/presuku/d3d6b230b9b6dcfc0477
-
 Patch to make the behavior of "w" more straightforward, but not Vi compatible.
 With a 'cpo' flag.  (Christian Brabandt, 2016 Feb 8)
 
diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt
index 290eb4f..3f750cd 100644
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -1,4 +1,4 @@
-*various.txt*   For Vim version 8.2.  Last change: 2021 Sep 06
+*various.txt*   For Vim version 8.2.  Last change: 2021 Nov 30
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -369,7 +369,7 @@
    *+dnd*		Support for DnD into the "~ register |quote_~|.
 B  *+emacs_tags*	|emacs-tags| files
 N  *+eval*		expression evaluation |eval.txt|
-N  *+ex_extra*		always on now, used to be for Vim's extra Ex commands
+T  *+ex_extra*		always on now, used to be for Vim's extra Ex commands
 N  *+extra_search*	|'hlsearch'| and |'incsearch'| options.
 -  *+farsi*		Removed: |farsi| language
 N  *+file_in_path*	|gf|, |CTRL-W_f| and |<cfile>|
@@ -423,7 +423,7 @@
 m  *+mzscheme*		Mzscheme interface |mzscheme|
 m  *+mzscheme/dyn*	Mzscheme interface |mzscheme-dynamic| |/dyn|
 m  *+netbeans_intg*	|netbeans|
-   *+num64*		64-bit Number support |Number|
+T  *+num64*		64-bit Number support |Number|
    			Always enabled since 8.2.0271, use v:numbersize to
 			check the actual size of a Number.
 m  *+ole*		Win32 GUI only: |ole-interface|
@@ -471,15 +471,15 @@
 N  *+textprop*		|text-properties|
    *+tgetent*		non-Unix only: able to use external termcap
 N  *+timers*		the |timer_start()| function
-N  *+title*		Setting the window 'title' and 'icon'; Always enabled
+T  *+title*		Setting the window 'title' and 'icon'; Always enabled
 N  *+toolbar*		|gui-toolbar|
 T  *+user_commands*	User-defined commands. |user-commands|
 			Always enabled since 8.1.1210.
 B  *+vartabs*		Variable-width tabstops. |'vartabstop'|
 N  *+viminfo*		|'viminfo'|
-   *+vertsplit*		Vertically split windows |:vsplit|; Always enabled
+T  *+vertsplit*		Vertically split windows |:vsplit|; Always enabled
 			since 8.0.1118.
-N  *+virtualedit*	|'virtualedit'| Always enabled since 8.1.826.
+T  *+virtualedit*	|'virtualedit'| Always enabled since 8.1.826.
 T  *+visual*		Visual mode |Visual-mode| Always enabled since 7.4.200.
 T  *+visualextra*	extra Visual mode commands |blockwise-operators|
 T  *+vreplace*		|gR| and |gr|
diff --git a/runtime/doc/vim9.txt b/runtime/doc/vim9.txt
index 9329aa9..856ec2f 100644
--- a/runtime/doc/vim9.txt
+++ b/runtime/doc/vim9.txt
@@ -1,4 +1,4 @@
-*vim9.txt*	For Vim version 8.2.  Last change: 2021 Nov 22
+*vim9.txt*	For Vim version 8.2.  Last change: 2021 Dec 01
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -234,9 +234,10 @@
 	def scriptname#function()   # autoload
 
 When using `:function` or `:def` to specify a nested function inside a `:def`
-function, this nested function is local to the code block it is defined in.
-In a `:def` function it is not possible to define a script-local function.  It
-is possible to define a global function by using the "g:" prefix.
+function and no namespace was given, this nested function is local to the code
+block it is defined in.  In a `:def` function it is not possible to define a
+script-local function.  It is possible to define a global function by using
+the "g:" prefix.
 
 When referring to a function and no "s:" or "g:" prefix is used, Vim will
 search for the function:
@@ -820,10 +821,16 @@
 
 For loop ~
 
-The loop variable must not exist yet: >
+The loop variable must not be declared yet: >
 	var i = 1
 	for i in [1, 2, 3]   # Error!
 
+It is possible to use a global variable though: >
+	g:i = 1
+	for g:i in [1, 2, 3]
+	  echo g:i
+	endfor
+
 Legacy Vim script has some tricks to make a for loop over a list handle
 deleting items at the current or previous item.  In Vim9 script it just uses
 the index, if items are deleted then items in the list will be skipped.
diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt
index c288377..2f60835 100644
--- a/runtime/doc/windows.txt
+++ b/runtime/doc/windows.txt
@@ -1,4 +1,4 @@
-*windows.txt*   For Vim version 8.2.  Last change: 2021 Sep 09
+*windows.txt*   For Vim version 8.2.  Last change: 2021 Nov 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1203,6 +1203,8 @@
 		the current buffer remains being edited.  See |:buffer-!| for
 		[!].  This will also edit a buffer that is not in the buffer
 		list, without setting the 'buflisted' flag.
+		The notation with single quotes does not work here,
+		`:buf 12'345'` uses 12'345 as a buffer name.
 		Also see |+cmd|.
 
 :[N]b[uffer][!] [+cmd] {bufname}				*{bufname}*
diff --git a/runtime/doc/xxd-fr.1 b/runtime/doc/xxd-fr.1
index a50336e..e170df5 100644
--- a/runtime/doc/xxd-fr.1
+++ b/runtime/doc/xxd-fr.1
@@ -111,7 +111,7 @@
 .TP
 .IR \-p " | " \-ps " | " \-postscript " | " \-plain
 Produit une conversion continue dans le style Postscript (postscript continuous
-hexdumd style).
+hexdump style).
 Également connu sous le nom de « conversion brute » (plain hexdump style).
 .TP
 .IR \-r " | " \-revert
diff --git a/runtime/doc/xxd-fr.UTF-8.1 b/runtime/doc/xxd-fr.UTF-8.1
index c00eff8..47773a1 100644
--- a/runtime/doc/xxd-fr.UTF-8.1
+++ b/runtime/doc/xxd-fr.UTF-8.1
@@ -111,7 +111,7 @@
 .TP
 .IR \-p " | " \-ps " | " \-postscript " | " \-plain
 Produit une conversion continue dans le style Postscript (postscript continuous
-hexdumd style).
+hexdump style).
 Également connu sous le nom de « conversion brute » (plain hexdump style).
 .TP
 .IR \-r " | " \-revert
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index 705c2dc..87d1f48 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -1,7 +1,7 @@
 " Vim support file to detect file types
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2021 Nov 16
+" Last Change:	2021 Dec 03
 
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
diff --git a/runtime/indent/vim.vim b/runtime/indent/vim.vim
index d5d0d94..733584a 100644
--- a/runtime/indent/vim.vim
+++ b/runtime/indent/vim.vim
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	Vim script
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2021 Nov 03
+" Last Change:	2021 Nov 27
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -12,6 +12,7 @@
 setlocal indentexpr=GetVimIndent()
 setlocal indentkeys+==end,=},=else,=cat,=finall,=END,0\\,0=\"\\\ 
 setlocal indentkeys-=0#
+setlocal indentkeys-=:
 
 let b:undo_indent = "setl indentkeys< indentexpr<"
 
diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
index 24161d5..e2d2347 100644
--- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
@@ -2,7 +2,7 @@
 "
 " Author: Bram Moolenaar
 " Copyright: Vim license applies, see ":help license"
-" Last Change: 2021 Nov 27
+" Last Change: 2021 Nov 29
 "
 " WORK IN PROGRESS - Only the basics work
 " Note: On MS-Windows you need a recent version of gdb.  The one included with
@@ -479,7 +479,7 @@
   " Run the command if the bang attribute was given and got to the debug
   " window.
   if get(a:dict, 'bang', 0)
-    call s:SendCommand('-exec-run')
+    call s:SendResumingCommand('-exec-run')
     call win_gotoid(s:ptywin)
   endif
 endfunc
@@ -512,9 +512,14 @@
   endif
 endfunc
 
-" Send a command only when stopped.  Used for :Next and :Step.
-func s:SendCommandIfStopped(cmd)
+" Send a command that resumes the program.  If the program isn't stopped the
+" command is not sent (to avoid a repeated command to cause trouble).
+" If the command is sent then reset s:stopped.
+func s:SendResumingCommand(cmd)
   if s:stopped
+    " reset s:stopped here, it may take a bit of time before we get a response
+    let s:stopped = 0
+    call ch_log('assume that program is running after this command')
     call s:SendCommand(a:cmd)
   else
     call ch_log('dropping command, program is running: ' . a:cmd)
@@ -808,11 +813,11 @@
 
   command -nargs=? Break call s:SetBreakpoint(<q-args>)
   command Clear call s:ClearBreakpoint()
-  command Step call s:SendCommandIfStopped('-exec-step')
-  command Over call s:SendCommandIfStopped('-exec-next')
-  command Finish call s:SendCommandIfStopped('-exec-finish')
+  command Step call s:SendResumingCommand('-exec-step')
+  command Over call s:SendResumingCommand('-exec-next')
+  command Finish call s:SendResumingCommand('-exec-finish')
   command -nargs=* Run call s:Run(<q-args>)
-  command -nargs=* Arguments call s:SendCommand('-exec-arguments ' . <q-args>)
+  command -nargs=* Arguments call s:SendResumingCommand('-exec-arguments ' . <q-args>)
 
   if s:way == 'prompt'
     command Stop call s:PromptInterrupt()
@@ -995,9 +1000,9 @@
 
 func s:Run(args)
   if a:args != ''
-    call s:SendCommand('-exec-arguments ' . a:args)
+    call s:SendResumingCommand('-exec-arguments ' . a:args)
   endif
-  call s:SendCommand('-exec-run')
+  call s:SendResumingCommand('-exec-run')
 endfunc
 
 func s:SendEval(expr)
diff --git a/runtime/syntax/django.vim b/runtime/syntax/django.vim
index d3ca4de..76b47d2 100644
--- a/runtime/syntax/django.vim
+++ b/runtime/syntax/django.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	Django template
 " Maintainer:	Dave Hodder <dmh@dmh.org.uk>
-" Last Change:	2014 Jul 13
+" Last Change:	2021 Nov 29
 
 " quit when a syntax file was already loaded
 if exists("b:current_syntax")
@@ -31,6 +31,7 @@
 syn keyword djangoStatement contained get_current_language trans noop blocktrans
 syn keyword djangoStatement contained endblocktrans get_available_languages
 syn keyword djangoStatement contained get_current_language_bidi plural
+syn keyword djangoStatement contained translate blocktranslate endblocktranslate
 
 " Django templete built-in filters
 syn keyword djangoFilter contained add addslashes capfirst center cut date
diff --git a/runtime/syntax/squirrel.vim b/runtime/syntax/squirrel.vim
new file mode 100644
index 0000000..81d59cc
--- /dev/null
+++ b/runtime/syntax/squirrel.vim
@@ -0,0 +1,50 @@
+" Vim syntax file
+" Language: squirrel
+" Current Maintainer: Matt Dunford (zenmatic@gmail.com)
+" URL: https://github.com/zenmatic/vim-syntax-squirrel
+" Last Change:	2021 Nov 28
+
+" http://squirrel-lang.org/
+
+" quit when a syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+
+" inform C syntax that the file was included from cpp.vim
+let b:filetype_in_cpp_family = 1
+
+" Read the C syntax to start with
+runtime! syntax/c.vim
+unlet b:current_syntax
+
+" squirrel extensions
+syn keyword squirrelStatement	delete this in yield resume base clone
+syn keyword squirrelAccess	local
+syn keyword cConstant           null
+syn keyword squirrelModifier	static
+syn keyword squirrelType	bool instanceof typeof
+syn keyword squirrelExceptions	throw try catch
+syn keyword squirrelStructure	class function extends constructor
+syn keyword squirrelBoolean	true false
+syn keyword squirrelRepeat	foreach
+
+syn region squirrelMultiString start='@"' end='"$' end='";$'me=e-1
+
+syn match squirrelShComment "^\s*#.*$"
+
+" Default highlighting
+hi def link squirrelAccess		squirrelStatement
+hi def link squirrelExceptions		Exception
+hi def link squirrelStatement		Statement
+hi def link squirrelModifier		Type
+hi def link squirrelType		Type
+hi def link squirrelStructure		Structure
+hi def link squirrelBoolean		Boolean
+hi def link squirrelMultiString		String
+hi def link squirrelRepeat		cRepeat
+hi def link squirrelShComment		Comment
+
+let b:current_syntax = "squirrel"
+
+" vim: ts=8
diff --git a/runtime/syntax/vb.vim b/runtime/syntax/vb.vim
index 8ddb1ef..607f613 100644
--- a/runtime/syntax/vb.vim
+++ b/runtime/syntax/vb.vim
@@ -1,9 +1,11 @@
 " Vim syntax file
-" Language:	Visual Basic
-" Maintainer:	Tim Chase <vb.vim@tim.thechases.com>
-" Former Maintainer:	Robert M. Cortopassi <cortopar@mindspring.com>
-"	(tried multiple times to contact, but email bounced)
+" Language:     Visual Basic
+" Maintainer:   Doug Kearns <dougkearns@gmail.com>
+" Former Maintainer:    Tim Chase <vb.vim@tim.thechases.com>
+" Former Maintainer:    Robert M. Cortopassi <cortopar@mindspring.com>
+"       (tried multiple times to contact, but email bounced)
 " Last Change:
+"   2021 Nov 26  Incorporated additions from Doug Kearns
 "   2005 May 25  Synched with work by Thomas Barthel
 "   2004 May 30  Added a few keywords
 
@@ -13,7 +15,7 @@
 
 " quit when a syntax file was already loaded
 if exists("b:current_syntax")
-	finish
+        finish
 endif
 
 " VB is case insensitive
@@ -233,7 +235,7 @@
 syn keyword vbKeyword InSameProcessMultiUse GlobalMultiUse Resume Seek
 syn keyword vbKeyword Set Static Step String Time WithEvents
 
-syn keyword vbTodo contained	TODO
+syn keyword vbTodo contained    TODO
 
 "Datatypes
 syn keyword vbTypes Boolean Byte Currency Date Decimal Double Empty
@@ -319,46 +321,54 @@
 syn match vbNumber "\<\d\+\.\d*\>"
 "floating point number, starting with a dot
 syn match vbNumber "\.\d\+\>"
-"syn match  vbNumber		"{[[:xdigit:]-]\+}\|&[hH][[:xdigit:]]\+&"
-"syn match  vbNumber		":[[:xdigit:]]\+"
-"syn match  vbNumber		"[-+]\=\<\d\+\>"
-syn match  vbFloat		"[-+]\=\<\d\+[eE][\-+]\=\d\+"
-syn match  vbFloat		"[-+]\=\<\d\+\.\d*\([eE][\-+]\=\d\+\)\="
-syn match  vbFloat		"[-+]\=\<\.\d\+\([eE][\-+]\=\d\+\)\="
+"syn match  vbNumber            "{[[:xdigit:]-]\+}\|&[hH][[:xdigit:]]\+&"
+"syn match  vbNumber            ":[[:xdigit:]]\+"
+"syn match  vbNumber            "[-+]\=\<\d\+\>"
+syn match  vbFloat              "[-+]\=\<\d\+[eE][\-+]\=\d\+"
+syn match  vbFloat              "[-+]\=\<\d\+\.\d*\([eE][\-+]\=\d\+\)\="
+syn match  vbFloat              "[-+]\=\<\.\d\+\([eE][\-+]\=\d\+\)\="
 
-" String and Character contstants
+" String and Character constants
 syn region  vbString		start=+"+  end=+"\|$+
 syn region  vbComment		start="\(^\|\s\)REM\s" end="$" contains=vbTodo
 syn region  vbComment		start="\(^\|\s\)\'"   end="$" contains=vbTodo
-syn match   vbLineNumber	"^\d\+\(\s\|$\)"
-syn match   vbTypeSpecifier  "[a-zA-Z0-9][\$%&!#]"ms=s+1
+syn match   vbLineLabel		"^\h\w\+:"
+syn match   vbLineNumber	"^\d\+\(:\|\s\|$\)"
+syn match   vbTypeSpecifier  "\<\a\w*[@\$%&!#]"ms=s+1
 syn match   vbTypeSpecifier  "#[a-zA-Z0-9]"me=e-1
+" Conditional Compilation
+syn match  vbPreProc "^#const\>"
+syn region vbPreProc matchgroup=PreProc start="^#if\>"     end="\<then\>" transparent contains=TOP
+syn region vbPreProc matchgroup=PreProc start="^#elseif\>" end="\<then\>" transparent contains=TOP
+syn match  vbPreProc "^#else\>"
+syn match  vbPreProc "^#end\s*if\>"
 
 " Define the default highlighting.
 " Only when an item doesn't have highlighting yet
 
-hi def link vbBoolean		Boolean
-hi def link vbLineNumber		Comment
-hi def link vbComment		Comment
-hi def link vbConditional	Conditional
-hi def link vbConst			Constant
-hi def link vbDefine			Constant
-hi def link vbError			Error
-hi def link vbFunction		Identifier
-hi def link vbIdentifier		Identifier
-hi def link vbNumber			Number
-hi def link vbFloat			Float
-hi def link vbMethods		PreProc
-hi def link vbOperator		Operator
-hi def link vbRepeat			Repeat
-hi def link vbString			String
-hi def link vbStatement		Statement
-hi def link vbKeyword		Statement
-hi def link vbEvents			Special
-hi def link vbTodo			Todo
-hi def link vbTypes			Type
-hi def link vbTypeSpecifier	Type
-
+hi def link vbBoolean           Boolean
+hi def link vbLineNumber        Comment
+hi def link vbLineLabel         Comment
+hi def link vbComment           Comment
+hi def link vbConditional       Conditional
+hi def link vbConst             Constant
+hi def link vbDefine            Constant
+hi def link vbError             Error
+hi def link vbFunction          Identifier
+hi def link vbIdentifier        Identifier
+hi def link vbNumber            Number
+hi def link vbFloat             Float
+hi def link vbMethods           PreProc
+hi def link vbOperator          Operator
+hi def link vbRepeat            Repeat
+hi def link vbString            String
+hi def link vbStatement         Statement
+hi def link vbKeyword           Statement
+hi def link vbEvents            Special
+hi def link vbTodo              Todo
+hi def link vbTypes             Type
+hi def link vbTypeSpecifier     Type
+hi def link vbPreProc           PreProc
 
 let b:current_syntax = "vb"
 
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index ab948d9..40e131e 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:	Nov 25, 2021
-" Version:	8.2-17
+" Last Change:	December 02, 2021
+" Version:	8.2-18
 " URL:	http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM
 " Automatically generated keyword lists: {{{1
 
@@ -73,7 +73,7 @@
 syn keyword vimGroup contained	Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo
 
 " Default highlighting groups {{{2
-syn keyword vimHLGroup contained	ColorColumn Cursor CursorColumn CursorIM CursorLine CursorLineNr DiffAdd DiffChange DiffDelete DiffText Directory EndOfBuffer ErrorMsg FoldColumn Folded IncSearch LineNr LineNrAbove LineNrBelow MatchParen Menu ModeMsg MoreMsg NonText Normal Pmenu PmenuSbar PmenuSel PmenuThumb Question QuickFixLine Scrollbar Search SignColumn SpecialKey SpellBad SpellCap SpellLocal SpellRare StatusLine StatusLineNC StatusLineTerm TabLine TabLineFill TabLineSel Terminal Title Tooltip VertSplit Visual VisualNOS WarningMsg WildMenu
+syn keyword vimHLGroup contained	ColorColumn Cursor CursorColumn CursorIM CursorLine CursorLineFold CursorLineNr CursorLineSign DiffAdd DiffChange DiffDelete DiffText Directory EndOfBuffer ErrorMsg FoldColumn Folded IncSearch LineNr LineNrAbove LineNrBelow MatchParen Menu ModeMsg MoreMsg NonText Normal Pmenu PmenuSbar PmenuSel PmenuThumb Question QuickFixLine Scrollbar Search SignColumn SpecialKey SpellBad SpellCap SpellLocal SpellRare StatusLine StatusLineNC StatusLineTerm TabLine TabLineFill TabLineSel Terminal Title Tooltip VertSplit Visual VisualNOS WarningMsg WildMenu
 syn match vimHLGroup contained	"Conceal"
 syn case match
 
diff --git a/runtime/tools/demoserver.py b/runtime/tools/demoserver.py
index 00fe8bf..150ddbe 100644
--- a/runtime/tools/demoserver.py
+++ b/runtime/tools/demoserver.py
@@ -62,9 +62,16 @@
             if decoded[0] >= 0:
                 if decoded[1] == 'hello!':
                     response = "got it"
+                    id = decoded[0]
+                elif decoded[1] == 'hello channel!':
+                    response = "got that"
+                    # response is not to a specific message callback but to the
+                    # channel callback, need to use ID zero
+                    id = 0
                 else:
                     response = "what?"
-                encoded = json.dumps([decoded[0], response])
+                    id = decoded[0]
+                encoded = json.dumps([id, response])
                 print("sending {0}".format(encoded))
                 self.request.sendall(encoded.encode('utf-8'))
         thesocket = None