Update runtime files
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index 4536d5b..5f1231c 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -54,7 +54,7 @@
 :au[tocmd] [group] {event} {pat} [++once] [++nested] {cmd}
 			Add {cmd} to the list of commands that Vim will
 			execute automatically on {event} for a file matching
-			{pat} |autocmd-patterns|. 
+			{pat} |autocmd-patterns|.
 			Here {event} cannot be "*".  *E1155*
 			Note: A quote character is seen as argument to the
 			:autocmd and won't start a comment.
diff --git a/runtime/doc/change.txt b/runtime/doc/change.txt
index 6c6a0c9..62a69b7 100644
--- a/runtime/doc/change.txt
+++ b/runtime/doc/change.txt
@@ -1,4 +1,4 @@
-*change.txt*    For Vim version 8.2.  Last change: 2021 Mar 01
+*change.txt*    For Vim version 8.2.  Last change: 2021 Jun 10
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 97585ad..fdc63ea 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 May 07
+*eval.txt*	For Vim version 8.2.  Last change: 2021 Jun 07
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -2102,7 +2102,7 @@
 v:numbermax	Maximum value of a number.
 
 					*v:numbermin* *numbermin-variable*
-v:numbermin	Minimum value of a number (negative)
+v:numbermin	Minimum value of a number (negative).
 
 					*v:numbersize* *numbersize-variable*
 v:numbersize	Number of bits in a Number.  This is normally 64, but on some
@@ -2508,7 +2508,7 @@
 charclass({string})		Number	character class of {string}
 charcol({expr})			Number	column number of cursor or mark
 charidx({string}, {idx} [, {countcc}])
-				Number  char index of byte {idx} in {string}
+				Number	char index of byte {idx} in {string}
 chdir({dir})			String	change current working directory
 cindent({lnum})			Number	C indent for line {lnum}
 clearmatches([{win}])		none	clear all matches
@@ -2529,7 +2529,7 @@
 cursor({lnum}, {col} [, {off}])
 				Number	move cursor to {lnum}, {col}, {off}
 cursor({list})			Number	move cursor to position in {list}
-debugbreak({pid})		Number  interrupt process being debugged
+debugbreak({pid})		Number	interrupt process being debugged
 deepcopy({expr} [, {noref}])	any	make a full copy of {expr}
 delete({fname} [, {flags}])	Number	delete the file or directory {fname}
 deletebufline({expr}, {first} [, {last}])
@@ -4951,7 +4951,7 @@
 		Can also be used as a |method|: >
 			GetFuncname()->funcref([arg])
 <
-					*function()* *E700* *E922* *E923*
+				*function()* *partial* *E700* *E922* *E923*
 function({name} [, {arglist}] [, {dict}])
 		Return a |Funcref| variable that refers to function {name}.
 		{name} can be the name of a user defined function or an
@@ -5500,8 +5500,8 @@
 
 		Can also be used as a |method|: >
 			GetWinid()->getcurpos()
-
-<							*getcursorcharpos()*
+<
+							*getcursorcharpos()*
 getcursorcharpos([{winid}])
 		Same as |getcurpos()| but the column number in the returned
 		List is a character index instead of a byte index.
@@ -5510,8 +5510,8 @@
 		With the cursor on '보' in line 3 with text "여보세요": >
 			getcursorcharpos()	returns [0, 3, 2, 0, 3]
 			getcurpos()		returns [0, 3, 4, 0, 3]
-
-<		Can also be used as a |method|: >
+<
+		Can also be used as a |method|: >
 			GetWinid()->getcursorcharpos()
 
 <							*getcwd()*
@@ -5736,11 +5736,11 @@
 		see |bufname()|.
 
 		Each item in the returned List is a |Dict| with the following:
-		    name - name of the mark prefixed by "'"
-		    pos - a |List| with the position of the mark:
+		    mark   name of the mark prefixed by "'"
+		    pos	   a |List| with the position of the mark:
 				[bufnum, lnum, col, off]
-			  Refer to |getpos()| for more information.
-		    file - file name
+			   Refer to |getpos()| for more information.
+		    file   file name
 
 		Refer to |getpos()| for getting information about a specific
 		mark.
@@ -5822,7 +5822,7 @@
 		'> is a large number.
 		The column number in the returned List is the byte position
 		within the line. To get the character position in the line,
-		use |getcharpos()|
+		use |getcharpos()|.
 		The column number can be very large, e.g. 2147483647, in which
 		case it means "after the end of the line".
 		This can be used to save and restore the position of a mark: >
@@ -7637,7 +7637,7 @@
 		Same as |matchfuzzy()|, but returns the list of matched
 		strings, the list of character positions where characters
 		in {str} matches and a list of matching scores.  You can
-		use |byteidx()|to convert a character position to a byte
+		use |byteidx()| to convert a character position to a byte
 		position.
 
 		If {str} matches multiple times in a string, then only the
@@ -9961,7 +9961,7 @@
 		{only available when compiled with the |+float| feature}
 
 
-slice({expr}, {start} [, {end}])			*slice()* 
+slice({expr}, {start} [, {end}])			*slice()*
 		Similar to using a |slice| "expr[start : end]", but "end" is
 		used exclusive.  And for a string the indexes are used as
 		character indexes instead of byte indexes, like in
diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt
index 318507c..8295d67 100644
--- a/runtime/doc/filetype.txt
+++ b/runtime/doc/filetype.txt
@@ -632,7 +632,7 @@
 MARKDOWN                                                *ft-markdown-plugin*
 
 To enable folding use this: >
