Update runtime files.
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 130e642..e72a388 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 8.2.  Last change: 2020 aug 30
+*eval.txt*	For Vim version 8.2.  Last change: 2020 Sep 06
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -120,8 +120,9 @@
 
 						*TRUE* *FALSE* *Boolean*
 For boolean operators Numbers are used.  Zero is FALSE, non-zero is TRUE.
-You can also use |v:false| and |v:true|.  When TRUE is returned from a
-function it is the Number one, FALSE is the number zero.
+You can also use |v:false| and |v:true|.  In Vim9 script |false| and |true|. 
+When TRUE is returned from a function it is the Number one, FALSE is the
+number zero.
 
 Note that in the command: >
 	:if "foo"
@@ -2360,7 +2361,7 @@
 				Number	assert file contents are equal
 assert_exception({error} [, {msg}])
 				Number	assert {error} is in v:exception
-assert_fails({cmd} [, {error} [, {msg} [, {lnum}]]])
+assert_fails({cmd} [, {error} [, {msg} [, {lnum} [, {context}]]]])
 				Number	assert {cmd} fails
 assert_false({actual} [, {msg}])
 				Number	assert {actual} is false
@@ -3362,7 +3363,7 @@
 		above.
 
 		If the buffer doesn't exist, -1 is returned.  Or, if the
-		{create} argument is present and not zero, a new, unlisted,
+		{create} argument is present and TRUE, a new, unlisted,
 		buffer is created and its number is returned.  Example: >
 			let newbuf = bufnr('Scratch001', 1)
 <		Using an empty name uses the current buffer. To create a new
@@ -3513,7 +3514,7 @@
 		Example for "utf-8": >
 			char2nr("á")		returns 225
 			char2nr("á"[0])		returns 195
-<		With {utf8} set to 1, always treat as utf-8 characters.
+<		With {utf8} set to TRUE, always treat as utf-8 characters.
 		A combining character is a separate character.
 		|nr2char()| does the opposite.
 		To turn a string into a list of character numbers: >
@@ -7608,7 +7609,7 @@
 <		{only available when compiled with the |+perl| feature}
 
 
-popup_ functions are documented here: |popup-functions|.
+popup_ functions are documented here: |popup-functions|
 
 
 pow({x}, {y})						*pow()*
@@ -11040,7 +11041,8 @@
 		Return the screen position of window {nr} as a list with two
 		numbers: [row, col].  The first window always has position
 		[1, 1], unless there is a tabline, then it is [2, 1].
-		{nr} can be the window number or the |window-ID|.
+		{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
 		tabpage.
 
diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt
index 83fdbbb..8900026 100644
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1,4 +1,4 @@
-*map.txt*       For Vim version 8.2.  Last change: 2020 Aug 30
+*map.txt*       For Vim version 8.2.  Last change: 2020 Sep 06
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -195,7 +195,7 @@
 before any partial matches.  This works when:
 - There is only one matching buffer-local mapping, since these are always
   found before global mappings.
-- There is another buffer-local mapping that partly matches, but it is was
+- There is another buffer-local mapping that partly matches, but it is
   defined earlier (last defined mapping is found first).
 
 						*:map-<silent>* *:map-silent*
@@ -289,15 +289,8 @@
 CTRL-L inserts the next number, CTRL-R resets the count.  CTRL-R returns an
 empty string, so that nothing is inserted.
 
-Note that there are some tricks to make special keys work and escape CSI bytes
-in the text.  The |:map| command also does this, thus you must avoid that it
-is done twice.  This does not work: >
-	:imap <expr> <F3> "<Char-0x611B>"
-Because the <Char- sequence is escaped for being a |:imap| argument and then
-again for using <expr>.  This does work: >
-	:imap <expr> <F3> "\u611B"
-Using 0x80 as a single byte before other text does not work, it will be seen
-as a special key.
+Note that using 0x80 as a single byte before other text does not work, it will
+be seen as a special key.
 
 
 1.3 MAPPING AND MODES					*:map-modes*
@@ -881,35 +874,47 @@
 
 Here is an example that counts the number of spaces with <F4>: >
 
-	nmap <silent> <F4> :set opfunc=CountSpaces<CR>g@
-	vmap <silent> <F4> :<C-U>call CountSpaces(visualmode(), 1)<CR>
+	nnoremap <expr> <F4> CountSpaces()
+	xnoremap <expr> <F4> CountSpaces()
+	" doubling <F4> works on a line
+	nnoremap <expr> <F4><F4> CountSpaces() .. '_'
 
-	function! CountSpaces(type, ...)
+	function CountSpaces(type = '') abort
+	  if a:type == ''
+	    set opfunc=CountSpaces
+	    return 'g@'
+ 	  endif
+
 	  let sel_save = &selection
-	  let &selection = "inclusive"
-	  let reg_save = @@
+	  let reg_save = getreginfo('"')
+	  let cb_save = &clipboard
+	  let visual_marks_save = [getpos("'<"), getpos("'>")]
 
-	  if a:0  " Invoked from Visual mode, use gv command.
-	    silent exe "normal! gvy"
-	  elseif a:type == 'line'
-	    silent exe "normal! '[V']y"
-	  else
-	    silent exe "normal! `[v`]y"
-	  endif
-
-	  echomsg strlen(substitute(@@, '[^ ]', '', 'g'))
-
-	  let &selection = sel_save
-	  let @@ = reg_save
+	  try
+	    set clipboard= selection=inclusive
+	    let commands = #{line: "'[V']y", char: "`[v`]y", block: "`[\<c-v>`]y"}
+	    silent exe 'noautocmd keepjumps normal! ' .. get(commands, a:type, '')
+	    echom getreg('"')->count(' ')
+	  finally
+	    call setreg('"', reg_save)
+	    call setpos("'<", visual_marks_save[0])
+	    call setpos("'>", visual_marks_save[1])
+	    let &clipboard = cb_save
+	    let &selection = sel_save
+	  endtry
 	endfunction
 
+An <expr> mapping is used to be able to fetch any prefixed count and register.
+This also avoids using a command line, which would trigger CmdlineEnter and
+CmdlineLeave autocommands.
+
 Note that the 'selection' option is temporarily set to "inclusive" to be able
 to yank exactly the right text by using Visual mode from the '[ to the ']
 mark.
 
