Update runtime files
diff --git a/runtime/compiler/spectral.vim b/runtime/compiler/spectral.vim
new file mode 100644
index 0000000..bd13c51
--- /dev/null
+++ b/runtime/compiler/spectral.vim
@@ -0,0 +1,17 @@
+" Vim compiler file
+" Compiler:    Spectral for YAML
+" Maintainer:  Romain Lafourcade <romainlafourcade@gmail.com>
+" Last Change: 2021 July 21
+
+if exists("current_compiler")
+    finish
+endif
+let current_compiler = "spectral"
+
+if exists(":CompilerSet") != 2
+    command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet makeprg=spectral\ lint\ %\ -f\ text
+CompilerSet errorformat=%f:%l:%c\ %t%.%\\{-}\ %m
+
diff --git a/runtime/compiler/yamllint.vim b/runtime/compiler/yamllint.vim
new file mode 100644
index 0000000..889b04b
--- /dev/null
+++ b/runtime/compiler/yamllint.vim
@@ -0,0 +1,16 @@
+" Vim compiler file
+" Compiler:    Yamllint for YAML
+" Maintainer:  Romain Lafourcade <romainlafourcade@gmail.com>
+" Last Change: 2021 July 21
+
+if exists("current_compiler")
+    finish
+endif
+let current_compiler = "yamllint"
+
+if exists(":CompilerSet") != 2
+    command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet makeprg=yamllint\ -f\ parsable
+
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index 5e1f61e..7614e8b 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -1,4 +1,4 @@
-*autocmd.txt*   For Vim version 8.2.  Last change: 2021 Jul 02
+*autocmd.txt*   For Vim version 8.2.  Last change: 2021 Jul 27
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -679,7 +679,8 @@
 CursorMoved			After the cursor was moved in Normal or Visual
 				mode.  Also when the text of the cursor line
 				has been changed, e.g., with "x", "rx" or "p".
-				Not triggered when there is typeahead, when
+				Not triggered when there is typeahead, while
+				executing commands in a script file, when
 				an operator is pending or when moving to
 				another window while remaining at the same
 				cursor position.
diff --git a/runtime/doc/digraph.txt b/runtime/doc/digraph.txt
index bfcf135..0801e3a 100644
--- a/runtime/doc/digraph.txt
+++ b/runtime/doc/digraph.txt
@@ -1,4 +1,4 @@
-*digraph.txt*   For Vim version 8.2.  Last change: 2020 Jul 16
+*digraph.txt*   For Vim version 8.2.  Last change: 2021 Jul 19
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt
index 6bc245a..92710d8 100644
--- a/runtime/doc/editing.txt
+++ b/runtime/doc/editing.txt
@@ -1,4 +1,4 @@
-*editing.txt*   For Vim version 8.2.  Last change: 2021 May 27
+*editing.txt*   For Vim version 8.2.  Last change: 2021 Jul 25
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1469,8 +1469,11 @@
 :X	Prompt for an encryption key.  The typing is done without showing the
 	actual text, so that someone looking at the display won't see it.
 	The typed key is stored in the 'key' option, which is used to encrypt
-	the file when it is written.  The file will remain unchanged until you
-	write it.  See also |-x|.
+	the file when it is written.
+	The file will remain unchanged until you write it.  Note that commands
+	such as `:xit` and `ZZ` will NOT write the file unless there are other
+	changes.
+	See also |-x|.
 
 The value of the 'key' options is used when text is written.  When the option
 is not empty, the written file will be encrypted, using the value as the
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index d99c398..5054904 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 8.2.  Last change: 2021 Jul 01
+*eval.txt*	For Vim version 8.2.  Last change: 2021 Jul 28
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -3177,6 +3177,7 @@
 		the current buffer.
 		Any type of item is accepted and converted to a String.
 		{lnum} can be zero to insert a line before the first one.
+		{lnum} is used like with |getline()|.
 		Returns 1 for failure ({lnum} out of range or out of memory),
 		0 for success.  Example: >
 			:let failed = append(line('$'), "# THE END")
@@ -3446,8 +3447,9 @@
 			let loaded = 'somename'->bufloaded()
 
 bufname([{expr}])					*bufname()*
-		The result is the name of a buffer, as it is displayed by the
-		":ls" command.
+		The result is the name of a buffer.  Mostly as it is displayed
+		by the `:ls` command, but not using special names such as
+		"[No Name]".
 		If {expr} is omitted the current buffer is used.
 		If {expr} is a Number, that buffer number's name is given.
 		Number zero is the alternate buffer for the current window.
@@ -3482,7 +3484,7 @@
 							*bufnr()*
 bufnr([{expr} [, {create}]])
 		The result is the number of a buffer, as it is displayed by
-		the ":ls" command.  For the use of {expr}, see |bufname()|
+		the `:ls` command.  For the use of {expr}, see |bufname()|
 		above.
 
 		If the buffer doesn't exist, -1 is returned.  Or, if the
@@ -3677,10 +3679,10 @@
 		The index of the first character is zero.
 		If there are no multibyte characters the returned value is
 		equal to {idx}.
-		When {countcc} is omitted or zero, then composing characters
-		are not counted separately, their byte length is added to the
-		preceding base character.
-		When {countcc} is set to 1, then composing characters are
+		When {countcc} is omitted or |FALSE|, then composing characters
+		are not counted separately, their byte length is
+		added to the preceding base character.
+		When {countcc} is |TRUE|, then composing characters are
 		counted as separate characters.
 		Returns -1 if the arguments are invalid or if {idx} is greater
 		than the index of the last byte in {string}.  An error is