-        let g:markdown_folding = 1
+	let g:markdown_folding = 1
 <
 
 PDF							*ft-pdf-plugin*
diff --git a/runtime/doc/ft_raku.txt b/runtime/doc/ft_raku.txt
index 26ada8a..8439de5 100644
--- a/runtime/doc/ft_raku.txt
+++ b/runtime/doc/ft_raku.txt
@@ -45,7 +45,7 @@
 	1s ₁    1S ¹  ~
 	2s ₂    9S ⁹  ~
 
-But some don´t come defined by default. Those are digraph definitions you can
+But some don't come defined by default. Those are digraph definitions you can
 add in your ~/.vimrc file. >
 	exec 'digraph \\ '.char2nr('∖')
 	exec 'digraph \< '.char2nr('≼')
diff --git a/runtime/doc/help.txt b/runtime/doc/help.txt
index 1b3839e..f5c3e6d 100644
--- a/runtime/doc/help.txt
+++ b/runtime/doc/help.txt
@@ -132,7 +132,7 @@
 |windows.txt|	commands for using multiple windows and buffers
 |tabpage.txt|	commands for using multiple tab pages
 |spell.txt|	spell checking
-|diff.txt|	working with two to four versions of the same file
+|diff.txt|	working with two to eight versions of the same file
 |autocmd.txt|	automatically executing commands on an event
 |eval.txt|	expression evaluation, conditional commands
 |channel.txt|	Jobs, Channels, inter-process communication
@@ -145,6 +145,7 @@
 |term.txt|	using different terminals and mice
 |terminal.txt|	Terminal window support
 |popup.txt|	popup window support
+|vim9.txt|	using Vim9 script
 
 Programming language support ~
 |indent.txt|	automatic indenting for C and other languages
@@ -153,6 +154,8 @@
 |filetype.txt|	settings done specifically for a type of file
 |quickfix.txt|	commands for a quick edit-compile-fix cycle
 |ft_ada.txt|	Ada (the programming language) support
+|ft_ps1.txt|	Filetype plugin for Windows PowerShell
+|ft_raku.txt|	Filetype plugin for Raku
 |ft_rust.txt|	Filetype plugin for Rust
 |ft_sql.txt|	about the SQL filetype plugin
 
diff --git a/runtime/doc/motion.txt b/runtime/doc/motion.txt
index 4dc0e2e..a8ae19c 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 Mar 28
+*motion.txt*    For Vim version 8.2.  Last change: 2021 Jun 13
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -59,9 +59,14 @@
 	|<|	<	shift left
 	|zf|	zf	define a fold
 	|g@|	g@	call function set with the 'operatorfunc' option
-
+						*motion-count-multiplied*
 If the motion includes a count and the operator also had a count before it,
 the two counts are multiplied.  For example: "2d3w" deletes six words.
+						*operator-doubled*
+When doubling the operator it operates on a line.  When using a count, before
+or after the first character, that many lines are operated upon.  Thus `3dd`
+deletes three lines. A count before and after the first character is
+multiplied, thus `2y3y` yanks six lines.
 
 After applying the operator the cursor is mostly left at the start of the text
 that was operated upon.  For example, "yfe" doesn't move the cursor, but "yFe"
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index d3adbd0..e600dd9 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 May 16
+*options.txt*	For Vim version 8.2.  Last change: 2021 May 31
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
diff --git a/runtime/doc/os_vms.txt b/runtime/doc/os_vms.txt
index 6eb2993..0ebc774 100644
--- a/runtime/doc/os_vms.txt
+++ b/runtime/doc/os_vms.txt
@@ -767,12 +767,12 @@
 
 Version 8.2
 - make all changes needed for clean compile build of v8.2 on VMS on all platforms
-- fix the call mkdir bug (vicente_polo@yahoo.es) 
+- fix the call mkdir bug (vicente_polo@yahoo.es)
 - test on VSI OpenVMS Alpha and Itanium platforms
 - added LUA support
 - added XPM support - Motif GUI with toolbar on all platforms
-- XPM v3.4.11 libraries for IA64, AXP and VAX are added 
-- start integrating the new test scripts 
+- XPM v3.4.11 libraries for IA64, AXP and VAX are added
+- start integrating the new test scripts
 
 Version 8.1
 - make necessary changes to build v8.1 on VMS
diff --git a/runtime/doc/pattern.txt b/runtime/doc/pattern.txt
index 20fed55..c23fdb4 100644
--- a/runtime/doc/pattern.txt
+++ b/runtime/doc/pattern.txt
@@ -1217,7 +1217,7 @@
 
 \%d123	Matches the character specified with a decimal number.  Must be
 	followed by a non-digit.
-\%o40	Matches the character specified with an octal number up to 0377.
+\%o40	Matches the character specified with an octal number up to 0o377.
 	Numbers below 0o40 must be followed by a non-octal digit or a
 	non-digit.
 \%x2a	Matches the character specified with up to two hexadecimal characters.
diff --git a/runtime/doc/pi_netrw.txt b/runtime/doc/pi_netrw.txt
index b293d9b..421b12f 100644
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/doc/pi_netrw.txt
@@ -3809,7 +3809,7 @@
 	  Decho.vim is provided as a "vimball"; see |vimball-intro|.  You
 	  should edit the Decho.vba.gz file and source it in: >
 
-	  	vim Decho.vba.gz
+		vim Decho.vba.gz
 		:so %
 		:q
 <