-Also note that there is a separate mapping for Visual mode.  It removes the
-"'<,'>" range that ":" inserts in Visual mode and invokes the function with
-visualmode() and an extra argument.
+Also note that the 'clipboard' option is temporarily emptied to avoid
+clobbering the `"*` or `"+` registers, if its value contains the item `unnamed`
+or `unnamedplus`.
 
 ==============================================================================
 2. Abbreviations			*abbreviations* *Abbreviations*
diff --git a/runtime/doc/message.txt b/runtime/doc/message.txt
index 5024b3e..9ce649d 100644
--- a/runtime/doc/message.txt
+++ b/runtime/doc/message.txt
@@ -1,4 +1,4 @@
-*message.txt*   For Vim version 8.2.  Last change: 2020 Aug 20
+*message.txt*   For Vim version 8.2.  Last change: 2020 Sep 07
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -75,7 +75,7 @@
 
 
 LIST OF MESSAGES
-			*E222* *E228* *E232* *E256* *E293* *E298* *E304* *E317*
+			*E222* *E228* *E232* *E293* *E298* *E304* *E317*
 			*E318* *E356* *E438* *E439* *E440* *E316* *E320* *E322*
 			*E323* *E341* *E473* *E570* *E685* *E292*  >
   Add to read buffer
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index b5ceb38..85a0296 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 8.2.  Last change: 2020 Aug 28
+*options.txt*	For Vim version 8.2.  Last change: 2020 Sep 06
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -701,6 +701,7 @@
 	"double":	Use twice the width of ASCII characters.
 							*E834* *E835*
 	The value "double" cannot be used if 'listchars' or 'fillchars'
+	contains a character that would be double width.
 
 	The values are overruled for characters specified with
 	|setcellwidths()|.
@@ -6563,7 +6564,7 @@
 	For the Amiga the default is ">".  For MS-Windows the default is
 	">%s 2>&1".  The output is directly saved in a file and not echoed to
 	the screen.
-	For Unix the default it "| tee".  The stdout of the compiler is saved
+	For Unix the default is "| tee".  The stdout of the compiler is saved
 	in a file and echoed to the screen.  If the 'shell' option is "csh" or
 	"tcsh" after initializations, the default becomes "|& tee".  If the
 	'shell' option is "sh", "ksh", "mksh", "pdksh", "zsh", "zsh-beta",
@@ -7807,8 +7808,8 @@
 						*'termwinsize'* *'tws'*
 'termwinsize' 'tws'	string	(default "")
 			local to window
-	Size of the |terminal| window.  Format: {rows}x{columns} or
-	{rows}*{columns}.
+	Size used when opening the |terminal| window.  Format:
+		{rows}x{columns} or {rows}*{columns}.
 	- When empty the terminal gets the size from the window.
 	- When set with a "x" (e.g., "24x80") the terminal size is not
 	  adjusted to the window size.  If the window is smaller only the
@@ -7819,6 +7820,8 @@
 	- When rows is zero then use the height of the window.
 	- When columns is zero then use the width of the window.
 	- Using "0x0" or "0*0" is the same as empty.
+	- Can be overruled in the |term_start()| options with "term_rows" and
+	  "term_cols".
 
 	Examples:
 	  "30x0" uses 30 rows and the current window width.