@@ -3852,7 +3854,9 @@
 				See |complete-items|.
 		   selected	Selected item index.  First index is zero.
 				Index is -1 if no item is selected (showing
-				typed text only)
+				typed text only, or the last completion after
+				no item is selected when using the <Up> or
+				<Down> keys)
 		   inserted	Inserted string. [NOT IMPLEMENT YET]
 
 							*complete_info_mode*
@@ -4067,6 +4071,7 @@
 		|setcursorcharpos()|.
 
 		Does not change the jumplist.
+		{lnum} is used like with |getline()|.
 		If {lnum} is greater than the number of lines in the buffer,
 		the cursor will be positioned at the last line in the buffer.
 		If {lnum} is zero, the cursor will stay in the current line.
@@ -4437,6 +4442,8 @@
 							*exists()*
 exists({expr})	The result is a Number, which is |TRUE| if {expr} is defined,
 		zero otherwise.
+		Note: In a compiled |:def| function local variables and
+		arguments are not visible to `exists()`.
 
 		For checking for a supported feature use |has()|.
 		For checking if a file exists use |filereadable()|.
@@ -4459,9 +4466,11 @@
 			varname		internal variable (see
 					|internal-variables|).  Also works
 					for |curly-braces-names|, |Dictionary|
-					entries, |List| items, etc.  Beware
-					that evaluating an index may cause an
-					error message for an invalid
+					entries, |List| items, etc.
+					Does not work for local variables in a
+					compiled `:def` function.
+					Beware that evaluating an index may
+					cause an error message for an invalid
 					expression.  E.g.: >
 					   :let l = [1, 2, 3]
 					   :echo exists("l[5]")
@@ -4774,15 +4783,18 @@
 
 
 filter({expr1}, {expr2})				*filter()*
-		{expr1} must be a |List| or a |Dictionary|.
+		{expr1} must be a |List|, |Blob| or |Dictionary|.
 		For each item in {expr1} evaluate {expr2} and when the result
-		is zero remove the item from the |List| or |Dictionary|.
+		is zero remove the item from the |List| or |Dictionary|. For a
+		|Blob| each byte is removed.
+
 		{expr2} must be a |string| or |Funcref|.
 
 		If {expr2} is a |string|, inside {expr2} |v:val| has the value
 		of the current item.  For a |Dictionary| |v:key| has the key
 		of the current item and for a |List| |v:key| has the index of
-		the current item.
+		the current item.  For a |Blob| |v:key| has the index of the
+		current byte.
 		Examples: >
 			call filter(mylist, 'v:val !~ "OLD"')
 <		Removes the items where "OLD" appears. >
@@ -4813,11 +4825,11 @@
 		|Dictionary| to remain unmodified make a copy first: >
 			:let l = filter(copy(mylist), 'v:val =~ "KEEP"')
 
-<		Returns {expr1}, the |List| or |Dictionary| that was filtered.
-		When an error is encountered while evaluating {expr2} no
-		further items in {expr1} are processed.  When {expr2} is a
-		Funcref errors inside a function are ignored, unless it was
-		defined with the "abort" flag.
+<		Returns {expr1}, the |List| , |Blob| or |Dictionary| that was
+		filtered.  When an error is encountered while evaluating
+		{expr2} no further items in {expr1} are processed.  When
+		{expr2} is a Funcref errors inside a function are ignored,
+		unless it was defined with the "abort" flag.
 
 		Can also be used as a |method|: >
 			mylist->filter(expr2)
@@ -7138,9 +7150,9 @@
 		below the last line: >
 			line2byte(line("$") + 1)
 <		This is the buffer size plus one.  If 'fileencoding' is empty
-		it is the file size plus one.
-		When {lnum} is invalid, or the |+byte_offset| feature has been
-		disabled at compile time, -1 is returned.
+		it is the file size plus one.  {lnum} is used like with
+		|getline()|.  When {lnum} is invalid, or the |+byte_offset|
+		feature has been disabled at compile time, -1 is returned.
 		Also see |byte2line()|, |go| and |:goto|.
 
 		Can also be used as a |method|: >
@@ -7313,6 +7325,8 @@
 		as-is.
 		Other objects are returned as zero without any errors.
 		See |lua-luaeval| for more details.
+		Note that in a `:def` function local variables are not visible
+		to {expr}.
 
 		Can also be used as a |method|: >
 			GetExpr()->luaeval()
@@ -7332,7 +7346,8 @@
 		If {expr2} is a |string|, inside {expr2} |v:val| has the value
 		of the current item.  For a |Dictionary| |v:key| has the key
 		of the current item and for a |List| |v:key| has the index of
-		the current item.
+		the current item.  For a |Blob| |v:key| has the index of the
+		current byte.
 		Example: >
 			:call map(mylist, '"> " . v:val . " <"')
 <		This puts "> " before and " <" after each item in "mylist".
@@ -8023,6 +8038,9 @@
 		    :echo mzeval("l")
 		    :echo mzeval("h")
 <
+		Note that in a `:def` function local variables are not visible
+		to {expr}.
+
 		Can also be used as a |method|: >
 			GetExpr()->mzeval()
 <
@@ -8034,6 +8052,7 @@
 			if getline(nextnonblank(1)) =~ "Java"
 <		When {lnum} is invalid or there is no non-blank line at or
 		below it, zero is returned.
