Update runtime files
diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt
index 96bcb93..f6e3810 100644
--- a/runtime/doc/editing.txt
+++ b/runtime/doc/editing.txt
@@ -1,4 +1,4 @@
-*editing.txt*   For Vim version 8.2.  Last change: 2019 Dec 22
+*editing.txt*   For Vim version 8.2.  Last change: 2020 May 12
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -475,6 +475,9 @@
 	:w ++enc=latin1 newfile
 This writes the current buffer to "newfile" in latin1 format.
 
+The message given when writing a file will show "[converted]" when
+'fileencoding' or the value specified with ++enc differs from 'encoding'.
+
 There may be several ++opt arguments, separated by white space.  They must all
 appear before any |+cmd| argument.
 
@@ -1079,9 +1082,9 @@
 
 							*:q* *:quit*
 :q[uit]			Quit the current window.  Quit Vim if this is the last
-			window.  This fails when changes have been made and
-			Vim refuses to |abandon| the current buffer, and when
-			the last file in the argument list has not been
+			|edit-window|.  This fails when changes have been made
+			and Vim refuses to |abandon| the current buffer, and
+			when the last file in the argument list has not been
 			edited.
 			If there are other tab pages and quitting the last
 			window in the current tab page the current tab page is
@@ -1107,18 +1110,22 @@
 			|quickfix|).
 
 							*:wq*
-:wq [++opt]		Write the current file and quit.  Writing fails when
-			the file is read-only or the buffer does not have a
-			name.  Quitting fails when the last file in the
-			argument list has not been edited.
+:wq [++opt]		Write the current file and close the window.  If this
+			was the last |edit-window| Vim quits.
+			Writing fails when the file is read-only or the buffer
+			does not have a name.  Quitting fails when the last
+			file in the argument list has not been edited.
 
-:wq! [++opt]		Write the current file and quit.  Writing fails when
-			the current buffer does not have a name.
+:wq! [++opt]		Write the current file and close the window.  If this
+			was the last |edit-window| Vim quits.  Writing fails
+			when the current buffer does not have a name.
 
-:wq [++opt] {file}	Write to {file} and quit.  Quitting fails when the
+:wq [++opt] {file}	Write to {file} and close the window.  If this was the
+			last |edit-window| Vim quits.  Quitting fails when the
 			last file in the argument list has not been edited.
 
-:wq! [++opt] {file}	Write to {file} and quit.
+:wq! [++opt] {file}	Write to {file} and close the current window.  Quit
+			Vim if this was the last |edit-window|.
 
 :[range]wq[!] [++opt] [file]
 			Same as above, but only write the lines in [range].
@@ -1135,10 +1142,10 @@
 			Same as :xit.
 
 							*ZZ*
-ZZ			Write current file, if modified, and quit (same as
-			":x").  (Note: If there are several windows for the
-			current file, the file is written if it was modified
-			and the window is closed).
+ZZ			Write current file, if modified, and close the current
+			window (same as ":x").
+			If there are several windows for the current file,
+			only the current window is closed.
 
 							*ZQ*
 ZQ			Quit without checking for changes (same as ":q!").