diff --git a/runtime/doc/pattern.txt b/runtime/doc/pattern.txt
index f9a34d4..19edb72 100644
--- a/runtime/doc/pattern.txt
+++ b/runtime/doc/pattern.txt
@@ -1,4 +1,4 @@
-*pattern.txt*   For Vim version 8.2.  Last change: 2020 Aug 15
+*pattern.txt*   For Vim version 8.2.  Last change: 2020 Sep 01
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -797,11 +797,12 @@
 	^beep(		the start of the C function "beep" (probably).
 
 							*/\^*
-\^	Matches literal '^'.  Can be used at any position in the pattern.
+\^	Matches literal '^'.  Can be used at any position in the pattern, but
+	not inside [].
 
 							*/\_^*
 \_^	Matches start-of-line. |/zero-width|  Can be used at any position in
-	the pattern.
+	the pattern, but not inside [].
 	Example		matches ~
 	\_s*\_^foo	white space and blank lines and then "foo" at
 			start-of-line
@@ -812,12 +813,13 @@
 	|/zero-width|
 
 							*/\$*
-\$	Matches literal '$'.  Can be used at any position in the pattern.
+\$	Matches literal '$'.  Can be used at any position in the pattern, but
+	not inside [].
 
 							*/\_$*
 \_$	Matches end-of-line. |/zero-width|  Can be used at any position in the
-	pattern.  Note that "a\_$b" never matches, since "b" cannot match an
-	end-of-line.  Use "a\nb" instead |/\n|.
+	pattern, but not inside [].  Note that "a\_$b" never matches, since
+	"b" cannot match an end-of-line.  Use "a\nb" instead |/\n|.
 	Example		matches ~
 	foo\_$\_s*	"foo" at end-of-line and following white space and
 			blank lines
@@ -840,8 +842,9 @@
 	|/zero-width|
 
 							*/\zs*
-\zs	Matches at any position, and sets the start of the match there: The
-	next char is the first char of the whole match. |/zero-width|
+\zs	Matches at any position, but not inside [], and sets the start of the
+	match there: The next char is the first char of the whole match.
+	|/zero-width|
 	Example: >
 		/^\s*\zsif
 <	matches an "if" at the start of a line, ignoring white space.
@@ -852,8 +855,9 @@
 	This cannot be followed by a multi. *E888*
 	{not available when compiled without the |+syntax| feature}
 							*/\ze*
-\ze	Matches at any position, and sets the end of the match there: The
-	previous char is the last char of the whole match. |/zero-width|
+\ze	Matches at any position, but not inside [], and sets the end of the
+	match there: The previous char is the last char of the whole match.
+	|/zero-width|
 	Can be used multiple times, the last one encountered in a matching
 	branch is used.
 	Example: "end\ze\(if\|for\)" matches the "end" in "endif" and
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 6a93907..d320272 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -4071,7 +4071,6 @@
 E253	mbyte.txt	/*E253*
 E254	message.txt	/*E254*
 E255	sign.txt	/*E255*
-E256	message.txt	/*E256*
 E257	if_cscop.txt	/*E257*
 E258	remote.txt	/*E258*
 E259	if_cscop.txt	/*E259*
@@ -6323,6 +6322,7 @@
 extension-removal	cmdline.txt	/*extension-removal*
 extensions-improvements	todo.txt	/*extensions-improvements*
 f	motion.txt	/*f*
+false	vim9.txt	/*false*
 false-variable	eval.txt	/*false-variable*
 faq	intro.txt	/*faq*
 farsi	farsi.txt	/*farsi*
@@ -8485,6 +8485,7 @@
 progpath-variable	eval.txt	/*progpath-variable*
 progress.vim	syntax.txt	/*progress.vim*
 prompt-buffer	channel.txt	/*prompt-buffer*
+prompt_getprompt()	eval.txt	/*prompt_getprompt()*
 prompt_setcallback()	eval.txt	/*prompt_setcallback()*
 prompt_setinterrupt()	eval.txt	/*prompt_setinterrupt()*
 prompt_setprompt()	eval.txt	/*prompt_setprompt()*
@@ -9644,6 +9645,7 @@
 tr()	eval.txt	/*tr()*
 trim()	eval.txt	/*trim()*
 trojan-horse	starting.txt	/*trojan-horse*
+true	vim9.txt	/*true*
 true-variable	eval.txt	/*true-variable*
 trunc()	eval.txt	/*trunc()*
 try-conditionals	eval.txt	/*try-conditionals*
diff --git a/runtime/doc/terminal.txt b/runtime/doc/terminal.txt
index ff52078..af6151c 100644
--- a/runtime/doc/terminal.txt
+++ b/runtime/doc/terminal.txt
@@ -1,4 +1,4 @@
-*terminal.txt*	For Vim version 8.2.  Last change: 2020 Jun 06
+*terminal.txt*	For Vim version 8.2.  Last change: 2020 Sep 04
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -476,9 +476,11 @@
 		   "term_name"	     name to use for the buffer name, instead
 				     of the first file name.
 		   "term_rows"	     vertical size to use for the terminal,
-				     instead of using 'termwinsize'
+				     instead of using 'termwinsize', but
+				     respecting the minimal size
 		   "term_cols"	     horizontal size to use for the terminal,
-				     instead of using 'termwinsize'
+				     instead of using 'termwinsize', but
+				     respecting the minimal size
 		   "vertical"	     split the window vertically
 		   "curwin"	     use the current window, do not split the
 				     window; fails if the current buffer
diff --git a/runtime/doc/testing.txt b/runtime/doc/testing.txt
index 23d3e36..9644685 100644
--- a/runtime/doc/testing.txt
+++ b/runtime/doc/testing.txt
@@ -1,4 +1,4 @@
-*testing.txt*	For Vim version 8.2.  Last change: 2020 Aug 17
+*testing.txt*	For Vim version 8.2.  Last change: 2020 Sep 06
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index f9288fa..bd05ecf 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 8.2.  Last change: 2020 Aug 29
+*todo.txt*      For Vim version 8.2.  Last change: 2020 Sep 07
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -41,15 +41,45 @@
 Why does Test_invalid_sid() not work in the GUI?
 
 Making everything work:
-- Check :const works the same as in legacy script.
+- Should :const work the same as in legacy script?
+  Or should it work like in Typescript: only the variable is fixed, not the
+  value itself.
+  Then use ":const!" to also fix/lock the value?
+  Typescript uses "as const", which is weird.
+  Alternative:  const var = <const>value
+      looks quite strange quite verbose
+      But can be used in several places:
+	    SomeFunc(<const>[1, 2, 3])
+      In Vim this basically means "lock this value".
+      How about:
+	    SomeFunc(<const>[[1], [2], [3]])  # are sub-lists immutable?
+	    SomeFunc(<const>myList)  # is myList mutable afterwards?
+
 - Run the same tests in :def and Vim9 script, like in Test_expr7_not()
 - :put with a "=" register argument doesn't work, need to find the expression
   and compile it. (#6397)
 - At the Vim9 script level, keep script variables local to the block they are
-  declared in?  Need to remember what variables were declared and delete them
-  when leaving the block.
-- Implement { } block at the script level.
-- Use the line number argument with assert_fails() in many more tests.
+  declared in, like in Javascript (using :let).
+  -> Need to remember what variables were declared and delete them when
+     leaving the block.
+  -> if a function is defined it may need to keep the block-locals
+  Then Implement { } block at the script level.
+- Recognize call to assert_fails() and execute it in the function context?
+  Won't work if the command itself fails, not an expression failure:
+	assert_fails("unknown", "E99:")
+  Use try/catch is complicated:
+    let did_catch = false
+    try
+	unknown
+    catch
+	assert_caught('E99:')
+	did_catch = true
+    endtry
+    assert_true('did_catch')
+  Add a new command, 
+    assertfail
+       unknown
+    endassertfail E99:.*unknown
 - In autocmd: use legacy syntax, not whatever the current script uses?
 - need to check type when a declaration specifies a type: #6507
 	let nr: number = 'asdf'
@@ -181,10 +211,8 @@
 - :goto does not go to the right place when text properties are present.
   (#5930)
 - "cc" does not call inserted_bytes(). (Axel Forsman, #5763)
-- Get E685 with a sequence of commands. (#5674)
 - Combining text property with 'cursorline' does not always work (Billie
   Cleek, #5533)
-- Text properties spanning more than one line.  #5683
 - See remarks at top of src/textprop.c
 
 'incsearch' with :s:
@@ -263,7 +291,8 @@
 
 Error numbers available: E653
 
-Remove "MacOS X installation"?  $APPDIR is no longer set.
+Patch to implement the vimtutor with a plugin: #6414
+Was originally writtten by Felipe Morales.
 
 Remove SPACE_IN_FILENAME ? It is only used for completion.
 
@@ -372,9 +401,6 @@
 Like when changing 'fileformat'.  Save the old key in save_file_ff().
 (Ninu-Ciprian Marginean)
 
-Patch to implement the vimtutor with a plugin: #6414
-Was originally writtten by Felipe Morales.
-
 Strange sequence of BufWipeout and BufNew events while doing omni-complete.
 (Paul Jolly, #5656)
 Get BufDelete without preceding BufNew. (Paul Jolly, #5694)
@@ -397,6 +423,7 @@
 Implement completion for "breakadd".  Should expand the second argument, e.g.
 "func", and then function names after ":breakadd func".  Including
 script-local functions.
+Also for ":profile".
 
 :unmap <c-n> gives error but does remove the mapping. (Antony Scriven, 2019
 Dec 19)
@@ -1222,8 +1249,6 @@
 
 Error in test_startup_utf8 on Solaris. (Danek Duvall, 2016 Aug 17)
 
-Completion for :!cmd shows each match twice. #1435
-
 GTK: When adding a timer from 'balloonexpr' it won't fire, because
 g_main_context_iteration() doesn't return.  Need to trigger an event when the
 timer expires.
@@ -1422,9 +1447,6 @@
 3.  Doesn't work properly according to Yukihiro Nakadaira.
 Also see #1635.
 
-When 'keywordprg' starts with ":" the argument is still escaped as a shell
-command argument. (Romain Lafourcade, 2016 Oct 16, #1175)
-
 Idea from Sven: record sequence of keys.  Useful to show others what they are
 doing (look over the shoulder), and also to see what happened.
 Probably list of keystrokes, with some annotations for mode changes.
diff --git a/runtime/doc/usr_03.txt b/runtime/doc/usr_03.txt
index 38b36dd..c3bf2d3 100644
--- a/runtime/doc/usr_03.txt
+++ b/runtime/doc/usr_03.txt
@@ -1,4 +1,4 @@
-*usr_03.txt*	For Vim version 8.2.  Last change: 2020 Feb 29
+*usr_03.txt*	For Vim version 8.2.  Last change: 2020 Sep 03
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -30,10 +30,11 @@
 
 To move the cursor forward one word, use the "w" command.  Like most Vim
 commands, you can use a numeric prefix to move past multiple words.  For
-example, "3w" moves three words.  This figure shows how it works:
+example, "3w" moves three words.  This figure shows how it works (starting at
+the position marked with "x"):
 
 	This is a line with example text ~
-	  --->-->->----------------->
+	  x-->-->->----------------->
 	   w  w  w    3w
 
 Notice that "w" moves to the start of the next word if it already is at the
@@ -41,15 +42,15 @@
    The "b" command moves backward to the start of the previous word:
 
 	This is a line with example text ~
-	<----<--<-<---------<---
+	<----<--<-<---------<--x
 	   b   b b    2b      b
 
 There is also the "e" command that moves to the next end of a word and "ge",
 which moves to the previous end of a word:
 
 	This is a line with example text ~
-	   <-   <--- ----->   ---->
-	   ge    ge     e       e
+	   <----<----x---->------------>
+	   2ge   ge     e       we
 
 If you are at the last word of a line, the "w" command will take you to the
 first word in the next line.  Thus you can use this to move through a
@@ -82,12 +83,12 @@
 
 The "^" command moves to the first non-blank character of the line.  The "0"
 command (zero) moves to the very first character of the line, and the <Home>
-key does the same thing.  In a picture:
+key does the same thing.  In a picture ("." indicates a space):
 
 		  ^
-	     <------------
+	     <-----------x
 	.....This is a line with example text ~
-	<-----------------   --------------->
+	<----------------x   x-------------->
 		0		   $
 
 (the "....." indicates blanks here)
diff --git a/runtime/doc/usr_40.txt b/runtime/doc/usr_40.txt
index 3456a76..21c09b4 100644
--- a/runtime/doc/usr_40.txt
+++ b/runtime/doc/usr_40.txt
@@ -1,4 +1,4 @@
-*usr_40.txt*	For Vim version 8.2.  Last change: 2020 Jul 28
+*usr_40.txt*	For Vim version 8.2.  Last change: 2020 Sep 02
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -453,15 +453,15 @@
 performs the ":write".
    The general form of the :autocmd command is as follows: >
 
-	:autocmd [group] {events} {file-pattern} [nested] {command}
+	:autocmd [group] {events} {file-pattern} [++nested] {command}
 
 The [group] name is optional.  It is used in managing and calling the commands
 (more on this later).  The {events} parameter is a list of events (comma
 separated) that trigger the command.
    {file-pattern} is a filename, usually with wildcards.  For example, using
 "*.txt" makes the autocommand be used for all files whose name end in ".txt".
-The optional [nested] flag allows for nesting of autocommands (see below), and
-finally, {command} is the command to be executed.
+The optional [++nested] flag allows for nesting of autocommands (see below),
+and finally, {command} is the command to be executed.
 
 
 EVENTS
@@ -578,7 +578,7 @@
 event, it will not trigger the autocommands that would set the syntax, for
 example.  To make the events triggered, add the "nested" argument: >
 
-	:autocmd FileChangedShell * nested  edit
+	:autocmd FileChangedShell * ++nested  edit
 
 
 EXECUTING AUTOCOMMANDS
diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt
index b11f013..1dbfba1 100644
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -327,9 +327,9 @@
 	:echo (10 + 5) * 2
 <	30 ~
 
-Strings can be concatenated with ".".  Example: >
+Strings can be concatenated with ".." (see |expr6|).  Example: >
 
-	:echo "foo" . "bar"
+	:echo "foo" .. "bar"
 <	foobar ~
 
 When the ":echo" command gets multiple arguments, it separates them with a
@@ -496,9 +496,9 @@
 very powerful way to build commands and execute them.
    An example is to jump to a tag, which is contained in a variable: >
 
-	:execute "tag " . tag_name
+	:execute "tag " .. tag_name
 
-The "." is used to concatenate the string "tag " with the value of variable
+The ".." is used to concatenate the string "tag " with the value of variable
 "tag_name".  Suppose "tag_name" has the value "get_cmd", then the command that
 will be executed is: >
 
@@ -514,7 +514,7 @@
    To make ":normal" work with an expression, combine ":execute" with it.
 Example: >
 
-	:execute "normal " . normal_commands
+	:execute "normal " .. normal_commands
 
 The variable "normal_commands" must contain the Normal mode commands.
    Make sure that the argument for ":normal" is a complete command.  Otherwise
@@ -531,12 +531,12 @@
 value, you can use the eval() function: >
 
 	:let optname = "path"
-	:let optval = eval('&' . optname)
+	:let optval = eval('&' .. optname)
 
 A "&" character is prepended to "path", thus the argument to eval() is
 "&path".  The result will then be the value of the 'path' option.
    The same thing can be done with: >
-	:exe 'let optval = &' . optname
+	:exe 'let optval = &' .. optname
 
 ==============================================================================
 *41.6*	Using functions
@@ -1288,7 +1288,7 @@
 	:    let n = n + len(split(getline(lnum)))
 	:    let lnum = lnum + 1
 	:  endwhile
-	:  echo "found " . n . " words"
+	:  echo "found " .. n .. " words"
 	:endfunction
 
 You can call this function with: >
@@ -1301,7 +1301,7 @@
 range, with the cursor in that line.  Example: >
 
 	:function  Number()
-	:  echo "line " . line(".") . " contains: " . getline(".")
+	:  echo "line " .. line(".") .. " contains: " .. getline(".")
 	:endfunction
 
 If you call this function with: >
@@ -1325,11 +1325,11 @@
 
 	:function Show(start, ...)
 	:  echohl Title
-	:  echo "start is " . a:start
+	:  echo "start is " .. a:start
 	:  echohl None
 	:  let index = 1
 	:  while index <= a:0
-	:    echo "  Arg " . index . " is " . a:{index}
+	:    echo "  Arg " .. index .. " is " .. a:{index}
 	:    let index = index + 1
 	:  endwhile
 	:  echo ""
@@ -1737,10 +1737,10 @@
 
 	:let tmp = tempname()
 	:try
-	:   exe ".,$write " . tmp
-	:   exe "!filter " . tmp
+	:   exe ".,$write " .. tmp
+	:   exe "!filter " .. tmp
 	:   .,$delete
-	:   exe "$read " . tmp
+	:   exe "$read " .. tmp
 	:finally
 	:   call delete(tmp)
 	:endtry
@@ -2091,8 +2091,8 @@
 We will define a function that adds a new typing correction: >
 
  30	function s:Add(from, correct)
- 31	  let to = input("type the correction for " . a:from . ": ")
- 32	  exe ":iabbrev " . a:from . " " . to
+ 31	  let to = input("type the correction for " .. a:from .. ": ")
+ 32	  exe ":iabbrev " .. a:from .. " " .. to
  ..
  36	endfunction
 
@@ -2197,7 +2197,7 @@
  30	function s:Add(from, correct)
  ..
  34	  let s:count = s:count + 1
- 35	  echo s:count . " corrections now"
+ 35	  echo s:count .. " corrections now"
  36	endfunction
 
 First s:count is initialized to 4 in the script itself.  When later the
@@ -2240,11 +2240,11 @@
  28	noremap <SID>Add  :call <SID>Add(expand("<cword>"), 1)<CR>
  29
  30	function s:Add(from, correct)
- 31	  let to = input("type the correction for " . a:from . ": ")
- 32	  exe ":iabbrev " . a:from . " " . to
+ 31	  let to = input("type the correction for " .. a:from .. ": ")
+ 32	  exe ":iabbrev " .. a:from .. " " .. to
  33	  if a:correct | exe "normal viws\<C-R>\" \b\e" | endif
  34	  let s:count = s:count + 1
- 35	  echo s:count . " corrections now"
+ 35	  echo s:count .. " corrections now"
  36	endfunction
  37
  38	if !exists(":Correct")
@@ -2492,7 +2492,7 @@
 undo the settings in your filetype plugin.  Example: >
 
 	let b:undo_ftplugin = "setlocal fo< com< tw< commentstring<"
-		\ . "| unlet b:match_ignorecase b:match_words b:match_skip"
+		\ .. "| unlet b:match_ignorecase b:match_words b:match_skip"
 
 Using ":setlocal" with "<" after the option name resets the option to its
 global value.  That is mostly the best way to reset the option value.
@@ -2613,17 +2613,17 @@
 		map <F19> :call BufNetWrite('something')<CR>
 
 		let s:did_load = 1
-		exe 'au FuncUndefined BufNet* source ' . expand('<sfile>')
+		exe 'au FuncUndefined BufNet* source ' .. expand('<sfile>')
 		finish
 	endif
 
 	function BufNetRead(...)
-		echo 'BufNetRead(' . string(a:000) . ')'
+		echo 'BufNetRead(' .. string(a:000) .. ')'
 		" read functionality here
 	endfunction
 
 	function BufNetWrite(...)
-		echo 'BufNetWrite(' . string(a:000) . ')'
+		echo 'BufNetWrite(' .. string(a:000) .. ')'
 		" write functionality here
 	endfunction
 
diff --git a/runtime/doc/version5.txt b/runtime/doc/version5.txt
index 4bbae4a..803d743 100644
--- a/runtime/doc/version5.txt
+++ b/runtime/doc/version5.txt
@@ -1,4 +1,4 @@
-*version5.txt*  For Vim version 8.2.  Last change: 2020 Aug 15
+*version5.txt*  For Vim version 8.2.  Last change: 2020 Sep 02
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -4417,7 +4417,7 @@
 When compiling os_win32.c with MIN_FEAT the apply_autocmds() should not be
 used. (Aaron)
 
-This autocommand looped forever: ":au FileChangedShell * nested e <afile>"
+This autocommand looped forever: ":au FileChangedShell * ++nested e <afile>"
 Now FileChangeShell never nests. (Roemer)
 
 When evaluating an ":elseif" that was not going to matter anyway, ignore
diff --git a/runtime/doc/vim9.txt b/runtime/doc/vim9.txt
index 8eb60be..a32ce18 100644
--- a/runtime/doc/vim9.txt
+++ b/runtime/doc/vim9.txt
@@ -1,4 +1,4 @@
-*vim9.txt*	For Vim version 8.2.  Last change: 2020 Aug 27
+*vim9.txt*	For Vim version 8.2.  Last change: 2020 Sep 07
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -114,7 +114,7 @@
 
 Variable arguments are defined as the last argument, with a name and have a
 list type, similar to TypeScript.  For example, a list of numbers: >
-  	def MyFunc(...itemlist: list<number>)
+	def MyFunc(...itemlist: list<number>)
 	   for item in itemlist
 	     ...
 
@@ -128,8 +128,8 @@
 autoload script the "name#" prefix is sufficient. >
 	def ThisFunction()          # script-local
 	def s:ThisFunction()        # script-local
-	def g:ThatFunction()	    # global
-	def ThatFunction()	    # global if no local ThatFunction()
+	def g:ThatFunction()        # global
+	def ThatFunction()          # global if no local ThatFunction()
 	def scriptname#function()   # autoload
 
 When using `:function` or `:def` to specify a new function inside a function,
@@ -173,7 +173,7 @@
 	else
 	   let inner = 0
 	endif
-	echo inner  " Error!
+	echo inner  # Error!
 
 The declaration must be done earlier: >
 	let inner: number
@@ -190,7 +190,7 @@
 	   let temp = 'temp'
 	   ...
 	}
-	echo temp  " Error!
+	echo temp  # Error!
 
 An existing variable cannot be assigned to with `:let`, since that implies a
 declaration.  Global, window, tab, buffer and Vim variables can only be used
@@ -222,7 +222,7 @@
 Omitting :call and :eval ~
 
 Functions can be called without `:call`: >
-  	writefile(lines, 'file')
+	writefile(lines, 'file')
 Using `:call` is still possible, but this is discouraged.
 
 A method call without `eval` is possible, so long as the start is an
@@ -329,26 +329,26 @@
   current function.
 - No line break is allowed in the LHS of an assignment.  Specifically when
   unpacking a list |:let-unpack|. This is OK: >
-  	[var1, var2] =
+	[var1, var2] =
 		Func()
 <  This does not work: >
-  	[var1,
+	[var1,
 	    var2] =
 		Func()
 - No line break is allowed in between arguments of an `:echo`, `:execute` and
   similar commands.  This is OK: >
-  	echo [1,
+	echo [1,
 		2] [3,
 			4]
 <  This does not work: >
-  	echo [1, 2]
+	echo [1, 2]
 		[3, 4]
 - No line break is allowed in the arguments of a lambda, between the "{" and
   "->".  This is OK: >
-  	filter(list, {k, v ->
+	filter(list, {k, v ->
 			v > 0})
 <  This does not work: >
-  	filter(list, {k,
+	filter(list, {k,
 			v -> v > 0})
 
 
@@ -372,11 +372,11 @@
 White space ~
 
 Vim9 script enforces proper use of white space.  This is no longer allowed: >
-	let var=234	" Error!
-	let var= 234	" Error!
-	let var =234	" Error!
+	let var=234	# Error!
+	let var= 234	# Error!
+	let var =234	# Error!
 There must be white space before and after the "=": >
-	let var = 234	" OK
+	let var = 234	# OK
 White space must also be put before the # that starts a comment after a
 command: >
 	let var = 234# Error!
@@ -386,14 +386,14 @@
 
 White space is not allowed:
 - Between a function name and the "(": >
-  	call Func (arg)	   " Error!
-  	call Func
-	     \ (arg)	   " Error!
-  	call Func(arg)	   " OK
-  	call Func(
-	     \ arg)	   " OK
-  	call Func(
-	     \ arg	   " OK
+	call Func (arg)	   # Error!
+	call Func
+	     \ (arg)	   # Error!
+	call Func(arg)	   # OK
+	call Func(
+	     \ arg)	   # OK
+	call Func(
+	     \ arg	   # OK
 	     \ )
 
 
@@ -438,7 +438,7 @@
 
 Simple types are string, float, special and bool.  For other types |string()|
 can be used.
-
+							*false* *true*
 In Vim9 script one can use "true" for v:true and "false" for v:false.
 
 Indexing a string with [idx] or [idx, idx] uses character indexes instead of
@@ -455,16 +455,16 @@
 be made.  Here is a summary of what might be unexpected.
 
 Ex command ranges need to be prefixed with a colon. >
-  	->		" legacy Vim: shifts the previous line to the right
-	->func()	" Vim9: method call in continuation line
-	:->		" Vim9: shifts the previous line to the right
+	->		# legacy Vim: shifts the previous line to the right
+	->func()	# Vim9: method call in continuation line
+	:->		# Vim9: shifts the previous line to the right
 
-	%s/a/b		" legacy Vim: substitute on all lines
+	%s/a/b		# legacy Vim: substitute on all lines
 	x = alongname
-	     % another	" Vim9: line continuation without a backslash
-	:%s/a/b		" Vim9: substitute on all lines
-	'text'->func()	" Vim9: method call
-	:'t		" legacy Vim: jump to mark m
+	     % another	# Vim9: line continuation without a backslash
+	:%s/a/b		# Vim9: substitute on all lines
+	'text'->func()	# Vim9: method call
+	:'t		# legacy Vim: jump to mark m
 
 Some Ex commands can be confused with assignments in Vim9 script: >
 	g:name = value  # assignment
@@ -484,7 +484,7 @@
 	  if !has('feature')
 	    return
 	  endif
-	  use-feature  " May give compilation error
+	  use-feature  # May give compilation error
 	enddef
 For a workaround, split it in two functions: >
 	func Maybe()
@@ -497,7 +497,7 @@
 	    use-feature
 	  enddef
 	endif
-Of put the unsupported code inside an `if` with a constant expression that
+Or put the unsupported code inside an `if` with a constant expression that
 evaluates to false: >
 	def Maybe()
 	  if has('feature')
@@ -699,8 +699,8 @@
 
 In general: Whenever the type is clear it can be omitted.  For example, when
 declaring a variable and giving it a value: >
-	let var = 0		" infers number type
-	let var = 'hello'	" infers string type
+	let var = 0		# infers number type
+	let var = 'hello'	# infers string type
 
 The type of a list and dictionary comes from the common type of the values.
 If the values all have the same type, that type is used for the list or
@@ -719,8 +719,8 @@
 bugs.
 
 In Vim9 script this has been made stricter.  In most places it works just as
-before, if the expected type was already.  There will sometimes be an error,
-thus breaking backwards compatibility.  For example:
+before, if the value used matches the expected type.  There will sometimes be
+an error, thus breaking backwards compatibility.  For example:
 - Using a number other than 0 or 1 where a boolean is expected.  *E1023*
 - Using a string value when setting a number options.
 - Using a number where a string is expected.   *E1024*
@@ -801,6 +801,9 @@
 to choose the name "That", but it is highly recommended to use the name of the
 script file to avoid confusion.
 
+`:import` can also be used in legacy Vim script.  The imported items still
+become script-local, even when the "s:" prefix is not given.
+
 The script name after `import` can be:
 - A relative path, starting "." or "..".  This finds a file relative to the
   location of the script file itself.  This is useful to split up a large
@@ -846,7 +849,7 @@
    items and any private items. >
 	vim9script
 	let localVar = 'local'
-   	export def FilterFunc(arg: string): string
+	export def FilterFunc(arg: string): string
 	   ...
 <   This goes in .../import/someother.vim.
 
@@ -934,8 +937,8 @@
 
 Since Vim already uses `:let` and `:const` and optional type checking is
 desirable, the JavaScript/TypeScript syntax fits best for variable
-declarations. >
-	const greeting = 'hello'  " string type is inferred
+declarations: >
+	const greeting = 'hello'  # string type is inferred
 	let name: string
 	...
 	name = 'John'
@@ -945,32 +948,40 @@
 || and && operators work.  Legacy Vim script: >
 	let result = 44
 	...
-	return result || 0	" returns 1
+	return result || 0	# returns 1
 
 Vim9 script works like JavaScript/TypeScript, keep the value: >
 	let result = 44
 	...
-	return result || 0	" returns 44
+	return result || 0	# returns 44
 
 On the other hand, overloading "+" to use both for addition and string
 concatenation goes against legacy Vim script and often leads to mistakes.
 For that reason we will keep using ".." for string concatenation.  Lua also
 uses ".." this way.
 
+There is no intention to completely match TypeScript syntax and semantics.  We
+just want to take those parts that we can use for Vim and we expect Vim users
+are happy with.  TypeScript is a complex language with its own advantages and
+disadvantages.  People used to other languages (Java, Python, etc.) will also
+find things in TypeScript that they do not like or do not understand.  We'll
+try to avoid those things.
+
 
 Import and Export ~
 
 A problem of legacy Vim script is that by default all functions and variables
 are global.  It is possible to make them script-local, but then they are not
-available in other scripts.
+available in other scripts.  This defies the concept of a package that only
+exports selected items and keeps the rest local.
 
 In Vim9 script a mechanism very similar to the JavaScript import and export
 mechanism is supported.  It is a variant to the existing `:source` command
 that works like one would expect:
 - Instead of making everything global by default, everything is script-local,
   unless exported.
-- When importing a script the symbols that are imported are listed, avoiding
-  name conflicts and failures if later functionality is added.
+- When importing a script the symbols that are imported are explicitly listed,
+  avoiding name conflicts and failures if functionality is added later.
 - The mechanism allows for writing a big, long script with a very clear API:
   the exported function(s) and class(es).
 - By using relative paths loading can be much faster for an import inside of a
@@ -982,27 +993,28 @@
 When sourcing a Vim9 script from a legacy script, only the items defined
 globally can be used, not the exported items.  Alternatives considered:
 - All the exported items become available as script-local items.  This makes
-  it uncontrollable what items get defined.
+  it uncontrollable what items get defined and likely soon leads to trouble.
 - Use the exported items and make them global.  Disadvantage is that it's then
   not possible to avoid name clashes in the global namespace.
 - Completely disallow sourcing a Vim9 script, require using `:import`.  That
   makes it difficult to use scripts for testing, or sourcing them from the
   command line to try them out.
+Note that you can also use `:import` in legacy Vim script, see above.
 
 
 Classes ~
 
 Vim supports interfaces to Perl, Python, Lua, Tcl and a few others.  But
-these have never become widespread.  When Vim 9 was designed a decision was
-made to phase out these interfaces and concentrate on Vim script, while
-encouraging plugin authors to write code in any language and run it as an
-external tool, using jobs and channels.
+these interfaces have never become widespread.  When Vim 9 was designed a
+decision was made to phase out these interfaces and concentrate on Vim script,
+while encouraging plugin authors to write code in any language and run it as
+an external tool, using jobs and channels.
 
 Still, using an external tool has disadvantages.  An alternative is to convert
 the tool into Vim script.  For that to be possible without too much
 translation, and keeping the code fast at the same time, the constructs of the
 tool need to be supported.  Since most languages support classes the lack of
-class support in Vim is then a problem.
+support for classes in Vim is then a problem.
 
 Previously Vim supported a kind-of object oriented programming by adding
 methods to a dictionary.  With some care this could be made to work, but it
@@ -1010,7 +1022,7 @@
 the use of dictionaries.
 
 The support of classes in Vim9 script is a "minimal common functionality" of
-class support in most languages.  It works mostly like Java, which is the most
+class support in most languages.  It works much like Java, which is the most
 popular programming language.
 
 
diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt
index 8d19e06..5f842c8 100644
--- a/runtime/doc/windows.txt
+++ b/runtime/doc/windows.txt
@@ -1,4 +1,4 @@
-*windows.txt*   For Vim version 8.2.  Last change: 2020 Aug 15
+*windows.txt*   For Vim version 8.2.  Last change: 2020 Sep 02
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -955,12 +955,12 @@
 		cursor.  This is less clever than using |:ptag|, but you don't
 		need a tags file and it will also find matches in system
 		include files.  Example: >
-  :au! CursorHold *.[ch] nested exe "silent! psearch " . expand("<cword>")
+  :au! CursorHold *.[ch] ++nested exe "silent! psearch " . expand("<cword>")
 <		Warning: This can be slow.
 
 Example						*CursorHold-example*  >
 
-  :au! CursorHold *.[ch] nested exe "silent! ptag " . expand("<cword>")
+  :au! CursorHold *.[ch] ++nested exe "silent! ptag " . expand("<cword>")
 
 This will cause a ":ptag" to be executed for the keyword under the cursor,
 when the cursor hasn't moved for the time set with 'updatetime'.  The "nested"
@@ -973,7 +973,7 @@
 A nice addition is to highlight the found tag, avoid the ":ptag" when there
 is no word under the cursor, and a few other things: >
 
-  :au! CursorHold *.[ch] nested call PreviewWord()
+  :au! CursorHold *.[ch] ++nested call PreviewWord()
   :func PreviewWord()
   :  if &previewwindow			" don't do this in the preview window
   :    return