diff --git a/runtime/doc/repeat.txt b/runtime/doc/repeat.txt
index 18149fc..c6b4b9e 100644
--- a/runtime/doc/repeat.txt
+++ b/runtime/doc/repeat.txt
@@ -1,4 +1,4 @@
-*repeat.txt*    For Vim version 8.2.  Last change: 2021 May 08
+*repeat.txt*    For Vim version 8.2.  Last change: 2021 Jun 11
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -279,7 +279,9 @@
 			ftdetect scripts are loaded, only the matching
 			directories are added to 'runtimepath'.  This is
 			useful in your .vimrc.  The plugins will then be
-			loaded during initialization, see |load-plugins|.
+			loaded during initialization, see |load-plugins| (note
+			that the loading order will be reversed, because each
+			directory is inserted before others).
 			Note that for ftdetect scripts to be loaded
 			you will need to write `filetype plugin indent on`
 			AFTER all `packadd!` commands.
@@ -372,7 +374,7 @@
 			for some commands.
 			See |:vim9cmd| for executing one command with Vim9
 			syntax and semantics.
-			 
+
 						*:scr* *:scriptnames*
 :scr[iptnames]		List all sourced script names, in the order they were
 			first sourced.  The number is used for the script ID
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index d457067..ab35aca 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -3430,8 +3430,8 @@
  Tex: Match Check Control~
 
 	Sometimes one actually wants mismatched parentheses, square braces,
-	and or curly braces; for example, \text{(1,10] is a range from but
-	not including 1 to and including 10}.  This wish, of course, conflicts
+	and or curly braces; for example, \text{(1,10]} is a range from but
+	not including 1 to and including 10.  This wish, of course, conflicts
 	with the desire to provide delimiter mismatch detection.  To
 	accommodate these conflicting goals, syntax/tex.vim provides >
 		g:tex_matchcheck = '[({[]'
@@ -4084,7 +4084,7 @@
 argument makes the "myVim" match use the same highlighting as "myString".  But
 it does not contain anything.  If the "contains=NONE" argument would be left
 out, then "myVim" would use the contains argument from myString and allow
-"myWord" to be contained, which will be highlighted as a Constant.  This
+"myWord" to be contained, which will be highlighted as a Comment.  This
 happens because a contained match doesn't match inside itself in the same
 position, thus the "myVim" match doesn't overrule the "myWord" match here.
 
@@ -4970,8 +4970,8 @@
 							*tmux*
 	When using tmux you may want to use this in the tmux config: >
 	    # tmux colors