+		{lnum} is used like with |getline()|.
 		See also |prevnonblank()|.
 
 		Can also be used as a |method|: >
@@ -8095,6 +8114,9 @@
 			:echo perleval('[1 .. 4]')
 <			[1, 2, 3, 4]
 
+		Note that in a `:def` function local variables are not visible
+		to {expr}.
+
 		Can also be used as a |method|: >
 			GetExpr()->perleval()
 
@@ -8126,6 +8148,7 @@
 			let ind = indent(prevnonblank(v:lnum - 1))
 <		When {lnum} is invalid or there is no non-blank line at or
 		above it, zero is returned.
+		{lnum} is used like with |getline()|.
 		Also see |nextnonblank()|.
 
 		Can also be used as a |method|: >
@@ -8433,6 +8456,8 @@
 		Lists are represented as Vim |List| type.
 		Dictionaries are represented as Vim |Dictionary| type with
 		keys converted to strings.
+		Note that in a `:def` function local variables are not visible
+		to {expr}.
 
 		Can also be used as a |method|: >
 			GetExpr()->py3eval()
@@ -8448,6 +8473,8 @@
 		Lists are represented as Vim |List| type.
 		Dictionaries are represented as Vim |Dictionary| type,
 		non-string keys result in error.
+		Note that in a `:def` function local variables are not visible
+		to {expr}.
 
 		Can also be used as a |method|: >
 			GetExpr()->pyeval()
@@ -8707,7 +8734,8 @@
 		and {end}.
 
 		The {start} and {end} arguments must be values returned by
-		reltime().
+		reltime().  If there is an error zero is returned in legacy
+		script, in Vim9 script an error is given.
 
 		Can also be used as a |method|: >
 			GetStart()->reltime()
@@ -8722,6 +8750,8 @@
 			let seconds = reltimefloat(reltime(start))
 <		See the note of reltimestr() about overhead.
 		Also see |profiling|.
+		If there is an error 0.0 is returned in legacy script, in Vim9
+		script an error is given.
 
 		Can also be used as a |method|: >
 			reltime(start)->reltimefloat()
@@ -8741,6 +8771,8 @@
 		can use split() to remove it. >
 			echo split(reltimestr(reltime(start)))[0]
 <		Also see |profiling|.
+		If there is an error an empty string is returned in legacy
+		script, in Vim9 script an error is given.
 
 		Can also be used as a |method|: >
 			reltime(start)->reltimestr()
@@ -8974,6 +9006,8 @@
 		Hashes are represented as Vim |Dictionary| type.
 		Other objects are represented as strings resulted from their
 		"Object#to_s" method.
+		Note that in a `:def` function local variables are not visible
+		to {expr}.
 
 		Can also be used as a |method|: >
 			GetRubyExpr()->rubyeval()
@@ -10850,7 +10884,7 @@
 		line.  'synmaxcol' applies, in a longer line zero is returned.
 		Note that when the position is after the last character,
 		that's where the cursor can be in Insert mode, synID() returns
-		zero.
+		zero.  {lnum} is used like with |getline()|.
 
 		When {trans} is |TRUE|, transparent items are reduced to the
 		item that they reveal.  This is useful when wanting to know
@@ -10918,7 +10952,7 @@
 		The result is a |List| with currently three items:
 		1. The first item in the list is 0 if the character at the
 		   position {lnum} and {col} is not part of a concealable
-		   region, 1 if it is.
+		   region, 1 if it is.  {lnum} is used like with |getline()|.
 		2. The second item in the list is a string. If the first item
 		   is 1, the second item contains the text which will be
 		   displayed in place of the concealed text, depending on the
@@ -10942,8 +10976,9 @@
 
 synstack({lnum}, {col})					*synstack()*
 		Return a |List|, which is the stack of syntax items at the
-		position {lnum} and {col} in the current window.  Each item in
-		the List is an ID like what |synID()| returns.
+		position {lnum} and {col} in the current window.  {lnum} is
+		used like with |getline()|.  Each item in the List is an ID
+		like what |synID()| returns.
 		The first item in the List is the outer region, following are
 		items contained in that one.  The last one is what |synID()|
 		returns, unless not the whole item is highlighted or it is a
@@ -11670,7 +11705,7 @@
 		[1, 1], unless there is a tabline, then it is [2, 1].
 		{nr} can be the window number or the |window-ID|.  Use zero
 		for the current window.
-		Return [0, 0] if the window cannot be found in the current
+		Returns [0, 0] if the window cannot be found in the current
 		tabpage.
 
 		Can also be used as a |method|: >
@@ -14388,7 +14423,7 @@
 
 							*except-several-errors*
 When several errors appear in a single command, the first error message is
-usually the most specific one and therefor converted to the error exception.
+usually the most specific one and therefore converted to the error exception.
    Example: >
 	echo novar
 causes >
diff --git a/runtime/doc/fold.txt b/runtime/doc/fold.txt
index 7def757..274e472 100644
--- a/runtime/doc/fold.txt
+++ b/runtime/doc/fold.txt
@@ -1,4 +1,4 @@
-*fold.txt*      For Vim version 8.2.  Last change: 2019 Jun 02
+*fold.txt*      For Vim version 8.2.  Last change: 2021 Jul 13
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -541,6 +541,8 @@
 
 A closed fold is indicated with a '+'.
 