diff --git a/runtime/doc/index.txt b/runtime/doc/index.txt
index 315a5f3..78d557f 100644
--- a/runtime/doc/index.txt
+++ b/runtime/doc/index.txt
@@ -1,4 +1,4 @@
-*index.txt*     For Vim version 8.2.  Last change: 2020 Apr 26
+*index.txt*     For Vim version 8.2.  Last change: 2020 May 10
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -364,8 +364,8 @@
 				   register x]
 |Y|		["x]Y		   yank N lines [into register x]; synonym for
 				   "yy"
-|ZZ|		ZZ		   store current file if modified, and exit
-|ZQ|		ZQ		   exit current file always
+|ZZ|		ZZ		   write if buffer changed and close window
+|ZQ|		ZQ		   close window without writing
 |[|		[{char}		   square bracket command (see |[| below)
 		\		   not used
 |]|		]{char}		   square bracket command (see |]| below)
@@ -1721,7 +1721,7 @@
 |:wqall|	:wqa[ll]	write all changed buffers and quit Vim
 |:wundo|	:wu[ndo]	write undo information to a file
 |:wviminfo|	:wv[iminfo]	write to viminfo file
-|:xit|		:x[it]		write if buffer changed and quit window or Vim
+|:xit|		:x[it]		write if buffer changed and close window
 |:xall|		:xa[ll]		same as ":wqall"
 |:xmapclear|	:xmapc[lear]	remove all mappings for Visual mode
 |:xmap|		:xm[ap]		like ":map" but for Visual mode
diff --git a/runtime/doc/popup.txt b/runtime/doc/popup.txt
index 26435d1..9041f87 100644
--- a/runtime/doc/popup.txt
+++ b/runtime/doc/popup.txt
@@ -1,4 +1,4 @@
-*popup.txt*  For Vim version 8.2.  Last change: 2020 Apr 13
+*popup.txt*  For Vim version 8.2.  Last change: 2020 May 12
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -150,6 +150,7 @@
 - When the job ends, the popup window closes.
 - The popup window can be closed with `popup_close()`, the terminal buffer
   then becomes hidden.
+- It is not possible to enter Terminal-Normal mode.
 - The default Pmenu color is only used for the border and padding.  To change
   the color of the terminal itself set the Terminal highlight group before
   creating the terminal.  Setting 'wincolor' later can work but requires the
diff --git a/runtime/doc/recover.txt b/runtime/doc/recover.txt
index 0bab64a..34f7f18 100644
--- a/runtime/doc/recover.txt
+++ b/runtime/doc/recover.txt
@@ -1,4 +1,4 @@
-*recover.txt*   For Vim version 8.2.  Last change: 2020 Mar 24
+*recover.txt*   For Vim version 8.2.  Last change: 2020 May 09
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -125,12 +125,12 @@
 command:
 
 					*:pre* *:preserve* *E313* *E314*
-:pre[serve]		Write all text for all buffers into swap files.  The
-			original file is no longer needed for recovery.
-			This sets a flag in the current buffer.  When the '&'
-			flag is present in 'cpoptions' the swap file will not
-			be deleted for this buffer when Vim exits and the
-			buffer is still loaded |cpo-&|.
+:pre[serve]		Write all text for the current buffer into its swap
+			file.  The original file is no longer needed for
+			recovery.  This sets a flag in the current buffer.
+			When the '&' flag is present in 'cpoptions' the swap
+			file will not be deleted for this buffer when Vim
+			exits and the buffer is still loaded |cpo-&|.
 
 A Vim swap file can be recognized by the first six characters: "b0VIM ".
 After that comes the version number, e.g., "3.0".
diff --git a/runtime/doc/tags b/runtime/doc/tags
index e8d7d25..18e88f5 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -6127,6 +6127,7 @@
 edit-intro	editing.txt	/*edit-intro*
 edit-no-break	usr_25.txt	/*edit-no-break*
 edit-paragraph-join	usr_25.txt	/*edit-paragraph-join*
+edit-window	windows.txt	/*edit-window*
 editing.txt	editing.txt	/*editing.txt*
 efm-%>	quickfix.txt	/*efm-%>*
 efm-entries	quickfix.txt	/*efm-entries*
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 7bc3945..acc55fe 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 May 07
+*todo.txt*      For Vim version 8.2.  Last change: 2020 May 11
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -38,23 +38,22 @@
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
+Patch to test TERM signal. (Dominique, #6055)
+
+Include src/po/vim.pot
+
 Vim9 script:
-Big changes, may need design:
-- Make closures work:
+Make closures work:
   - call closure from not compiled context
   - Create closure in a loop.  Need to make a list of them.
-- Having constant expr evaluation separate does not scale.
-  First parse the expression, then simplify, then generate code.
-- At the vim9 script level: Allow using a function that is defined later.
-  Requires compiling functions only when the whole script has been sourced.
-  Like Javascript "hoisting", but only at the script level:
-  0. If script was sourced before, clear all script-local functions and
-     variables. (variables still to be implemented)
-  1. Discovery phase: Read the file to find all functions, variable
-     declarations and imports If a variable has a constant expression we get
-     the type, otherwise it will be "any".  Follow imports recursively.
-  2. Compilation phase: compile :def function bodies, using declared types
-  3. Execution phase: Execute imports when encountered. (skip over functions)
+Forward declarations:
+  - Cleanup when sourcing a script again: all script-local variables, imports
+    and functions are deleted.
+  - make sure only constants in declarations are executed, no function calls.
+  - Declare a variable at script level without an assignment.
+	let var: string
+    Error without a type or assignment
+	let var  # error!
 Making everything work:
 - Test that a script-local function in Vim9 script cannot be deleted.
 - Test that a function defined inside a :def function is local to that
@@ -62,7 +61,13 @@
   defined.
 - Check that when using a user function name without prefix, it does not find
   a global function.  Prefixing g: is required.
-- Compile let [var, var] = expr
+- Compile: let [var, var] = expr
+- Compile: for [key, value] in items(map)
+- Assignment to dict doesn't work:
+      let ret: dict<string> = #{}
+      ret[i] = string(i)
+- Appending to dict item doesn't work:
+    let d[i] ..= value
 - Compile replacement of :s command: s/pat/\=expr/
 - Compile redir to local variable: var_redir_start().
 - Compile builtin functions that access local variables:
@@ -79,6 +84,7 @@
 - expandcmd() with `=expr` in filename uses legacy expression.
 - eval_expr() in ex_cexpr()
 - eval_expr() call in dbg_parsearg() and debuggy_find()
+- Make "true" and "false" work in vim9script
 New syntax and functionality:
 Improve error checking:
 - "echo Func()" is an error if Func() does not return anything.
@@ -254,14 +260,14 @@
 
 Patch to add Turkish manual. (Emir Sarı, #5641)
 
+Patch to add lua sleep function. (Prabir Shrestha, #6057)
+Alternative: use vim.call and vim.fn: #6063
+
 Patch to add getmarklist() (Yegappan, #6032)
 
 Patch to support different color for undercurl in cterm.
 (Timur Celik, #6011)
 
-When SIGTSTP is ignored, don't let CTRL-Z suspend Vim? (Kurtis Rader, #5990)
-Fixed by patch #6026.  Makes tests fail...
-
 Patch to support cindent option to handle pragmas differently.
 (Max Rumpf, #5468)
 
@@ -294,6 +300,10 @@
 With bash ":make" does not set v:shell_error.  Possible solution: set
 'shellpipe' to "2>&1| tee %s; exit ${PIPESTATUS[0]}"  #5994
 
+When changing the crypt key the buffer should be considered modified.
+Like when changing 'fileformat'.  Save the old key in save_file_ff().
+(Ninu-Ciprian Marginean)
+
 Strange sequence of BufWipeout and BufNew events while doing omni-complete.
 (Paul Jolly, #5656)
 Get BufDelete without preceding BufNew. (Paul Jolly, #5694)
diff --git a/runtime/doc/vim9.txt b/runtime/doc/vim9.txt
index cb880c1..3eec280 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 May 06
+*vim9.txt*	For Vim version 8.2.  Last change: 2020 May 09
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -134,7 +134,7 @@
 
 In legacy script the functions are created when encountered, but parsed only
 when used.  This allows for defining functions in any order and having them
-call each other: >
+call each other, so long as the function is defined when it is called: >
 	func One()
 	   call Two()
 	endfunc
@@ -145,22 +145,25 @@
 	endfunc
 	call One()
 
-In Vim9 script the functions are compiled.  If using the same functions as the
-above example it is not possible to compile function One without knowing that
-function Two exists. Or this would require a runtime check, which is slow and
-does not allow for compile time type checking.
+In Vim9 script the functions are compiled.  When using the same functions as
+the above example it is not possible to compile function One without knowing
+that function Two exists. Or this would require a runtime check, which is slow
+and does not allow for compile time type checking.
 
 When sourcing a Vim9 script this happens in four phases:
 1. Cleanup: If the script was sourced before all script-local variables,
    imports and functions are deleted.
-2. Discovery: The script is read and encountered functions, imports and
-   variables are recognized.  The type is parsed.  Variable initializers that
-   are a constant are evaluated, this can give the type of the variable.
+2. Discovery: The script is read and declarations of functions, imports and
+   variables are recognized and the type is parsed.  Variable initializers
+   that are a constant are evaluated, this can also give the type of the
+   variable.
 3. Compilation: Functions are compiled.  The script-local functions, imports
-   and variables from the discovery phase are recognized and types are
-   checked.
-4. Execution: the commands in the script are executed. Functions are skipped
-   over.  Variable initializers are evaluated, unless they are a constant.
+   and variables from the discovery phase are found and types are checked.
+4. Execution: the commands in the script are executed, top to bottom.
+   Functions are skipped over, they do do not need to be processed again.
+   Variable initializers are evaluated when encountered.  Note that if a
+   function called earlier has set the value this will be over-written. It is
+   best to declare variables before where they are used to avoid confusion.
 
 The result is that items defined at the script level can be used anywhere in
 the script. This allows for putting the main function at the top: >
diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt
index 6129b8d..2b01fb3 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 Mar 19
+*windows.txt*   For Vim version 8.2.  Last change: 2020 May 10
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -291,9 +291,9 @@
 CTRL-W CTRL-Q						*CTRL-W_CTRL-Q*
 		Without {count}: Quit the current window.  If {count} is
 		given quit the {count} window.
-
-		When quitting the last window (not counting a help window),
-		exit Vim.
+							*edit-window*
+		When quitting the last edit window (not counting help or
+		preview windows), exit Vim.
 
 		When 'hidden' is set, and there is only one window for the
 		current buffer, it becomes hidden.  When 'hidden' is not set,
@@ -312,8 +312,9 @@
 		    :+quit  " quit the next window
 		    :+2quit " quit the second next window
 <
-		When closing a help window, Vim will try to restore the
-		previous window layout |:helpclose|.
+		When closing a help window, and this is not the only window,
+		Vim will try to restore the previous window layout, see
+		|:helpclose|.
 
 :q[uit]!
 :{count}q[uit]!
@@ -335,9 +336,9 @@
 		changed and the [!] is used, the buffer becomes hidden (unless
 		there is another window editing it).
 
-		When there is only one window in the current tab page and
-		there is another tab page, this closes the current tab page.
-		|tab-page|.
+		When there is only one |edit-window| in the current tab page
+		and there is another tab page, this closes the current tab
+		page.  |tab-page|.
 
 		This command fails when:			*E444*
 		- There is only one window on the screen.
diff --git a/runtime/ftplugin/masm.vim b/runtime/ftplugin/masm.vim
new file mode 100644
index 0000000..235469a
--- /dev/null
+++ b/runtime/ftplugin/masm.vim
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language:	Microsoft Macro Assembler (80x86)
+" Maintainer:	Wu Yongwei <wuyongwei@gmail.com>
+" Last Change:	2020-05-09 23:02:05 +0800
+
+if exists("b:did_ftplugin")
+  finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = "setl iskeyword<"
+
+setlocal iskeyword=@,48-57,_,36,60,62,63,@-@
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff --git a/runtime/indent/python.vim b/runtime/indent/python.vim
index e53987a..f9236e6 100644
--- a/runtime/indent/python.vim
+++ b/runtime/indent/python.vim
@@ -28,6 +28,11 @@
 
 let s:maxoff = 50	" maximum number of lines to look backwards for ()
 
+" See if the specified line is already user-dedented from the expected value.
+function s:Dedented(lnum, expected)
+  return indent(a:lnum) <= a:expected - shiftwidth()
+endfunction
+
 function GetPythonIndent(lnum)
 
   " If this line is explicitly joined: If the previous line was also joined,
@@ -158,12 +163,12 @@
   " If the previous line was a stop-execution statement...
   if getline(plnum) =~ '^\s*\(break\|continue\|raise\|return\|pass\)\>'
     " See if the user has already dedented
-    if indent(a:lnum) > indent(plnum) - shiftwidth()
-      " If not, recommend one dedent
-      return indent(plnum) - shiftwidth()
+    if s:Dedented(a:lnum, indent(plnum))
+      " If so, trust the user
+      return -1
     endif
-    " Otherwise, trust the user
-    return -1
+    " If not, recommend one dedent
+    return indent(plnum) - shiftwidth()
   endif
 
   " If the current line begins with a keyword that lines up with "try"
@@ -191,7 +196,7 @@
     endif
 
     " Or the user has already dedented
-    if indent(a:lnum) <= plindent - shiftwidth()
+    if s:Dedented(a:lnum, plindent)
       return -1
     endif
 
@@ -203,7 +208,12 @@
   "       + c)
   " here
   if parlnum > 0
-    return plindent
+    " ...unless the user has already dedented
+    if s:Dedented(a:lnum, plindent)
+        return -1
+    else
+        return plindent
+    endif
   endif
 
   return -1
diff --git a/runtime/plugin/gzip.vim b/runtime/plugin/gzip.vim
index ffc00f6..7214488 100644
--- a/runtime/plugin/gzip.vim
+++ b/runtime/plugin/gzip.vim
@@ -20,7 +20,7 @@
   "
   " Set binary mode before reading the file.
   " Use "gzip -d", gunzip isn't always available.
-  autocmd BufReadPre,FileReadPre	*.gz,*.bz2,*.Z,*.lzma,*.xz,*.lz,*.zst,*.br setlocal bin
+  autocmd BufReadPre,FileReadPre	*.gz,*.bz2,*.Z,*.lzma,*.xz,*.lz,*.zst,*.br,*.lzo setlocal bin
   autocmd BufReadPost,FileReadPost	*.gz  call gzip#read("gzip -dn")
   autocmd BufReadPost,FileReadPost	*.bz2 call gzip#read("bzip2 -d")
   autocmd BufReadPost,FileReadPost	*.Z   call gzip#read("uncompress")
@@ -29,6 +29,7 @@
   autocmd BufReadPost,FileReadPost	*.lz  call gzip#read("lzip -d")
   autocmd BufReadPost,FileReadPost	*.zst call gzip#read("zstd -d --rm")
   autocmd BufReadPost,FileReadPost	*.br call gzip#read("brotli -d --rm")
+  autocmd BufReadPost,FileReadPost	*.lzo call gzip#read("lzop -d -U")
   autocmd BufWritePost,FileWritePost	*.gz  call gzip#write("gzip")
   autocmd BufWritePost,FileWritePost	*.bz2 call gzip#write("bzip2")
   autocmd BufWritePost,FileWritePost	*.Z   call gzip#write("compress -f")
@@ -37,6 +38,7 @@
   autocmd BufWritePost,FileWritePost	*.lz  call gzip#write("lzip")
   autocmd BufWritePost,FileWritePost	*.zst  call gzip#write("zstd --rm")
   autocmd BufWritePost,FileWritePost	*.br  call gzip#write("brotli --rm")
+  autocmd BufWritePost,FileWritePost	*.lzo  call gzip#write("lzop -U")
   autocmd FileAppendPre			*.gz  call gzip#appre("gzip -dn")
   autocmd FileAppendPre			*.bz2 call gzip#appre("bzip2 -d")
   autocmd FileAppendPre			*.Z   call gzip#appre("uncompress")
@@ -45,6 +47,7 @@
   autocmd FileAppendPre			*.lz   call gzip#appre("lzip -d")
   autocmd FileAppendPre			*.zst call gzip#appre("zstd -d --rm")
   autocmd FileAppendPre			*.br call gzip#appre("brotli -d --rm")
+  autocmd FileAppendPre			*.lzo call gzip#appre("lzop -d -U")
   autocmd FileAppendPost		*.gz  call gzip#write("gzip")
   autocmd FileAppendPost		*.bz2 call gzip#write("bzip2")
   autocmd FileAppendPost		*.Z   call gzip#write("compress -f")
@@ -53,4 +56,5 @@
   autocmd FileAppendPost		*.lz call gzip#write("lzip")
   autocmd FileAppendPost		*.zst call gzip#write("zstd --rm")
   autocmd FileAppendPost		*.br call gzip#write("brotli --rm")
+  autocmd FileAppendPost		*.lzo call gzip#write("lzop -U")
 augroup END
diff --git a/runtime/syntax/gnuplot.vim b/runtime/syntax/gnuplot.vim
index 7777cc9..9c98e67 100644
--- a/runtime/syntax/gnuplot.vim
+++ b/runtime/syntax/gnuplot.vim
@@ -3,7 +3,7 @@
 " Maintainer:	Josh Wainwright <wainwright DOT ja AT gmail DOT com>
 " Last Maintainer:	Andrew Rasmussen andyras@users.sourceforge.net
 " Original Maintainer:	John Hoelzel johnh51@users.sourceforge.net
-" Last Change:	2015-08-25
+" Last Change:	2020 May 12
 " Filenames:	*.gnu *.plt *.gpi *.gih *.gp *.gnuplot scripts: #!*gnuplot
 " URL:		http://www.vim.org/scripts/script.php?script_id=4873
 " Original URL:	http://johnh51.get.to/vim/syntax/gnuplot.vim
@@ -479,7 +479,7 @@
 
 " ---- Macros ---- "
 
-syn region gnuplotMacro		start="@" end=" "
+syn match gnuplotMacro		"@[a-zA-Z0-9_]*"
 
 " ---- Todos ---- "
 
diff --git a/runtime/syntax/masm.vim b/runtime/syntax/masm.vim
index abee78b..c3b2a9b 100644
--- a/runtime/syntax/masm.vim
+++ b/runtime/syntax/masm.vim
@@ -2,7 +2,7 @@
 " Language:	Microsoft Macro Assembler (80x86)
 " Orig Author:	Rob Brady <robb@datatone.com>
 " Maintainer:	Wu Yongwei <wuyongwei@gmail.com>
-" Last Change:	2020-05-07 17:04:10 +0800
+" Last Change:	2020-05-09 22:55:38 +0800
 
 " Quit when a syntax file was already loaded
 if exists("b:current_syntax")
@@ -12,7 +12,7 @@
 let s:cpo_save = &cpo
 set cpo&vim
 
-setlocal iskeyword=@,48-57,_,36,60,62,63,@-@
+syn iskeyword @,48-57,_,36,60,62,63,@-@
 
 syn case ignore
 
diff --git a/runtime/syntax/pamenv.vim b/runtime/syntax/pamenv.vim
new file mode 100644
index 0000000..90359da
--- /dev/null
+++ b/runtime/syntax/pamenv.vim
@@ -0,0 +1,28 @@
+" Vim syntax file
+" Language:             pam_env.conf(5) configuration file
+" Latest Revision:      2020-05-10
+
+if exists("b:current_syntax")
+  finish
+endif
+
+syn keyword     pamenvTodo              contained TODO FIXME XXX NOTE
+syn region      pamenvComment           start='^#' end='$' display oneline contains=pamenvTodo,@Spells
+
+syn match       pamenvVars              '^[A-Z_][A-Z_0-9]*' nextgroup=pamenvKeywords skipwhite
+
+syn keyword     pamenvKeywords          contained DEFAULT OVERRIDE nextgroup=pamenvVarEq
+
+syn match       pamenvVarEq             contained '=' nextgroup=pamenvValue,pamenvValueWithQuote
+
+syn match       pamenvValue             contained '[^ \t]*' skipwhite nextgroup=pamenvKeywords
+syn region      pamenvValueWithQuote    contained start='"' end='"' skipwhite nextgroup=pamenvKeywords
+
+hi def link     pamenvTodo              Todo
+hi def link     pamenvComment           Comment
+hi def link     pamenvKeywords          Keyword
+hi def link     pamenvVars              Identifier
+hi def link     pamenvValue             String
+hi def link     pamenvValueWithQuote    String
+
+let b:current_syntax = "pamenv"
diff --git a/runtime/syntax/php.vim b/runtime/syntax/php.vim
index 04036fd..720d71e 100644
--- a/runtime/syntax/php.vim
+++ b/runtime/syntax/php.vim
@@ -1,9 +1,11 @@
 " Vim syntax file
 " Language: php PHP 3/4/5/7
-" Maintainer: Jason Woofenden <jason@jasonwoof.com>
-" Last Change: Oct 19, 2019
-" URL: https://jasonwoof.com/gitweb/?p=vim-syntax.git;a=blob;f=php.vim;hb=HEAD
-" Former Maintainers: Peter Hodge <toomuchphp-vim@yahoo.com>
+" Maintainer: Tyson Andre <tysonandre775@hotmail.com>
+" Last Change: May 11, 2020
+" URL: https://github.com/TysonAndre/vim-syntax
+" Former Maintainers: 
+"         Jason Woofenden <jason@jasonwoof.com>
+"         Peter Hodge <toomuchphp-vim@yahoo.com>
 "         Debian VIM Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 "
 " Note: If you are using a colour terminal with dark background, you will
@@ -91,7 +93,7 @@
   syn cluster phpAddStrings add=@htmlTop
 endif
 
-" make sure we can use \ at the begining of the line to do a continuation
+" make sure we can use \ at the beginning of the line to do a continuation
 let s:cpo_save = &cpo
 set cpo&vim
 
@@ -314,7 +316,7 @@
   " define a cluster to get all interpolation syntaxes for double-quoted strings
   syn cluster phpInterpDouble contains=phpInterpSimple,phpInterpSimpleCurly,phpInterpDollarCurly1,phpInterpDollarCurly2,phpInterpBogusDollarCurley,phpInterpComplex
 
-" Methoden
+" Methods
 syn match phpMethodsVar "->\h\w*" contained contains=phpMethods,phpMemberSelector display
 
 " Include
@@ -328,14 +330,14 @@
 
 " Float
 " Refer to: https://www.php.net/manual/en/language.types.float.php
-syn match phpFloat "\%(\w\|\.\)\@<!\%(\d\|\.\)*\d\%(\d\|\.\)*\%([eE][+-]\=\%(\d\|\.\)\+\)\=\%(\w\|\.\)\@!" contained contains=phpFloatError display
-syn match phpFloatError "[eE.].*\." contained display
+syn match phpFloat "\%(\w\|\.\)\@<!\%(\d_\?\|\.\)*\d\%(\d\|_\|\.\)*\%([eE][+-]\=\%(\d\|_\|\.\)\+\)\=\%(\w\|\.\)\@!" contained contains=phpFloatError display
+syn match phpFloatError "\%([eE.][0-9._+-]*\.\|__\|_\(\>\|[eE]\)\|\(\>\|[eE]\)_\)" contained display
 
 " Number
-syn match phpNumber "\%(\.\)\@<!\<\%([1-9]\d*\|0\|0[xX]\x\+\)\>\%(\.\)\@!" contained display
+syn match phpNumber "\%(\.\)\@<!\<\%([1-9]\d*\|0\|0[xX]\(\x_\?\)*\x\)\>\%(\.\)\@!" contained display
 syn match phpNumber "\%(\.\)\@<!\<0\d\+\>\%(\.\)\@!" contained contains=phpOctalError display
 syn match phpBinaryError "[2-9]" contained display
-syn match phpNumber "\%(\.\)\@<!\<0[bB]\d\+\>\%(\.\)\@!" contained contains=phpBinaryError display
+syn match phpNumber "\%(\.\)\@<!\<0[bB]\(\d_\?\)*\d\>\%(\.\)\@!" contained contains=phpBinaryError display
 
 " Backslash escapes
 syn case match
@@ -442,6 +444,7 @@
 " match one line constructs here and skip them at folding
   syn keyword phpSCKeyword abstract final private protected public static contained
   syn keyword phpFCKeyword function contained
+  syn keyword phpDefine fn contained
   syn keyword phpStorageClass global contained
   syn match phpDefine "\(\s\|^\)\(abstract\s\+\|final\s\+\|private\s\+\|protected\s\+\|public\s\+\|static\s\+\)*function\(\s\+.*[;}]\)\@=" contained contains=phpSCKeyword
   syn match phpStructure "\(\s\|^\)\(abstract\s\+\|final\s\+\)*\(trait\|class\)\(\s\+.*}\)\@=" contained
@@ -459,7 +462,7 @@
   syn region phpFoldCatch matchgroup=Exception start="^\z(\s*\)catch\s\+\([^}]*$\)\@=" matchgroup=Delimiter end="^\z1}" contains=@phpClFunction,phpFoldFunction contained transparent fold extend
   syn region phpFoldTry matchgroup=Exception start="^\z(\s*\)try\s\+\([^}]*$\)\@=" matchgroup=Delimiter end="^\z1}" contains=@phpClFunction,phpFoldFunction contained transparent fold extend
 else
-  syn keyword phpDefine function contained
+  syn keyword phpDefine function fn contained
   syn keyword phpStructure abstract class trait interface contained
   syn keyword phpException catch throw try finally contained
   syn keyword phpStorageClass final global private protected public static contained
diff --git a/runtime/syntax/sh.vim b/runtime/syntax/sh.vim
index 0f4406d..3a2a6e7 100644
--- a/runtime/syntax/sh.vim
+++ b/runtime/syntax/sh.vim
@@ -2,8 +2,8 @@
 " Language:		shell (sh) Korn shell (ksh) bash (sh)
 " Maintainer:		Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
 " Previous Maintainer:	Lennart Schultz <Lennart.Schultz@ecmwf.int>
-" Last Change:		Oct 16, 2019
-" Version:		189
+" Last Change:		Apr 14, 2020
+" Version:		190
 " URL:		http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH
 " For options and settings, please use:      :help ft-sh-syntax
 " This file includes many ideas from Eric Brunet (eric.brunet@ens.fr)
@@ -357,19 +357,18 @@
  syn region  shExDoubleQuote	matchGroup=Error start=+\$"+ skip=+\\\\\|\\.+ end=+"+	contains=shStringSpecial
 endif
 syn region  shSingleQuote	matchgroup=shQuote start=+'+ end=+'+		contains=@Spell	nextgroup=shSpecialStart,shSpecialSQ
-syn region  shDoubleQuote	matchgroup=shQuote start=+\%(\%(\\\\\)*\\\)\@<!"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial,@Spell	nextgroup=shSpecialStart
-syn region  shDoubleQuote	matchgroup=shQuote start=+"+ skip=+\\"+ end=+"+		contained contains=@shDblQuoteList,shStringSpecial,@Spell	nextgroup=shSpecialStart
+syn region  shDoubleQuote	matchgroup=shQuote start=+\%(\%(\\\\\)*\\\)\@<!"+ skip=+\\.+ end=+"+	contains=@shDblQuoteList,shStringSpecial,@Spell	nextgroup=shSpecialStart
+syn region  shDoubleQuote	matchgroup=shQuote start=+"+ matchgroup=shSpecial skip=+\\"+ end=+"+		contained	contains=@shDblQuoteList,shStringSpecial,@Spell	nextgroup=shSpecialStart
 syn match   shStringSpecial	"[^[:print:] \t]"			contained
 syn match   shStringSpecial	"[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]"			nextgroup=shComment
-syn match   shStringSpecial	"[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]"
 syn match   shSpecialSQ	"[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]"		contained	nextgroup=shBkslshSnglQuote,@shNoZSList
 syn match   shSpecialDQ	"[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]"		contained	nextgroup=shBkslshDblQuote,@shNoZSList
 syn match   shSpecialStart	"\%(\\\\\)*\\[\\"'`$()#]"			contained	nextgroup=shBkslshSnglQuote,shBkslshDblQuote,@shNoZSList
 syn match   shSpecial	"^\%(\\\\\)*\\[\\"'`$()#]"
 syn match   shSpecialNoZS	contained	"\%(\\\\\)*\\[\\"'`$()#]"
 syn match   shSpecialNxt	contained	"\\[\\"'`$()#]"
-syn region  shBkslshSnglQuote	contained	matchgroup=shQuote start=+'+ end=+'+	contains=@Spell	nextgroup=shSpecialStart
-syn region  shBkslshDblQuote	contained	matchgroup=shQuote start=+"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial,@Spell	nextgroup=shSpecialStart
+"syn region  shBkslshSnglQuote	contained	matchgroup=shQuote start=+'+ end=+'+	contains=@Spell	nextgroup=shSpecialStart
+"syn region  shBkslshDblQuote	contained	matchgroup=shQuote start=+"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial,@Spell	nextgroup=shSpecialStart
 
 " Comments: {{{1
 "==========
@@ -454,13 +453,13 @@
  syn match  shDerefWordError	"[^}$[~]"	contained
 endif
 syn match  shDerefSimple	"\$\%(\h\w*\|\d\)"	nextgroup=@shNoZSList
-syn region shDeref	matchgroup=PreProc start="\${" end="}"	contains=@shDerefList,shDerefVarArray
+syn region shDeref	matchgroup=PreProc start="\${" end="}"	contains=@shDerefList,shDerefVarArray nextgroup=shSpecialStart
 syn match  shDerefSimple	"\$[-#*@!?]"	nextgroup=@shNoZSList
 syn match  shDerefSimple	"\$\$"	nextgroup=@shNoZSList
-syn match  shDerefSimple	"\${\d}"	nextgroup=@shNoZSList
+syn match  shDerefSimple	"\${\d}"	nextgroup=@shNoZSList	nextgroup=shSpecialStart
 if exists("b:is_bash") || exists("b:is_kornshell") || exists("b:is_posix")
- syn region shDeref	matchgroup=PreProc start="\${##\=" end="}"	contains=@shDerefList	nextgroup=@shSpecialNoZS
- syn region shDeref	matchgroup=PreProc start="\${\$\$" end="}"	contains=@shDerefList	nextgroup=@shSpecialNoZS
+ syn region shDeref	matchgroup=PreProc start="\${##\=" end="}"	contains=@shDerefList	nextgroup=@shSpecialNoZS,shSpecialStart
+ syn region shDeref	matchgroup=PreProc start="\${\$\$" end="}"	contains=@shDerefList	nextgroup=@shSpecialNoZS,shSpecialStart
 endif
 
 " ksh: ${!var[*]} array index list syntax: {{{1