-	    set -g default-terminal "xterm-256color"
-	    set -ag terminal-overrides ",xterm-256color:Tc"
+	    set -s default-terminal "tmux-256color"
+	    set -as terminal-overrides ",*-256color:Tc"
 <	More info at:
 	https://github.com/tmux/tmux/wiki/FAQ#how-do-i-use-a-256-colour-terminal
 	https://github.com/tmux/tmux/wiki/FAQ#how-do-i-use-rgb-colour
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 18f71f1..5b1457c 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -7000,6 +7000,7 @@
 getcharmod()	eval.txt	/*getcharmod()*
 getcharpos()	eval.txt	/*getcharpos()*
 getcharsearch()	eval.txt	/*getcharsearch()*
+getcharstr()	eval.txt	/*getcharstr()*
 getcmdline()	eval.txt	/*getcmdline()*
 getcmdpos()	eval.txt	/*getcmdpos()*
 getcmdtype()	eval.txt	/*getcmdtype()*
@@ -7901,6 +7902,7 @@
 more-compatible	version5.txt	/*more-compatible*
 more-prompt	message.txt	/*more-prompt*
 more-variables	eval.txt	/*more-variables*
+motion-count-multiplied	motion.txt	/*motion-count-multiplied*
 motion.txt	motion.txt	/*motion.txt*
 mouse-mode-table	term.txt	/*mouse-mode-table*
 mouse-overview	term.txt	/*mouse-overview*
@@ -8348,6 +8350,7 @@
 online-help	helphelp.txt	/*online-help*
 opening-window	windows.txt	/*opening-window*
 operator	motion.txt	/*operator*
+operator-doubled	motion.txt	/*operator-doubled*
 operator-pending-index	index.txt	/*operator-pending-index*
 operator-variable	eval.txt	/*operator-variable*
 option-backslash	options.txt	/*option-backslash*
@@ -8401,6 +8404,7 @@
 pager	message.txt	/*pager*
 papp.vim	syntax.txt	/*papp.vim*
 paragraph	motion.txt	/*paragraph*
+partial	eval.txt	/*partial*
 pascal.vim	syntax.txt	/*pascal.vim*
 patches-8	version8.txt	/*patches-8*
 patches-8.1	version8.txt	/*patches-8.1*
@@ -10066,6 +10070,7 @@
 v_v	visual.txt	/*v_v*
 v_x	change.txt	/*v_x*
 v_y	change.txt	/*v_y*
+v_zy	change.txt	/*v_zy*
 v_~	change.txt	/*v_~*
 vab	motion.txt	/*vab*
 val-variable	eval.txt	/*val-variable*
@@ -10435,6 +10440,7 @@
 zOS-has-ebcdic	os_390.txt	/*zOS-has-ebcdic*
 zOS-limitations	os_390.txt	/*zOS-limitations*
 zOS-open-source	os_390.txt	/*zOS-open-source*
+zP	change.txt	/*zP*
 zR	fold.txt	/*zR*
 zW	spell.txt	/*zW*
 zX	fold.txt	/*zX*
@@ -10462,6 +10468,7 @@
 zm	fold.txt	/*zm*
 zn	fold.txt	/*zn*
 zo	fold.txt	/*zo*
+zp	change.txt	/*zp*
 zr	fold.txt	/*zr*
 zs	scroll.txt	/*zs*
 zsh.vim	syntax.txt	/*zsh.vim*
@@ -10473,6 +10480,7 @@
 zv	fold.txt	/*zv*
 zw	spell.txt	/*zw*
 zx	fold.txt	/*zx*
+zy	change.txt	/*zy*
 zz	scroll.txt	/*zz*
 {	motion.txt	/*{*
 {Visual}	intro.txt	/*{Visual}*
diff --git a/runtime/doc/term.txt b/runtime/doc/term.txt
index 8eea4a5..811d507 100644
--- a/runtime/doc/term.txt
+++ b/runtime/doc/term.txt
@@ -373,10 +373,10 @@
 	t_Ri	restore icon text from stack			*t_Ri* *'t_Ri'*
 	t_TE	end of "raw" mode				*t_TE* *'t_TE'*
 	t_TI	put terminal into "raw" mode 			*t_TI* *'t_TI'*
-	t_fd	disable focus-event tracking 			*t_fd* *'t_fd'*
-		|xterm-focus-event|
 	t_fe	enable focus-event tracking 			*t_fe* *'t_fe'*
 		|xterm-focus-event|
+	t_fd	disable focus-event tracking 			*t_fd* *'t_fd'*
+		|xterm-focus-event|
 
 Some codes have a start, middle and end part.  The start and end are defined
 by the termcap option, the middle part is text.
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index b46c440..2c20cea 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 May 28
+*todo.txt*      For Vim version 8.2.  Last change: 2021 Jun 13
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -38,57 +38,30 @@
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-Geen memory leak?
-
-Crash using outer var from nested lambda:
-	vim9script
-	def F(text: string): func(string): func(string): string
-	  return (arg: string): func(string): string => ((sep: string): string => {
-	      return text .. ' ' .. arg
-	    })
-	enddef
-
-	echo F('hello')(' ')('there')
-
-
-
 Vim9 - Make everything work:
-- function returning nothing should return void instead of zero
-- compile "expr" and "call" expression of a channel in channel_exe_cmd()?
-- Need some solution for dict function.  Can we implement part of classes?
-- A lambda without {} does not require a return type, using { return x } does.
-  That's unexpected, since the arguments are not required to have a type.
-  alt 1: not require a return type, figure it out from the common type of all
-	  the return statements found
-  alt 2: also require argument types
-- Using "windo echo expr" does not accept a line break inside "expr" (in a
-  :def function and at script level in a not executed block). #7681
-- use CheckLegacyAndVim9Success(lines) in many more places
+- Make debugging work - at least per function.  
+  - How to evaluate the stack and variables on the stack?
+  - FIXME in test_debugger.vim
 - For builtin functions using tv_get_string*() use check_for_string() to be
   more strict about the argument type (not a bool).
     done: balloon_()
 - Check many more builtin function arguments at compile time.
     map() could check that the return type of the function argument matches
     the type of the list or dict member. (#8092)
-- Allow for using an autoload function name without quotes.  It is then loaded
-  (and compiled) right away.  #8124
-- Test more expressions in legacy and Vim9 script, using
-  CheckLegacyAndVim9Success()
+    Same for other functions, such as searchpair().
+- use CheckLegacyAndVim9Success(lines) in many more places
 - Test try/catch and throw better, also nested.
   Test that return inside try/finally jumps to finally and then returns.
 - Test that a function defined inside a :def function is local to that
   function, g: functions can be defined and script-local functions cannot be
   defined.
-- Make debugging work - at least per function.  Need to recompile a function
-  to step through it line-by-line?  Evaluate the stack and variables on the
-  stack?
-- Reserve command for future use: :type, :class, :enum
+- compile get_lambda_tv() in popup_add_timeout()
 
 Once Vim9 is stable:
+- Add the "vim9script" feature, can use has('vim9script')
 - Change the help to prefer Vim9 syntax where appropriate
 - Add all the error numbers in a good place in documentation.
 - In the generic eval docs, point out the Vim9 syntax where it differs.
-- Add the "vim9script" feature, can use has('vim9script')
 - Use Vim9 for runtime files.
     PR #7497 for autoload/ccomplete.vim
 
@@ -100,13 +73,12 @@
   Give an error if compilation fails. (#7625)
   Use the location where the option was set for deciding whether it's to be
   evaluated in Vim9 script context.
-- implement :type, import type declaration.
-- implement enum,  import enum.
-- Future work: See |vim9-classes|
+- implement :type, "import type"
+- implement enum,  "import enum".
+- implement class and interface: See |vim9-classes|
 - For range: make table of first ASCII character with flag to quickly check if
   it can be a Vim9 command. E.g. "+" can, but "." can't.
-- compile get_lambda_tv() in popup_add_timeout()
-- inline call to map() and filter()
+- Inline call to map() and filter(), better type checking.
 - Make accessing varargs faster: arg[expr]
 	EVAL expr
 	LOADVARARG (varargs idx)
@@ -300,6 +272,9 @@
 Making breakat support multibyte characters (Yasuhiro Matsumoto, #6598)
 Scroll doesn't work correctly, why?
 
+glob() and globfile() do not always honor 'wildignorecase'. #8350
+globpath() does not use 'wildignorecase' at all?
+
 Add 'termguiattr' option, use "gui=" attributes in the terminal?  Would work
 with 'termguicolors'. #1740
 
@@ -344,6 +319,9 @@
     :echo matchstr('aaa bbb', '.\{-1,}\>\|.*')
     aaa bbb  (should be aaa)
 
+Should add a match/str/list/pos method that also returns the test and position
+of submatches.  #8355
+
 Check out PR #543 (Roland Puntaier).
 Patch for multibyte characters in langmap and applying a mapping on them.
 (Christian Brabandt, 2015 Jun 12, update July 25)
@@ -380,6 +358,10 @@
 Using "au!" after "filetype on" is a bit slow.  Can the matching of
 autocommands be made faster?  (#7056)
 
+Append in Visual block mode inserts the wrong character.
+Test_visual_block_mode() already has the proper check, which is commented out.
+(#8288)
+
 Add the <=> (spaceship) operator and "cond ?< expr ?= expr ?> expr"
     replace this:
 	let left = GetLeftFunc()
@@ -2263,9 +2245,6 @@
 
 Win32: Expanding 'path' runs into a maximum size limit. (bgold12, 2009 Nov 15)
 
-Win32: Patch for enabling quick edit mode in console. (Craig Barkhouse, 2010
-Sep 1)
-
 Win32: Patch for using .png files for icons. (Charles Peacech, 2012 Feb 5)
 
 Putting a Visual block while 'visualedit' is "all" does not leave the cursor
diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt
index 0d66d2b..09d5a39 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 Apr 19
+*usr_41.txt*	For Vim version 8.2.  Last change: 2021 Jun 07
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt
index 76a8f5d..eb45922 100644
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -724,7 +724,7 @@
 			feature}
 
 							*:sl!* *:sleep!*
-:[N]sl[eep]! [N] [m]	Same as above, but hide the cursor.
+:[N]sl[eep]! [N][m]	Same as above, but hide the cursor.
 
 							*:xrestore* *:xr*
 :xr[estore] [display]	Reinitializes the connection to the X11 server. Useful
diff --git a/runtime/doc/vim.1 b/runtime/doc/vim.1
index 5bf0d05..d55c8b3 100644
--- a/runtime/doc/vim.1
+++ b/runtime/doc/vim.1
@@ -186,7 +186,7 @@
 .TP
 \-d
 Start in diff mode.
-There should be two, three or four file name arguments.
+There should between two to eight file name arguments.
 .B Vim
 will open all the files and show differences between them.
 Works like vimdiff(1).
diff --git a/runtime/doc/vim.man b/runtime/doc/vim.man
index 91f29e1..dbfba53 100644
--- a/runtime/doc/vim.man
+++ b/runtime/doc/vim.man
@@ -135,9 +135,9 @@
                    Vim behave mostly like Vi, even though a  .vimrc  file  ex‐
                    ists.
 
-       -d          Start  in  diff  mode.   There should be two, three or four
-                   file name arguments.  Vim will open all the files and  show
-                   differences between them.  Works like vimdiff(1).
+       -d          Start in diff mode.  There should between two to eight file
+                   name arguments.  Vim will open all the files and show  dif‐
+                   ferences between them.  Works like vimdiff(1).
 
        -d {device} Open  {device}  for  use as a terminal.  Only on the Amiga.
                    Example: "-d con:20/30/600/150".
diff --git a/runtime/doc/vim9.txt b/runtime/doc/vim9.txt
index 406aedc..6ca1d74 100644
--- a/runtime/doc/vim9.txt
+++ b/runtime/doc/vim9.txt
@@ -457,7 +457,8 @@
 	var Lambda = (arg) => expression
 
 No line break is allowed in the arguments of a lambda up to and including the
-"=>".  This is OK: >
+"=>" (so that Vim can tell the difference between an expression in parenthesis
+and lambda arguments).  This is OK: >
 	filter(list, (k, v) =>
 			v > 0)
 This does not work: >
@@ -998,9 +999,14 @@
 			Note that for command line completion of {func} you
 			can prepend "s:" to find script-local functions.
 
-:disa[ssemble]! {func}	Like `:disassemble` but with the instructions used for
+:disa[ssemble] profile {func}
+			Like `:disassemble` but with the instructions used for
 			profiling.
 
+:disa[ssemble] debug {func}
+			Like `:disassemble` but with the instructions used for
+			debugging.
+
 Limitations ~
 
 Local variables will not be visible to string evaluation.  For example: >
diff --git a/runtime/doc/vimdiff.1 b/runtime/doc/vimdiff.1
index bed2b32..ddcb30f 100644
--- a/runtime/doc/vimdiff.1
+++ b/runtime/doc/vimdiff.1
@@ -1,17 +1,17 @@
 .TH VIMDIFF 1 "2001 March 30"
 .SH NAME
-vimdiff \- edit two, three or four versions of a file with Vim and show differences
+vimdiff \- edit between two and eight versions of a file with Vim and show differences
 .SH SYNOPSIS
 .br
 .B vimdiff
-[options] file1 file2 [file3 [file4]]
+[options] file1 file2 [file3 [file4 [file5 [file6 [file7 [file8]]]]]]
 .PP
 .B gvimdiff
 .SH DESCRIPTION
 .B Vimdiff
 starts
 .B Vim
-on two (or three or four) files.
+on two up to eight files.
 Each file gets its own window.
 The differences between the files are highlighted.
 This is a nice way to inspect changes and to move changes from one version
diff --git a/runtime/doc/vimdiff.man b/runtime/doc/vimdiff.man
index 913ac13..a053e6a 100644
--- a/runtime/doc/vimdiff.man
+++ b/runtime/doc/vimdiff.man
@@ -1,27 +1,28 @@
-VIMDIFF(1)                                                          VIMDIFF(1)
+VIMDIFF(1)                  General Commands Manual                 VIMDIFF(1)
 
 
 
 NAME
-       vimdiff  - edit two, three or four versions of a file with Vim and show
-       differences
+       vimdiff  -  edit  between two and eight versions of a file with Vim and
+       show differences
 
 SYNOPSIS
-       vimdiff [options] file1 file2 [file3 [file4]]
+       vimdiff [options]  file1  file2  [file3  [file4  [file5  [file6  [file7
+       [file8]]]]]]
 
        gvimdiff
 
 DESCRIPTION
-       Vimdiff starts Vim on two (or three or four) files.  Each file gets its
-       own  window.   The differences between the files are highlighted.  This
-       is a nice way to inspect changes and to move changes from  one  version
-       to another version of the same file.
+       Vimdiff  starts  Vim  on two up to eight files.  Each file gets its own
+       window.  The differences between the files are highlighted.  This is  a
+       nice way to inspect changes and to move changes from one version to an‐
+       other version of the same file.
 
        See vim(1) for details about Vim itself.
 
        When started as gvimdiff the GUI will be started, if available.
 
-       In  each window the 'diff' option will be set, which causes the differ-
+       In each window the 'diff' option will be set, which causes the  differ‐
        ences to be highlighted.
        The 'wrap' and 'scrollbind' options are set to make the text look good.
        The  'foldmethod'  option  is set to "diff", which puts ranges of lines
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index 0f06391..04e2001 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 Apr 17
+" Last Change:	2021 Jun 13
 
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
diff --git a/runtime/gvim.desktop b/runtime/gvim.desktop
index 3132bc8..8da62ca 100644
--- a/runtime/gvim.desktop
+++ b/runtime/gvim.desktop
@@ -112,6 +112,7 @@
 Icon[eo]=gvim
 Icon[fr]=gvim
 Icon[ru]=gvim
+Icon[sr]=gvim
 Icon=gvim
 Categories=Utility;TextEditor;
 StartupNotify=true
diff --git a/runtime/indent/html.vim b/runtime/indent/html.vim
index 7019bd4..d4b91f6 100644
--- a/runtime/indent/html.vim
+++ b/runtime/indent/html.vim
@@ -1,7 +1,7 @@
 " Vim indent script for HTML
 " Maintainer:	Bram Moolenaar
 " Original Author: Andy Wokula <anwoku@yahoo.de>
-" Last Change:	2021 Jan 26
+" Last Change:	2021 Jun 13
 " Version:	1.0 "{{{
 " Description:	HTML indent script with cached state for faster indenting on a
 "		range of lines.
@@ -62,7 +62,7 @@
 " Prefer using buffer-local settings over global settings, so that there can
 " be defaults for all HTML files and exceptions for specific types of HTML
 " files.
-func! HtmlIndent_CheckUserSettings()
+func HtmlIndent_CheckUserSettings()
   "{{{
   let inctags = ''
   if exists("b:html_indent_inctags")
@@ -178,7 +178,7 @@
 "}}}
 
 " Add a list of tag names for a pair of <tag> </tag> to "tags".
-func! s:AddITags(tags, taglist)
+func s:AddITags(tags, taglist)
   "{{{
   for itag in a:taglist
     let a:tags[itag] = 1
@@ -187,7 +187,7 @@
 endfunc "}}}
 
 " Take a list of tag name pairs that are not to be used as tag pairs.
-func! s:RemoveITags(tags, taglist)
+func s:RemoveITags(tags, taglist)
   "{{{
   for itag in a:taglist
     let a:tags[itag] = 1
@@ -196,7 +196,7 @@
 endfunc "}}}
 
 " Add a block tag, that is a tag with a different kind of indenting.
-func! s:AddBlockTag(tag, id, ...)
+func s:AddBlockTag(tag, id, ...)
   "{{{
   if !(a:id >= 2 && a:id < len(s:endtags))
     echoerr 'AddBlockTag ' . a:id
@@ -255,7 +255,7 @@
 " Return non-zero when "tagname" is an opening tag, not being a block tag, for
 " which there should be a closing tag.  Can be used by scripts that include
 " HTML indenting.
-func! HtmlIndent_IsOpenTag(tagname)
+func HtmlIndent_IsOpenTag(tagname)
   "{{{
   if get(s:indent_tags, a:tagname) == 1
     return 1
@@ -264,7 +264,7 @@
 endfunc "}}}
 
 " Get the value for "tagname", taking care of buffer-local tags.
-func! s:get_tag(tagname)
+func s:get_tag(tagname)
   "{{{
   let i = get(s:indent_tags, a:tagname)
   if (i == 1 || i == -1) && get(b:hi_removed_tags, a:tagname) != 0
@@ -277,7 +277,7 @@
 endfunc "}}}
 
 " Count the number of start and end tags in "text".
-func! s:CountITags(text)
+func s:CountITags(text)
   "{{{
   " Store the result in s:curind and s:nextrel.
   let s:curind = 0  " relative indent steps for current line [unit &sw]:
@@ -289,7 +289,7 @@
 endfunc "}}}
 
 " Count the number of start and end tags in text.
-func! s:CountTagsAndState(text)
+func s:CountTagsAndState(text)
   "{{{
   " Store the result in s:curind and s:nextrel.  Update b:hi_newstate.block.
   let s:curind = 0  " relative indent steps for current line [unit &sw]:
@@ -304,7 +304,7 @@
 endfunc "}}}
 
 " Used by s:CountITags() and s:CountTagsAndState().
-func! s:CheckTag(itag)
+func s:CheckTag(itag)
   "{{{
   " Returns an empty string or "SCRIPT".
   " a:itag can be "tag" or "/tag" or "<!--" or "-->"
@@ -338,7 +338,7 @@
 endfunc "}}}
 
 " Used by s:CheckTag(). Returns an empty string or "SCRIPT".
-func! s:CheckBlockTag(blocktag, ind)
+func s:CheckBlockTag(blocktag, ind)
   "{{{
   if a:ind > 0
     " a block starts here
@@ -366,7 +366,7 @@
 endfunc "}}}
 
 " Used by s:CheckTag().
-func! s:CheckCustomTag(ctag)
+func s:CheckCustomTag(ctag)
   "{{{
   " Returns 1 if ctag is the tag for a custom element, 0 otherwise.
   " a:ctag can be "tag" or "/tag" or "<!--" or "-->"
@@ -396,7 +396,7 @@
 endfunc "}}}
 
 " Return the <script> type: either "javascript" or ""
-func! s:GetScriptType(str)
+func s:GetScriptType(str)
   "{{{
   if a:str == "" || a:str =~ "java"
     return "javascript"
@@ -407,7 +407,7 @@
 
 " Look back in the file, starting at a:lnum - 1, to compute a state for the
 " start of line a:lnum.  Return the new state.
-func! s:FreshState(lnum)
+func s:FreshState(lnum)
   "{{{
   " A state is to know ALL relevant details about the
   " lines 1..a:lnum-1, initial calculating (here!) can be slow, but updating is
@@ -568,24 +568,29 @@
 endfunc "}}}
 
 " Indent inside a <pre> block: Keep indent as-is.
-func! s:Alien2()
+func s:Alien2()
   "{{{
   return -1
 endfunc "}}}
 
 " Return the indent inside a <script> block for javascript.
-func! s:Alien3()
+func s:Alien3()
   "{{{
   let lnum = prevnonblank(v:lnum - 1)
   while lnum > 1 && getline(lnum) =~ '^\s*/[/*]'
     " Skip over comments to avoid that cindent() aligns with the <script> tag
     let lnum = prevnonblank(lnum - 1)
   endwhile
+  if lnum < b:hi_indent.blocklnr
+    " indent for <script> itself
+    return b:hi_indent.blocktagind
+  endif
   if lnum == b:hi_indent.blocklnr
     " indent for the first line after <script>
     return eval(b:hi_js1indent)
   endif
   if b:hi_indent.scripttype == "javascript"
+    " indent for further lines
     return eval(b:hi_js1indent) + GetJavascriptIndent()
   else
     return -1
@@ -593,7 +598,7 @@
 endfunc "}}}
 
 " Return the indent inside a <style> block.
-func! s:Alien4()
+func s:Alien4()
   "{{{
   if prevnonblank(v:lnum-1) == b:hi_indent.blocklnr
     " indent for first content line
@@ -603,7 +608,7 @@
 endfunc "}}}
 
 " Indending inside a <style> block.  Returns the indent.
-func! s:CSSIndent()
+func s:CSSIndent()
   "{{{
   " This handles standard CSS and also Closure stylesheets where special lines
   " start with @.
@@ -720,13 +725,13 @@
 " 	tag: blah
 " 	tag: blah &&
 " 	tag: blah ||
-func! s:CssUnfinished(text)
+func s:CssUnfinished(text)
   "{{{
   return a:text =~ '\(||\|&&\|:\|\k\)\s*$'
 endfunc "}}}
 
 " Search back for the first unfinished line above "lnum".
-func! s:CssFirstUnfinished(lnum, min_lnum)
+func s:CssFirstUnfinished(lnum, min_lnum)
   "{{{
   let align_lnum = a:lnum
   while align_lnum > a:min_lnum && s:CssUnfinished(getline(align_lnum - 1))
@@ -736,7 +741,7 @@
 endfunc "}}}
 
 " Find the non-empty line at or before "lnum" that is not a comment.
-func! s:CssPrevNonComment(lnum, stopline)
+func s:CssPrevNonComment(lnum, stopline)
   "{{{
   " caller starts from a line a:lnum + 1 that is not a comment
   let lnum = prevnonblank(a:lnum)
@@ -761,7 +766,7 @@
 endfunc "}}}
 
 " Check the number of {} and () in line "lnum". Return a dict with the counts.
-func! HtmlIndent_CountBraces(lnum)
+func HtmlIndent_CountBraces(lnum)
   "{{{
   let brs = substitute(getline(a:lnum), '[''"].\{-}[''"]\|/\*.\{-}\*/\|/\*.*$\|[^{}()]', '', 'g')
   let c_open = 0
@@ -794,7 +799,7 @@
 endfunc "}}}
 
 " Return the indent for a comment: <!-- -->
-func! s:Alien5()
+func s:Alien5()
   "{{{
   let curtext = getline(v:lnum)
   if curtext =~ '^\s*\zs-->'
@@ -826,7 +831,7 @@
 endfunc "}}}
 
 " Return the indent for conditional comment: <!--[ ![endif]-->
-func! s:Alien6()
+func s:Alien6()
   "{{{
   let curtext = getline(v:lnum)
   if curtext =~ '\s*\zs<!\[endif\]-->'
@@ -840,7 +845,7 @@
 endfunc "}}}
 
 " When the "lnum" line ends in ">" find the line containing the matching "<".
-func! HtmlIndent_FindTagStart(lnum)
+func HtmlIndent_FindTagStart(lnum)
   "{{{
   " Avoids using the indent of a continuation line.
   " Moves the cursor.
@@ -863,7 +868,7 @@
 endfunc "}}}
 
 " Find the unclosed start tag from the current cursor position.
-func! HtmlIndent_FindStartTag()
+func HtmlIndent_FindStartTag()
   "{{{
   " The cursor must be on or before a closing tag.
   " If found, positions the cursor at the match and returns the line number.
@@ -877,7 +882,7 @@
 endfunc "}}}
 
 " Moves the cursor from a "<" to the matching ">".
-func! HtmlIndent_FindTagEnd()
+func HtmlIndent_FindTagEnd()
   "{{{
   " Call this with the cursor on the "<" of a start tag.
   " This will move the cursor to the ">" of the matching end tag or, when it's
@@ -897,7 +902,7 @@
 endfunc "}}}
 
 " Indenting inside a start tag. Return the correct indent or -1 if unknown.
-func! s:InsideTag(foundHtmlString)
+func s:InsideTag(foundHtmlString)
   "{{{
   if a:foundHtmlString
     " Inside an attribute string.
@@ -958,7 +963,7 @@
 endfunc "}}}
 
 " THE MAIN INDENT FUNCTION. Return the amount of indent for v:lnum.
-func! HtmlIndent()
+func HtmlIndent()
   "{{{
   if prevnonblank(v:lnum - 1) < 1
     " First non-blank line has no indent.
diff --git a/runtime/syntax/gvpr.vim b/runtime/syntax/gvpr.vim
new file mode 100644
index 0000000..a737891
--- /dev/null
+++ b/runtime/syntax/gvpr.vim
@@ -0,0 +1,85 @@
+" Vim syntax file
+" Language: Graphviz program
+" Maintainer: Matthew Fernandez <matthew.fernandez@gmail.com>
+" Last Change: Tue, 28 Jul 2020 17:20:44 -0700
+
+if exists("b:current_syntax")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+syn keyword gvArg  ARGC ARGV
+syn keyword gvBeg  BEGIN BEG_G N E END END_G
+syn keyword gvFunc
+  \ graph fstsubg isDirect isStrict isSubg nEdges nNodes nxtsubg subg
+  \ degreeOf fstnode indegreeOf isNode isSubnode node nxtnode nxtnode_sg
+    \ outDegreeOf subnode
+  \ edge edge_sg fstedge fstedge_sg fstin fstin_sg fstout fstout_sg isEdge
+    \ isEdge_sg isSubedge nxtedge nxtedge_sg nxtin nxtin_sg nxtout nxtout_sg opp
+    \ subedge
+  \ freadG fwriteG readG write[] writeG
+  \ aget aset clone cloneG compOf copy[] copyA delete[] fstAttr getDflt hasAttr
+    \ induce isAttr isIn kindOf lock[] nxtAttr setDflt
+  \ canon gsub html index ishtml length llOf match[] rindex split[] sprintf
+    \ sscanf strcmp sub substr tokens tolower toupper urOf xOf yOf
+  \ closeF openF print[] printf scanf readL
+  \ atan2 cos exp log MAX MIN pow sin[] sqrt
+  \ in[] unset
+  \ colorx exit[] rand srand system
+syn keyword gvCons
+  \ NULL TV_bfs TV_dfs TV_en TV_flat TV_fwd TV_ne TV_prepostdfs TV_prepostfwd
+  \ TV_prepostrev TV_postdfs TV_postfwd tv_postrev TV_rev
+syn keyword gvType char double float int long unsigned void
+                 \ string
+                 \ edge_t graph_t node_t obj_t
+syn match   gvVar 
+  \ "\$\(\(F\|G\|NG\|O\|T\|tgtname\|tvedge\|tvnext\|tvroot\|tvtype\)\>\)\?\(\<\)\@!"
+syn keyword gvWord break continue else for forr if return switch while
+
+" numbers adapted from c.vim's cNumbers and friends
+syn match gvNums      transparent "\<\d\|\.\d" contains=gvNumber,gvFloat,gvOctal
+syn match gvNumber    contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
+syn match gvNumber    contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
+syn match gvOctal     contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=gvOctalZero
+syn match gvOctalZero contained "\<0"
+syn match gvFloat     contained "\d\+f"
+syn match gvFloat     contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
+syn match gvFloat     contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+syn match gvFloat     contained "\d\+e[-+]\=\d\+[fl]\=\>"
+
+syn region gvString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=gvFormat,gvSpecial extend
+syn region gvString start="'" skip="\\\\\|\\'" end="'" contains=gvFormat,gvSpecial extend
+
+" adapted from c.vim's cFormat for c_no_c99
+syn match gvFormat "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bdiuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
+
+syn match gvSpecial "\\." contained
+
+syn region gvCComment   start="//"  skip="\\$" end="$" keepend
+syn region gvCPPComment start="#"   skip="\\$" end="$" keepend
+syn region gvCXXComment start="/\*" end="\*/" fold
+
+hi def link gvArg        Identifier
+hi def link gvBeg        Keyword
+hi def link gvFloat      Number
+hi def link gvFunc       Identifier
+hi def link gvCons       Number
+hi def link gvNumber     Number
+hi def link gvType       Type
+hi def link gvVar        Statement
+hi def link gvWord       Keyword
+
+hi def link gvString     String
+hi def link gvFormat     Special
+hi def link gvSpecial    Special
+
+hi def link gvCComment   Comment
+hi def link gvCPPComment Comment
+hi def link gvCXXComment Comment
+
+let b:current_syntax = "gvpr"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/vim.desktop b/runtime/vim.desktop
index 8bfbc6a..aeefcc8 100644
--- a/runtime/vim.desktop
+++ b/runtime/vim.desktop
@@ -112,6 +112,7 @@
 Icon[eo]=gvim
 Icon[fr]=gvim
 Icon[ru]=gvim
+Icon[sr]=gvim
 Icon=gvim
 Categories=Utility;TextEditor;
 StartupNotify=false