+These characters can be changed with the 'fillchars' option.
+
 Where the fold column is too narrow to display all nested folds, digits are
 shown to indicate the nesting level.
 
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
index 8d5caf4..505f815 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1,4 +1,4 @@
-*map.txt*       For Vim version 8.2.  Last change: 2021 May 16
+*map.txt*       For Vim version 8.2.  Last change: 2021 Jul 28
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1580,7 +1580,8 @@
 		echo 'hello'
 		g:calledMyCommand = true
 	    }
-No nesting is supported.
+No nesting is supported.  Using `:normal` directly does not work, you can use
+it indirectly with `:execute`.
 
 The replacement text {repl} for a user defined command is scanned for special
 escape sequences, using <...> notation.  Escape sequences are replaced with
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index e0c14a8..5c925df 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 Jun 20
+*options.txt*	For Vim version 8.2.  Last change: 2021 Jul 22
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -8669,6 +8669,7 @@
 	The `g$` command will move to the end of the screen line.
 	It doesn't make sense to combine "all" with "onemore", but you will
 	not get a warning for it.
+	When combined with other words, "none" is ignored.
 	NOTE: This option is set to "" when 'compatible' is set.
 
 			*'visualbell'* *'vb'* *'novisualbell'* *'novb'* *beep*
diff --git a/runtime/doc/pattern.txt b/runtime/doc/pattern.txt
index 9628827..c52708e 100644
--- a/runtime/doc/pattern.txt
+++ b/runtime/doc/pattern.txt
@@ -1,4 +1,4 @@
-*pattern.txt*   For Vim version 8.2.  Last change: 2021 May 02
+*pattern.txt*   For Vim version 8.2.  Last change: 2021 Jul 16
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -936,7 +936,7 @@
 	can be any line number.  The first line is 1.
 	WARNING: When inserting or deleting lines Vim does not automatically
 	update the matches.  This means Syntax highlighting quickly becomes
-	wrong.  Also when refering to the cursor position (".") and
+	wrong.  Also when referring to the cursor position (".") and
 	the cursor moves the display isn't updated for this change.  An update
 	is done when using the |CTRL-L| command (the whole screen is updated).
 	Example, to highlight the line where the cursor currently is: >
@@ -959,7 +959,7 @@
 	for multibyte characters).
 	WARNING: When inserting or deleting text Vim does not automatically
 	update the matches.  This means Syntax highlighting quickly becomes
-	wrong.  Also when refering to the cursor position (".") and
+	wrong.  Also when referring to the cursor position (".") and
 	the cursor moves the display isn't updated for this change.  An update
 	is done when using the |CTRL-L| command (the whole screen is updated).
 
@@ -989,7 +989,7 @@
 	one screen character.
 	WARNING: When inserting or deleting text Vim does not automatically
 	update highlighted matches.  This means Syntax highlighting quickly
-	becomes wrong.  Also when refering to the cursor position (".") and
+	becomes wrong.  Also when referring to the cursor position (".") and
 	the cursor moves the display isn't updated for this change.  An update
 	is done when using the |CTRL-L| command (the whole screen is updated).
 	Example, to highlight all the characters after virtual column 72: >
@@ -1472,7 +1472,8 @@
     - The number of characters (distance) between two consecutive matching
       characters.
     - Matches at the beginning of a word
-    - Matches after a camel case character or a path separator or a hyphen.
+    - Matches at a camel case character (e.g. Case in CamelCase)
+    - Matches after a path separator or a hyphen.
     - The number of unmatched characters in a string.
 The matching string with the highest score is returned first.
 
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index e8ff255..e781f99 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -923,7 +923,7 @@
 
 BAAN						    *baan.vim* *baan-syntax*
 
-The baan.vim gives syntax support for BaanC of release BaanIV upto SSA ERP LN
+The baan.vim gives syntax support for BaanC of release BaanIV up to SSA ERP LN
 for both 3 GL and 4 GL programming. Large number of standard defines/constants
 are supported.
 
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 9c99429..322a222 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -3978,7 +3978,9 @@
 E120	eval.txt	/*E120*
 E1200	options.txt	/*E1200*
 E1201	options.txt	/*E1201*
+E1205	eval.txt	/*E1205*
 E121	eval.txt	/*E121*
+E1214	eval.txt	/*E1214*
 E122	eval.txt	/*E122*
 E123	eval.txt	/*E123*
 E124	eval.txt	/*E124*
@@ -6161,6 +6163,10 @@
 digraph-table	digraph.txt	/*digraph-table*
 digraph-table-mbyte	digraph.txt	/*digraph-table-mbyte*
 digraph.txt	digraph.txt	/*digraph.txt*
+digraph_get()	eval.txt	/*digraph_get()*
+digraph_getlist()	eval.txt	/*digraph_getlist()*
+digraph_set()	eval.txt	/*digraph_set()*
+digraph_setlist()	eval.txt	/*digraph_setlist()*
 digraphs	digraph.txt	/*digraphs*
 digraphs-changed	version6.txt	/*digraphs-changed*
 digraphs-default	digraph.txt	/*digraphs-default*
@@ -10160,6 +10166,7 @@
 vim-additions	vi_diff.txt	/*vim-additions*
 vim-announce	intro.txt	/*vim-announce*
 vim-arguments	starting.txt	/*vim-arguments*
+vim-changelog	version8.txt	/*vim-changelog*
 vim-default-editor	gui_w32.txt	/*vim-default-editor*
 vim-dev	intro.txt	/*vim-dev*
 vim-mac	intro.txt	/*vim-mac*
@@ -10305,6 +10312,7 @@
 win32-gettext	mlang.txt	/*win32-gettext*
 win32-gui	gui_w32.txt	/*win32-gui*
 win32-hidden-menus	gui.txt	/*win32-hidden-menus*
+win32-installer	os_win32.txt	/*win32-installer*
 win32-mouse	os_win32.txt	/*win32-mouse*
 win32-open-with-menu	gui_w32.txt	/*win32-open-with-menu*
 win32-popup-menu	gui_w32.txt	/*win32-popup-menu*
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 655b74a..05508ab 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 Jul 05
+*todo.txt*      For Vim version 8.2.  Last change: 2021 Jul 26
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -38,11 +38,14 @@
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
+Try out callgrind with kcachegrind.
+
 Vim9 - Make everything work:
-- possible leak in test_vim9_builtin ?
-- Make "for _ in range()" work, do not store the value in a var.
+- Check TODO items in vim9compile.c and vim9execute.c
 - use CheckLegacyAndVim9Success(lines) in many more places
-- compile get_lambda_tv() in popup_add_timeout()
+    This doesn't work - Test_list_assign():
+	  var l = [0]
+	  l[:] = [1, 2]
 - For builtin functions using tv_get_string*() use check_for_string() to be
   more strict about the argument type (not a bool).
     done: balloon_()
@@ -214,10 +217,13 @@
 
 Include patch #6290: recognize shell directory change.
 
-MS-Windows GUI: default 'encoding' to "utf-8" ?  (#8221)
-    Add #ifdef MSWIN before enc_locale() in set_init_1().
-    Or just always for MS-Windows?  Conversion to 'termencoding' should always
-    work?
+When using 'cryptmethod' xchaha20 the undo file is not encrypted.
+Need to handle extra bytes.
+
+Test_communicate_ipv6(): is flaky on many systems
+Fails in line 64 of Ch_communicate, no exception is thrown.
+
+Rename getdigraphlist -> digraph_getlist() etc.
 
 Valgrind reports memory leaks in test_options.
 Valgrind reports overlapping memcpy in
@@ -242,6 +248,8 @@
 initialization to figure out the default value from 'shell'.  Add a test for
 this.
 
+MS-Windows: did path modifier :p:8 stop working?  #8600
+
 test_arglist func Test_all_not_allowed_from_cmdwin() hangs on MS-Windows.
 
 Mapping with partial match not executed properly in GTK. (Ingo Karkat, #7082)
@@ -269,6 +277,9 @@
 Searching for \%'> does not find anything when using line Visual selection.
 Probably because it's using MAXCOL.  #8238
 
+Make "g>" and "g<" in Visual mode move the text right or left.
+Also for a block selection.  #8558
+
 Add optional argument to virtcol() that specifies "start", "cursor" or "end"
 to tell which value from getvvcol() should be used. (#7964)
 Value returned by virtcol() changes depending on how lines wrap.  This is
@@ -280,10 +291,12 @@
 glob() and globfile() do not always honor 'wildignorecase'. #8350
 globpath() does not use 'wildignorecase' at all?
 
+":find" incorrectly searches parent directory of path (#8533)
+
 Add 'termguiattr' option, use "gui=" attributes in the terminal?  Would work
 with 'termguicolors'. #1740
 
-Patch for blockwise paste reporting changes: #6660.
+Patch for blockwise paste reporting changes: #6660.  Asked for a PR.
 
 Patch to make fillchars global-local. (#5206)
 
@@ -3069,7 +3082,7 @@
 7   When 'rightleft' is set, the search pattern should be displayed right
     to left as well?  See patch of Dec 26. (Nadim Shaikli)
 8   Option to lock all used memory so that it doesn't get swapped to disk
-    (uncrypted).  Patch by Jason Holt, 2003 May 23.  Uses mlock.
+    (unencrypted).  Patch by Jason Holt, 2003 May 23.  Uses mlock.
 7   Add ! register, for shell commands. (patch from Grenie)
 8   In the gzip plugin, also recognize *.gz.orig, *.gz.bak, etc.  Like it's
     done for filetype detection.  Patch from Walter Briscoe, 2003 Jul 1.
diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt
index 2651bb8..7765bea 100644
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -1,4 +1,4 @@
-*usr_41.txt*	For Vim version 8.2.  Last change: 2021 Jun 07
+*usr_41.txt*	For Vim version 8.2.  Last change: 2021 Jul 19
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
diff --git a/runtime/doc/version6.txt b/runtime/doc/version6.txt
index 22a57aa..27e4d66 100644
--- a/runtime/doc/version6.txt
+++ b/runtime/doc/version6.txt
@@ -5465,7 +5465,7 @@
 Patch 6.0.267
 Problem:    UTF-8: Although 'isprint' says a character is printable,
 	    utf_char2cells() still considers it unprintable.
-Solution:   Use vim_isprintc() for characters upto 0x100. (Yasuhiro Matsumoto)
+Solution:   Use vim_isprintc() for characters up to 0x100. (Yasuhiro Matsumoto)
 Files:	    src/mbyte.c
 
 Patch 6.0.268 (extra) (depends on patch 6.0.255)
diff --git a/runtime/doc/version7.txt b/runtime/doc/version7.txt
index 823d49d..71ea173 100644
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -1,4 +1,4 @@
-*version7.txt*  For Vim version 8.2.  Last change: 2021 May 13
+*version7.txt*  For Vim version 8.2.  Last change: 2021 May 17
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -16225,7 +16225,7 @@
 Patch 7.3.1018
 Problem:    New regexp engine wastes memory.
 Solution:   Allocate prog with actual number of states, not estimated maximum
-	    number of sates.
+	    number of states.
 Files:	    src/regexp_nfa.c
 
 Patch 7.3.1019
diff --git a/runtime/doc/version8.txt b/runtime/doc/version8.txt
index 9ed74cc..225dee0 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 May 13
+*version8.txt*  For Vim version 8.2.  Last change: 2021 Jul 24
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -41,6 +41,10 @@
 See |version4.txt|, |version5.txt|, |version6.txt| and |version7.txt| for
 differences between other versions.
 
+							*vim-changelog*
+You can find an overview of the most important changes (according to Martin
+Tournoij) on this site: https://www.arp242.net/vimlog/
+
 ==============================================================================
 NEW FEATURES						*new-8*
 
@@ -12980,7 +12984,7 @@
 Patch 7.4.2113
 Problem:    Test for undo is flaky.
 Solution:   Turn it into a new style test.  Use test_settime() to avoid
-            flakyness.
+            flakiness.
 Files:      src/Makefile, src/undo.c, src/testdir/test61.in,
             src/testdir/test61.ok, src/testdir/test_undo.vim,
             src/testdir/test_undolevels.vim, src/testdir/Make_all.mak,
@@ -30906,7 +30910,7 @@
 Patch 8.1.0820
 Problem:    Test for sending large data over channel sometimes fails.
 Solution:   Handle that the job may have finished early.  Also fix that file
-            changed test doesn't work in the GUI and reduce flakyness. (Ozaki
+            changed test doesn't work in the GUI and reduce flakiness. (Ozaki
             Kiichi, closes #3861)
 Files:	    src/testdir/test_channel.vim, src/testdir/test_filechanged.vim
 
@@ -39253,7 +39257,7 @@
 
 Patch 8.1.2117
 Problem:    CursorLine highlight used while 'cursorline' is off.
-Solution:   Check 'cursorline' is set. (cloes #5017)
+Solution:   Check 'cursorline' is set. (closes #5017)
 Files:	    src/drawline.c, src/testdir/test_cursorline.vim
 
 Patch 8.1.2118
diff --git a/runtime/doc/vim9.txt b/runtime/doc/vim9.txt
index a0681d2..0ea7484 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 Jul 07
+*vim9.txt*	For Vim version 8.2.  Last change: 2021 Jul 28
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -321,6 +321,25 @@
 	}
 	echo temp  # Error!
 
+This is especially useful in a user command: >
+
+	command -range Rename {
+		| var save = @a
+		| @a = 'some expression'
+		| echo 'do something with ' .. @a
+		| @a = save
+		|}
+
+And with autocommands: >
+
+   au BufWritePre *.go {
+		| var save = winsaveview()
+		| silent! exe ':%! some formatting command'
+		| winrestview(save)
+		|}
+
+Although using a :def function probably works better.
+
 Declaring a variable with a type but without an initializer will initialize to
 zero, false or empty.
 
@@ -332,6 +351,9 @@
 `:lockvar` does not work on local variables.  Use `:const` and `:final`
 instead.
 
+The `exists()` function does not work on local variables or arguments.  These
+are visible at compile time only, not at runtime.
+
 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.
@@ -426,6 +448,12 @@
 use the command instead: >
 	:substitute(pattern (replacement (
 
+If the expression starts with "!" this is interpreted as a shell command, not
+negation of a condition.  Thus this is a shell command: >
+	!shellCommand->something
+Put the expression in parenthesis to use the "!" for negation: >
+	(!expression)->Method()
+
 Note that while variables need to be defined before they can be used,
 functions can be called before being defined.  This is required to allow
 for cyclic dependencies between functions.  It is slightly less efficient,
@@ -687,6 +715,9 @@
 	      arg	   # OK
 	      )
 
+White space space is not allowed in a `:set` command between the option name
+and a following "&", "!", "<", "=", "+=", "-=" or "^=".
+
 
 No curly braces expansion ~
 
@@ -1045,26 +1076,36 @@
 	  g/pattern/s/^/`=newText`/
 	enddef
 
+Or a script variable can be used: >
+	var newText = 'blah'
+	def Replace()
+	  g/pattern/s/^/\=newText/
+	enddef
+
 Closures defined in a loop will share the same context.  For example: >
 	var flist: list<func>
-	for i in range(10)
+	for i in range(5)
 	  var inloop = i
 	  flist[i] = () => inloop
 	endfor
+	echo range(5)->map((i, _) => flist[i]())
+	# Result: [4, 4, 4, 4, 4]
 
 The "inloop" variable will exist only once, all closures put in the list refer
-to the same instance, which in the end will have the value 9.  This is
-efficient.  If you do want a separate context for each closure call a function
-to define it: >
-	def GetFunc(i: number): func
-	  var inloop = i
-	  return () => inloop
+to the same instance, which in the end will have the value 4.  This is
+efficient, also when looping many times.  If you do want a separate context
+for each closure call a function to define it: >
+	def GetClosure(i: number): func
+	  var infunc = i
+	  return () => infunc
 	enddef
 
 	var flist: list<func>
-	for i in range(10)
-	  flist[i] = GetFunc(i)
+	for i in range(5)
+	  flist[i] = GetClosure(i)
 	endfor
+	echo range(5)->map((i, _) => flist[i]())
+	# Result: [0, 1, 2, 3, 4]
 
 ==============================================================================
 
@@ -1366,7 +1407,8 @@
 - A path not being relative or absolute.  This will be found in the
   "import" subdirectories of 'runtimepath' entries.  The name will usually be
   longer and unique, to avoid loading the wrong file.
-  Note that "after/import" is not used.
+  Note that "after/import" is not used, unless it is explicitly added in
+  'runtimepath'.
 
 Once a vim9 script file has been imported, the result is cached and used the
 next time the same script is imported.  It will not be read again.
@@ -1457,7 +1499,7 @@
 	    var name: string
 	    
 	    def constructor(name: string)
-		this.name = name;
+		this.name = name
 	    enddef
 
 	    def display(): void
diff --git a/runtime/indent/bzl.vim b/runtime/indent/bzl.vim
index 6904bfd..cf4cfb5 100644
--- a/runtime/indent/bzl.vim
+++ b/runtime/indent/bzl.vim
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	Bazel (http://bazel.io)
 " Maintainer:	David Barnett (https://github.com/google/vim-ft-bzl)
-" Last Change:	2017 Jun 13
+" Last Change:	2021 Jul 08
 
 if exists('b:did_indent')
   finish
@@ -41,30 +41,41 @@
     if exists('g:pyindent_open_paren')
       let l:pyindent_open_paren = g:pyindent_open_paren
     endif
-    let g:pyindent_nested_paren = 'shiftwidth() * 2'
-    let g:pyindent_open_paren = 'shiftwidth() * 2'
+    let g:pyindent_nested_paren = 'shiftwidth()'
+    let g:pyindent_open_paren = 'shiftwidth()'
   endif
 
   let l:indent = -1
 
-  " Indent inside parens.
-  " Align with the open paren unless it is at the end of the line.
-  " E.g.
-  "   open_paren_not_at_EOL(100,
-  "                         (200,
-  "                          300),
-  "                         400)
-  "   open_paren_at_EOL(
-  "       100, 200, 300, 400)
   call cursor(a:lnum, 1)
   let [l:par_line, l:par_col] = searchpairpos('(\|{\|\[', '', ')\|}\|\]', 'bW',
       \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :" .
       \ " synIDattr(synID(line('.'), col('.'), 1), 'name')" .
       \ " =~ '\\(Comment\\|String\\)$'")
   if l:par_line > 0
-    call cursor(l:par_line, 1)
-    if l:par_col != col('$') - 1
-      let l:indent = l:par_col
+    " Indent inside parens.
+    if searchpair('(\|{\|\[', '', ')\|}\|\]', 'W',
+      \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :" .
+      \ " synIDattr(synID(line('.'), col('.'), 1), 'name')" .
+      \ " =~ '\\(Comment\\|String\\)$'") && line('.') == a:lnum
+      " If cursor is at close parens, match indent with open parens.
+      " E.g.
+      "   foo(
+      "   )
+      let l:indent = indent(l:par_line)
+    else
+      " Align with the open paren unless it is at the end of the line.
+      " E.g.
+      "   open_paren_not_at_EOL(100,
+      "                         (200,
+      "                          300),
+      "                         400)
+      "   open_paren_at_EOL(
+      "       100, 200, 300, 400)
+      call cursor(l:par_line, 1)
+      if l:par_col != col('$') - 1
+        let l:indent = l:par_col
+      endif
     endif
   endif
 
diff --git a/runtime/indent/testdir/xml.in b/runtime/indent/testdir/xml.in
index b633334..88ad51e 100644
--- a/runtime/indent/testdir/xml.in
+++ b/runtime/indent/testdir/xml.in
@@ -15,7 +15,7 @@
 </tag1>
 <!--
 text comment
-end coment -->
+end comment -->
 </tag0>
 <!-- END_INDENT -->
 
diff --git a/runtime/indent/testdir/xml.ok b/runtime/indent/testdir/xml.ok
index cfdf701..d5e2289 100644
--- a/runtime/indent/testdir/xml.ok
+++ b/runtime/indent/testdir/xml.ok
@@ -15,7 +15,7 @@
         </tag1>
         <!--
                 text comment
-        end coment -->
+        end comment -->
 </tag0>
 <!-- END_INDENT -->
 
diff --git a/runtime/macros/hanoi/hanoi.vim b/runtime/macros/hanoi/hanoi.vim
index 834d6f2..1d075fa 100644
--- a/runtime/macros/hanoi/hanoi.vim
+++ b/runtime/macros/hanoi/hanoi.vim
Binary files differ
diff --git a/runtime/pack/dist/opt/matchit/doc/matchit.txt b/runtime/pack/dist/opt/matchit/doc/matchit.txt
index f2c51e1..ce8e704 100644
--- a/runtime/pack/dist/opt/matchit/doc/matchit.txt
+++ b/runtime/pack/dist/opt/matchit/doc/matchit.txt
@@ -4,7 +4,7 @@
 	`:help matchit-install`
 inside Vim.
 
-For Vim version 8.1.  Last change:  2020 Mar 01
+For Vim version 8.1.  Last change:  2021 May 17
 
 
 		  VIM REFERENCE MANUAL    by Benji Fisher et al
@@ -320,7 +320,7 @@
 this has not been thoroughly tested.
 
 You can use |zero-width| patterns such as |\@<=| and |\zs|.  (The latter has
-not been thouroughly tested in matchit.vim.)  For example, if the keyword "if"
+not been thoroughly tested in matchit.vim.)  For example, if the keyword "if"
 must occur at the start of the line, with optional white space, you might use
 the pattern "\(^\s*\)\@<=if" so that the cursor will end on the "i" instead of
 at the start of the line.  For another example, if HTML had only one tag then
diff --git a/runtime/spell/tet/main.aap b/runtime/spell/tet/main.aap
index 617c8a2..a56531c 100644
--- a/runtime/spell/tet/main.aap
+++ b/runtime/spell/tet/main.aap
@@ -9,7 +9,7 @@
 SPELLDIR = ..
 FILES    = tet_ID.aff tet_ID.dic
 
-# I don't hava a Tetum locale, use the Dutch one instead.
+# I don't have a Tetum locale, use the Dutch one instead.
 all: $SPELLDIR/tet.latin1.spl $SPELLDIR/tet.utf-8.spl ../README_tet.txt
 
 $SPELLDIR/tet.latin1.spl : $FILES
diff --git a/runtime/syntax/aptconf.vim b/runtime/syntax/aptconf.vim
index 8cb1432..d51e7bd 100644
--- a/runtime/syntax/aptconf.vim
+++ b/runtime/syntax/aptconf.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	APT config file
 " Maintainer:	Yann Amar <quidame@poivron.org>
-" Last Change:	2015 Dec 22
+" Last Change:	2021 Jul 12
 
 " quit when a syntax file was already loaded
 if !exists("main_syntax")
@@ -396,10 +396,13 @@
 " }}}
 " Unattended Upgrade: {{{
 syn keyword	aptconfUnattendedUpgrade contained
-	\ AutoFixInterruptedDpkg Automatic-Reboot Automatic-Reboot-Time
-	\ Automatic-Reboot-WithUsers InstallOnShutdown Mail MailOnlyOnError
-	\ MinimalSteps Origins-Pattern Package-Blacklist
-	\ Remove-Unused-Dependencies
+	\ Allow-APT-Mark-Fallback Allow-downgrade AutoFixInterruptedDpkg
+	\ Automatic-Reboot Automatic-Reboot-Time Automatic-Reboot-WithUsers
+	\ Debug InstallOnShutdown Mail MailOnlyOnError MailReport MinimalSteps
+	\ OnlyOnACPower Origins-Pattern Package-Blacklist
+	\ Remove-New-Unused-Dependencies Remove-Unused-Dependencies
+	\ Remove-Unused-Kernel-Packages Skip-Updates-On-Metered-Connections
+	\ SyslogEnable SyslogFacility Verbose
 
 syn cluster	aptconfUnattendedUpgrade_ contains=aptconfUnattendedUpgrade
 " }}}
diff --git a/runtime/syntax/pascal.vim b/runtime/syntax/pascal.vim
index 3ab5c2e..206df21 100644
--- a/runtime/syntax/pascal.vim
+++ b/runtime/syntax/pascal.vim
@@ -3,7 +3,7 @@
 " Maintainer:		Doug Kearns <dougkearns@gmail.com>
 " Previous Maintainers:	Xavier Crégut <xavier.cregut@enseeiht.fr>
 "			Mario Eusebio <bio@dq.fct.unl.pt>
-" Last Change:		2021 Apr 23
+" Last Change:		2021 May 20
 
 " Contributors: Tim Chase <tchase@csc.com>,
 "		Stas Grabois <stsi@vtrails.com>,
diff --git a/runtime/syntax/redif.vim b/runtime/syntax/redif.vim
index 198d5c7..9fa9064 100644
--- a/runtime/syntax/redif.vim
+++ b/runtime/syntax/redif.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:          ReDIF
 " Maintainer:        Axel Castellane <axel.castellane@polytechnique.edu>
-" Last Change:       2021 Jun 17
+" Last Change:       2013 April 17
 " Original Author:   Axel Castellane
 " Source:            http://openlib.org/acmes/root/docu/redif_1.html
 " File Extension:    rdf
@@ -932,7 +932,7 @@
 " Sync: The template-type (ReDIF-Paper, ReDIF-Archive, etc.) influences which
 " fields can follow. Thus sync must search backwards for it.
 "
-" I would like to simply ask VIM to search backward for the first occurrence of
+" I would like to simply ask VIM to search backward for the first occurence of
 " /^Template-Type:/, but it does not seem to be possible, so I have to start
 " from the beginning of the file... This might slow down a lot for files that
 " contain a lot of Template-Type statements.
diff --git a/runtime/tools/shtags.1 b/runtime/tools/shtags.1
index 314df88..0a13802 100644
--- a/runtime/tools/shtags.1
+++ b/runtime/tools/shtags.1
@@ -19,7 +19,7 @@
 .IP "\fB-s <shell>\fP"
 The name of the shell used by the script(s). By default,
 \fBshtags\fP tries to work out which is the appropriate shell for each
-file individually by looking at the first line of each file. This wont
+file individually by looking at the first line of each file. This won't
 work however, if the script starts as a bourne shell script and tries
 to be clever about starting the shell it really wants.
 .b
diff --git a/runtime/tools/xcmdsrv_client.c b/runtime/tools/xcmdsrv_client.c
index c0a60d2..e1aea10 100644
--- a/runtime/tools/xcmdsrv_client.c
+++ b/runtime/tools/xcmdsrv_client.c
@@ -509,7 +509,7 @@
 	    /*
 	     * Didn't recognize this thing.  Just skip through the next
 	     * null character and try again.
-	     * Also, throw away commands that we cant process anyway.
+	     * Also, throw away commands that we can't process anyway.
 	     */
 
 	    while (*p != 0)