Update runtime files.
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 59c9840..7401f41 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -132,7 +132,6 @@
 runtime/syntax/cabalconfig.vim		@coot
 runtime/syntax/cabalproject.vim		@coot
 runtime/syntax/cs.vim			@nickspoons
-runtime/syntax/cs.vim			@nickspoons
 runtime/syntax/csh.vim			@cecamp
 runtime/syntax/cucumber.vim		@tpope
 runtime/syntax/datascript.vim		@dpelle
diff --git a/runtime/compiler/ocaml.vim b/runtime/compiler/ocaml.vim
index 7f8a7ea..faa8af1 100644
--- a/runtime/compiler/ocaml.vim
+++ b/runtime/compiler/ocaml.vim
@@ -1,11 +1,11 @@
 " Vim Compiler File
 " Compiler:    ocaml
 " Maintainer:  Markus Mottl <markus.mottl@gmail.com>
-" URL:         https://github.com/rgrinberg/vim-ocaml
+" URL:         https://github.com/ocaml/vim-ocaml
 " Last Change:
+"              2020 Mar 28 - Improved error format (Thomas Leonard)
 "              2017 Nov 26 - Improved error format (Markus Mottl)
 "              2013 Aug 27 - Added a new OCaml error format (Markus Mottl)
-"              2013 Jun 30 - Initial version (Marc Weber)
 "
 " Marc Weber's comments:
 " Setting makeprg doesn't make sense, because there is ocamlc, ocamlopt,
@@ -21,6 +21,7 @@
 "
 " So having it here makes people opt-in
 
+
 if exists("current_compiler")
     finish
 endif
@@ -30,6 +31,7 @@
 set cpo&vim
 
 CompilerSet errorformat =
+      \%EFile\ \"%f\"\\,\ lines\ %*\\d-%l\\,\ characters\ %c-%*\\d:,
       \%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d:,
       \%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d\ %.%#,
       \%EFile\ \"%f\"\\,\ line\ %l\\,\ character\ %c:%m,
diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt
index e536dac..990380f 100644
--- a/runtime/doc/cmdline.txt
+++ b/runtime/doc/cmdline.txt
@@ -1,4 +1,4 @@
-*cmdline.txt*   For Vim version 8.2.  Last change: 2020 Sep 14
+*cmdline.txt*   For Vim version 8.2.  Last change: 2020 Dec 26
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -849,6 +849,16 @@
 		file name n.  See |:oldfiles| or |v:oldfiles| to get the
 		number.							*E809*
 		{only when compiled with the |+eval| and |+viminfo| features}
+In |Vim9-script| # is used to start a comment, use %% for the alternate file
+name:
+	%	Is replaced with the current file name.
+	%%	Is replaced with the alternate file name.	*:_%%* *c_%%*
+	%%n	(where n is a number) is replaced with		*:_%%0* *:_%%n*
+		the file name of buffer n.  "%%0" is the same as "%%".   *c_%%n*
+	%%%	Is replaced with all names in the argument	*:_%%%* *c_%%%#*
+		list concatenated, separated by spaces.
+	%%<n	(where n is a number > 0) is replaced with old  *:_%%<* *c_%%<*
+		file name n.
 
 Note that these, except "#<n", give the file name as it was typed.  If an
 absolute path is needed (when using the file name from a different directory),
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 8b85dad..3043225 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 Dec 22
+*eval.txt*	For Vim version 8.2.  Last change: 2020 Dec 29
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -8960,7 +8960,7 @@
 						result.  if search exceeded
 						total count, "total" value
 						becomes `maxcount + 1`
-						(default: 0)
+						(default: 99)
 		  pos		|List|		`[lnum, col, off]` value
 						when recomputing the result.
 						this changes "current" result
@@ -10874,7 +10874,7 @@
 		is the timer ID.  The callback is only invoked when Vim is
 		waiting for input.
 		If you want to show a message look at |popup_notification()|
-		to avoid intefering with what the user is doing.
+		to avoid interfering with what the user is doing.
 
 		{options} is a dictionary.  Supported entries:
 		   "repeat"	Number of times to repeat calling the
@@ -12952,7 +12952,7 @@
 :exe[cute] {expr1} ..	Executes the string that results from the evaluation
 			of {expr1} as an Ex command.
 			Multiple arguments are concatenated, with a space in
-			between.  To avoid the extra space use the "."
+			between.  To avoid the extra space use the ".."
 			operator to concatenate strings into one argument.
 			{expr1} is used as the processed command, command line
 			editing keys are not recognized.
diff --git a/runtime/doc/helphelp.txt b/runtime/doc/helphelp.txt
index c724923..3a06baf 100644
--- a/runtime/doc/helphelp.txt
+++ b/runtime/doc/helphelp.txt
@@ -1,4 +1,4 @@
-*helphelp.txt*	For Vim version 8.2.  Last change: 2020 Dec 19
+*helphelp.txt*	For Vim version 8.2.  Last change: 2020 Dec 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -158,6 +158,9 @@
 will be opened.  Otherwise the specified tag is searched for in all "doc/tags"
 files in the directories specified in the 'runtimepath' option.
 
+If you would like to open the help in the current window, see this tip:
+|help-curwin|.
+
 The initial height of the help window can be set with the 'helpheight' option
 (default 20).
 
diff --git a/runtime/doc/intro.txt b/runtime/doc/intro.txt
index c555dc2..7d68399 100644
--- a/runtime/doc/intro.txt
+++ b/runtime/doc/intro.txt
@@ -1,4 +1,4 @@
-*intro.txt*     For Vim version 8.2.  Last change: 2020 Dec 19
+*intro.txt*     For Vim version 8.2.  Last change: 2020 Dec 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -678,8 +678,8 @@
 Normal mode, without causing a beep like <Esc> would.  However, this does not
 work in Ex mode.  When used after a command that takes an argument, such as
 |f| or |m|, the timeout set with 'ttimeoutlen' applies.
-When focus is in a terminal window, CTRL-\ CTRL-N goes to Normal mode for only
-one command, see |t_CTRL-\_CTRL-N|.
+When focus is in a terminal window, CTRL-\ CTRL-N goes to Normal mode until an
+edit command is entered, see |t_CTRL-\_CTRL-N|.
 
 	*CTRL-\_CTRL-G* *i_CTRL-\_CTRL-G* *c_CTRL-\_CTRL-G* *v_CTRL-\_CTRL-G*
 The command CTRL-\ CTRL-G or <C-\><C-G> can be used to go to Insert mode when
diff --git a/runtime/doc/message.txt b/runtime/doc/message.txt
index 9ce649d..fbf4ce2 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 Sep 07
+*message.txt*   For Vim version 8.2.  Last change: 2020 Dec 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -794,6 +794,9 @@
 -> Press <Enter> or <Space> to redraw the screen and continue, without that
    key being used otherwise.
 -> Press ':' or any other Normal mode command character to start that command.
+   Note that after an external command some special keys, such as the cursor
+   keys, may not work normally, because the terminal is still set to a state
+   for executing the external command.
 -> Press 'k', <Up>, 'u', 'b' or 'g' to scroll back in the messages.  This
    works the same way as at the |more-prompt|.  Only works when 'compatible'
    is off and 'more' is on.
diff --git a/runtime/doc/os_vms.txt b/runtime/doc/os_vms.txt
index b69f650..f5c4859 100644
--- a/runtime/doc/os_vms.txt
+++ b/runtime/doc/os_vms.txt
@@ -1,4 +1,4 @@
-*os_vms.txt*    For Vim version 8.2.  Last change: 2020 Jun 07
+*os_vms.txt*    For Vim version 8.2.  Last change: 2020 Dec 30
 
 
 		  VIM REFERENCE MANUAL
@@ -72,7 +72,7 @@
 4. Problems						*vms-problems*
 
 The code has been tested under Open VMS 6.2 - 8.2 on Alpha, VAX and IA64
-platforms with the DEC C compiler.  It should work without big problems.
+platforms with the DEC C compiler. It should work without major problems.
 If your system does not have some include libraries you can tune up in
 OS_VMS_CONF.H file.
 
@@ -765,6 +765,13 @@
 
 9. VMS related changes					*vms-changes*
 
+Version 8.2
+- make all changes needed for clean compile build of v8.2 on VMS on all platforms
+- test on VSI OpenVMS platforms
+- 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 
+
 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 4a574e3..177a652 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 Dec 06
+*pattern.txt*   For Vim version 8.2.  Last change: 2020 Dec 25
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -394,15 +394,19 @@
 ==============================================================================
 3. Magic							*/magic*
 
-Some characters in the pattern are taken literally.  They match with the same
-character in the text.  When preceded with a backslash however, these
-characters get a special meaning.
+Some characters in the pattern, such as letters, are taken literally.  They
+match exactly the same character in the text.  When preceded with a backslash
+however, these characters may get a special meaning.  For example, "a" matches
+the letter "a", while "\a" matches any alphabetic character.
 
 Other characters have a special meaning without a backslash.  They need to be
-preceded with a backslash to match literally.
+preceded with a backslash to match literally.  For example "." matches any
+character while "\." matches a dot.
 
 If a character is taken literally or not depends on the 'magic' option and the
-items mentioned next.
+items in the pattern mentioned next.  The 'magic' option should always be set,
+but it can be switched off for Vi compatibility.  We mention the effect of
+'nomagic' here for completeness, but we recommend against using that.
 							*/\m* */\M*
 Use of "\m" makes the pattern after it be interpreted as if 'magic' is set,
 ignoring the actual value of the 'magic' option.
@@ -411,30 +415,28 @@
 Use of "\v" means that after it, all ASCII characters except '0'-'9', 'a'-'z',
 'A'-'Z' and '_' have special meaning: "very magic"
 
-Use of "\V" means that after it, only a backslash and terminating character
-(usually / or ?) have special meaning: "very nomagic"
+Use of "\V" means that after it, only a backslash and the terminating
+character (usually / or ?) have special meaning: "very nomagic"
 
 Examples:
 after:	  \v	   \m	    \M	     \V		matches ~
 		'magic' 'nomagic'
-	  $	   $	    $	     \$		matches end-of-line
-	  .	   .	    \.	     \.		matches any character
+	  a	   a	    a	     a		literal 'a'
+	  \a	   \a	    \a	     \a		any alphabetic character
+	  .	   .	    \.	     \.		any character
+	  \.	   \.	    .	     .		literal dot
+	  $	   $	    $	     \$		end-of-line
 	  *	   *	    \*	     \*		any number of the previous atom
 	  ~	   ~	    \~	     \~		latest substitute string
-	  ()	   \(\)     \(\)     \(\)	grouping into an atom
-	  |	   \|	    \|	     \|		separating alternatives
-	  \a	   \a	    \a	     \a		alphabetic character
+	  ()	   \(\)     \(\)     \(\)	group as an atom
+	  |	   \|	    \|	     \|		nothing: separates alternatives
 	  \\	   \\	    \\	     \\		literal backslash
-	  \.	   \.	    .	     .		literal dot
-	  \{	   {	    {	     {		literal '{'
-	  a	   a	    a	     a		literal 'a'
+	  \{	   {	    {	     {		literal curly brace
 
 {only Vim supports \m, \M, \v and \V}
 
-It is recommended to always keep the 'magic' option at the default setting,
-which is 'magic'.  This avoids portability problems.  To make a pattern immune
-to the 'magic' option being set or not, put "\m" or "\M" at the start of the
-pattern.
+If you want to you can make a pattern immune to the 'magic' option being set
+or not by putting "\m" or "\M" at the start of the pattern.
 
 ==============================================================================
 4. Overview of pattern items				*pattern-overview*
diff --git a/runtime/doc/repeat.txt b/runtime/doc/repeat.txt
index f6c96d0..fc699a1 100644
--- a/runtime/doc/repeat.txt
+++ b/runtime/doc/repeat.txt
@@ -1,4 +1,4 @@
-*repeat.txt*    For Vim version 8.2.  Last change: 2020 Oct 09
+*repeat.txt*    For Vim version 8.2.  Last change: 2021 Jan 02
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -354,6 +354,14 @@
 			Vim version, or update Vim to a newer version.  See
 			|vimscript-version| for what changed between versions.
 
+:vim9script [noclear]				*:vim9* *:vim9script*
+			Marks a script file as containing |Vim9-script|
+			commands.  Also see |vim9-namespace|.
+			Must be the first command in the file.
+			For [noclear] see |vim9-reload|.
+			Without the |+eval| feature this changes the syntax
+			for some commands.
+			 
 						*: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/tags b/runtime/doc/tags
index 18e3d98..a32731d 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -2072,6 +2072,11 @@
 :_#<	cmdline.txt	/*:_#<*
 :_#n	cmdline.txt	/*:_#n*
 :_%	cmdline.txt	/*:_%*
+:_%%	cmdline.txt	/*:_%%*
+:_%%%	cmdline.txt	/*:_%%%*
+:_%%0	cmdline.txt	/*:_%%0*
+:_%%<	cmdline.txt	/*:_%%<*
+:_%%n	cmdline.txt	/*:_%%n*
 :_%:	cmdline.txt	/*:_%:*
 :_%<	cmdline.txt	/*:_%<*
 :a	insert.txt	/*:a*
@@ -3389,8 +3394,8 @@
 :vie	editing.txt	/*:vie*
 :view	editing.txt	/*:view*
 :vim	quickfix.txt	/*:vim*
-:vim9	vim9.txt	/*:vim9*
-:vim9script	vim9.txt	/*:vim9script*
+:vim9	repeat.txt	/*:vim9*
+:vim9script	repeat.txt	/*:vim9script*
 :vimgrep	quickfix.txt	/*:vimgrep*
 :vimgrepa	quickfix.txt	/*:vimgrepa*
 :vimgrepadd	quickfix.txt	/*:vimgrepadd*
@@ -5152,6 +5157,7 @@
 Vi	intro.txt	/*Vi*
 View	starting.txt	/*View*
 Vim9	vim9.txt	/*Vim9*
+Vim9-script	vim9.txt	/*Vim9-script*
 VimEnter	autocmd.txt	/*VimEnter*
 VimLeave	autocmd.txt	/*VimLeave*
 VimLeavePre	autocmd.txt	/*VimLeavePre*
@@ -5563,6 +5569,10 @@
 c_#<	cmdline.txt	/*c_#<*
 c_#n	cmdline.txt	/*c_#n*
 c_%	cmdline.txt	/*c_%*
+c_%%	cmdline.txt	/*c_%%*
+c_%%%#	cmdline.txt	/*c_%%%#*
+c_%%<	cmdline.txt	/*c_%%<*
+c_%%n	cmdline.txt	/*c_%%n*
 c_<BS>	cmdline.txt	/*c_<BS>*
 c_<C-Left>	cmdline.txt	/*c_<C-Left>*
 c_<C-R>	cmdline.txt	/*c_<C-R>*
@@ -5748,6 +5758,7 @@
 charclass()	eval.txt	/*charclass()*
 charconvert_from-variable	eval.txt	/*charconvert_from-variable*
 charconvert_to-variable	eval.txt	/*charconvert_to-variable*
+charidx()	eval.txt	/*charidx()*
 charity	uganda.txt	/*charity*
 charset	mbyte.txt	/*charset*
 charset-conversion	mbyte.txt	/*charset-conversion*
@@ -7147,6 +7158,7 @@
 hebrew.txt	hebrew.txt	/*hebrew.txt*
 help	helphelp.txt	/*help*
 help-context	help.txt	/*help-context*
+help-curwin	tips.txt	/*help-curwin*
 help-summary	usr_02.txt	/*help-summary*
 help-tags	tags	1
 help-translated	helphelp.txt	/*help-translated*
@@ -10058,6 +10070,7 @@
 vim.vim	syntax.txt	/*vim.vim*
 vim7	version7.txt	/*vim7*
 vim8	version8.txt	/*vim8*
+vim9	vim9.txt	/*vim9*
 vim9-classes	vim9.txt	/*vim9-classes*
 vim9-const	vim9.txt	/*vim9-const*
 vim9-declaration	vim9.txt	/*vim9-declaration*
@@ -10067,9 +10080,10 @@
 vim9-final	vim9.txt	/*vim9-final*
 vim9-gotchas	vim9.txt	/*vim9-gotchas*
 vim9-import	vim9.txt	/*vim9-import*
+vim9-namespace	vim9.txt	/*vim9-namespace*
 vim9-rationale	vim9.txt	/*vim9-rationale*
+vim9-reload	vim9.txt	/*vim9-reload*
 vim9-scopes	vim9.txt	/*vim9-scopes*
-vim9-script	vim9.txt	/*vim9-script*
 vim9-script-intro	usr_46.txt	/*vim9-script-intro*
 vim9-types	vim9.txt	/*vim9-types*
 vim9.txt	vim9.txt	/*vim9.txt*
diff --git a/runtime/doc/term.txt b/runtime/doc/term.txt
index 0093a96..5b7850f 100644
--- a/runtime/doc/term.txt
+++ b/runtime/doc/term.txt
@@ -1,4 +1,4 @@
-*term.txt*      For Vim version 8.2.  Last change: 2020 Apr 12
+*term.txt*      For Vim version 8.2.  Last change: 2020 Dec 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
diff --git a/runtime/doc/terminal.txt b/runtime/doc/terminal.txt
index 08815ef..1951229 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 Nov 25
+*terminal.txt*	For Vim version 8.2.  Last change: 2020 Dec 28
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -742,6 +742,9 @@
 		The default is "Tapi_".  When {expr} is an empty string then
 		no |terminal-api| function can be used for {buf}.
 
+		When used as a method the base is used for {buf}: >
+			GetBufnr()->term_setapi({expr})
+
 term_setansicolors({buf}, {colors})			*term_setansicolors()*
 		Set the ANSI color palette used by terminal {buf}.
 		{colors} must be a List of 16 valid color names or hexadecimal
diff --git a/runtime/doc/tips.txt b/runtime/doc/tips.txt
index a66de91..af78965 100644
--- a/runtime/doc/tips.txt
+++ b/runtime/doc/tips.txt
@@ -1,4 +1,4 @@
-*tips.txt*      For Vim version 8.2.  Last change: 2009 Nov 07
+*tips.txt*      For Vim version 8.2.  Last change: 2020 Dec 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -30,6 +30,7 @@
 Hex editing					|hex-editing|
 Using <> notation in autocommands		|autocmd-<>|
 Highlighting matching parens			|match-parens|
+Opening help in the current window		|help-curwin|
 
 ==============================================================================
 Editing C programs					*C-editing*
@@ -530,4 +531,28 @@
 	autocmd InsertEnter * match none
 <
 
+==============================================================================
+Opening help in the current window				*help-curwin*
+
+By default, help is displayed in a split window.  If you prefer it opens in
+the current window, try this custom `:HelpCurwin` command:
+>
+	command -bar -nargs=? -complete=help HelpCurwin execute s:HelpCurwin(<q-args>)
+	let s:did_open_help = v:false
+	
+	function s:HelpCurwin(subject) abort
+	  let mods = 'silent noautocmd keepalt'
+	  if !s:did_open_help
+	    execute mods .. ' help'
+	    execute mods .. ' helpclose'
+	    let s:did_open_help = v:true
+	  endif
+	  if !getcompletion(a:subject, 'help')->empty()
+	    execute mods .. ' edit ' .. &helpfile
+	  endif
+	  return 'help ' .. a:subject
+	endfunction
+<
+
+
  vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 7a87de0..07779b4 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 Dec 22
+*todo.txt*      For Vim version 8.2.  Last change: 2021 Jan 02
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -38,17 +38,11 @@
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-Rewrite the section on "magic".  Say that 'magic' is normally on, then this
-happens...  If 'magic' is off, then this is different..
+Reload: How to make sure type of script function hasn't changed?
 
-test_vim9_cmd: uses uninitialized var
+Valgrind: test_vim9_cmd: uses uninitialized var
 
 Vim9 - Make everything work:
-- For an :autocmd and :command argument defined in Vim9 script, if a following
-  line starts with "|" append it.  It's like line continuation. (#6702)
-- The syntax of a range list[a:b] is ambiguous, is this one "a:b" variable or
-  a range from "a" to "b"?  To avoid confusion, require white space before
-  (and after) the colon?  #7409
 - Implement "export {one, two three}".
 - Use "null" for v:null, like true and false?  #7495
 - ISN_CHECKTYPE could use check_argtype()
@@ -59,7 +53,18 @@
 - If a :def function is called with a function reference, compile it to get
   the function type.
 	def Filter(x: string, Cond: func(string): bool)
-	Filter(x, { v -> v =~ '^b' })
+	Filter(x, (v) => v =~ '^b')
+- Make inline function work, to be used as a funcref:
+       let Ref = (arg: type): type => {
+	    statement
+	    return expr
+	}
+       let Ref = (arg: type) => {
+	    statement
+	    statement
+	}
+- implement { cmd } compiled
+- implement { cmd } at script level
 - Expand `=expr` in :next, :argedit, :argadd, :argdelete, :drop
 - Expand `=expr` in :vimgrep, :vimgrepadd, :lvimgrep, :lvimgrepadd
 - Expand `=expr` in :mkspell
@@ -68,8 +73,11 @@
 	map(list, SomeFunc)
 - For builtin functions using tv_get_string*() use check_for_string() to be
   more strict about the argument type.
+- Implement :lockvar and :unlockvar.  How about local variables?  Perhaps only
+  allow this for global variables.  Use :final or :const otherwise.
 - Allow function names that will be script-local to start with lower case
-  letter?
+  letter?  Or also require names with s: prefix to use upper case?
+  Also apply this function references "var ref = SomeFunc"
 - Support passing v:none to use the default argument value. (#6504)
 - Make map() give an error if the resulting type of the first argument is
   wrong.  Only works if the type is known?  Is this slow (need to go over all
@@ -98,7 +106,7 @@
 - Implement using imported items at script level from "import * as X" in
   eval_variable().  Should pass the ".xxx" that follows and return that.
 - Disallow unlet for local/script/imported vars
-- Make "++nr" work.
+- Make "++nr" work.  "++g:count" doesn't work, thinks it is a range.
 - Make closures work:
   - Create closure in a loop.  Need to make a list of them.
   - nested closure only uses one context, not all (#7150)
@@ -144,10 +152,6 @@
 - compile options that are an expression, e.g. "expr:" in 'spellsuggest',
   'foldexpr', 'foldtext', 'printexpr', 'diffexpr', 'patchexpr', 'charconvert',
   'balloonexpr', 'includeexpr', 'indentexpr', 'formatexpr'.
-- Make inline function work, to be used as a funcref:
-	let ref = def(arg: type): rettype
-	    body
-	enddef
 - compile get_lambda_tv() in popup_add_timeout()
 - inline call to map() and filter()
 - compile "skip" argument of searchpair()
@@ -224,6 +228,7 @@
   with another Vim instance.
 
 Terminal emulator window:
+- Can escape a terminal popup with win_gotoid(), should be an error
 - No support for underline color, t_8u.
 - When in terminal-Normal mode when the job finishes, the cursor jumps to the
   end but the window is not updated.  This only happens when typing "a".
@@ -276,6 +281,8 @@
 Patch to implement the vimtutor with a plugin: #6414
 Was originally written by Felipe Morales.
 
+Patch to find Python dll using registry key. (#7540)
+
 Remove SPACE_IN_FILENAME ? It is only used for completion.
 
 Making breakat support multibyte characters (Yasuhiro Matsumoto, #6598)
@@ -663,6 +670,38 @@
 'sessionoptions', making it impossible to have a session with a relative path.
 (#4450)
 
+Session file only contains local option values for buffers that are in a
+window, not other buffers. (#7532)
+
+Script generated by :mksession does not work well if there are windows with
+modified buffers
+  change "silent only" into "silent only!"
+  change "edit fname" of first buffer to "hide edit fname"
+  skip "badd fname" if "fname" is already in the buffer list
+  remove remark about unloading buffers from documentation
+
+When session file has name in argument list but the buffer was deleted, the
+buffer is not deleted when using the session file. (#1393)
+Should add the buffer in hidden state.
+
+When a session file is created and there are "nofile" buffers, these are not
+filled.  Need to trigger BufReadCmd autocommands.  Also handle deleting the
+initial empty buffer better. (ZyX, 2015 March 8)
+
+Setting the spell file in a session only reads the local additions, not the
+normal spell file. (Enno Nagel, 2014 Mar 29)
+
+Directory wrong in session file, caused by ":lcd" in BufEnter autocommand.
+(Felix Kater, 2009 Mar 3)
+
+Something wrong with session that has "cd" commands and "badd", in such a way
+that Vim doesn't find the edited file in the buffer list, causing the
+ATTENTION message?  (Tony Mechelynck, 2008 Dec 1)
+Also: swap files are in ~/tmp/  One has relative file name ".mozilla/...".
+
+'foldcolumn' in modeline applied to wrong window when using a session. (Teemu
+Likonen, March 19)
+
 When using a timer callback vgetc_busy is reset, allowing for using input().
 But in a channel callback this does not happen.  We need to do something
 similar to check_due_timer().  Also see #3809.
@@ -852,13 +891,6 @@
 Win32 key codes are messy.  Mike Williams tried to fix that, but now old
 mappings no longer work.  Create a new terminal for the better solution?
 
-Script generated by :mksession does not work well if there are windows with
-modified buffers
-  change "silent only" into "silent only!"
-  change "edit fname" of first buffer to "hide edit fname"
-  skip "badd fname" if "fname" is already in the buffer list
-  remove remark about unloading buffers from documentation
-
 Compiler warnings (geeknik, 2017 Oct 26):
 - signed integer overflow in do_sub() (#2249)
 - signed integer overflow in get_address() (#2248)
@@ -1120,7 +1152,7 @@
 #2089)  Patch with possible solution by Björn Linse.
 
 The change list index is local to a buffer, but it doesn't make sense using it
-for another buffer.  (lacygoll) Copy w_changelistidx to wininfo_S and back.
+for another buffer.  (lacygolil) Copy w_changelistidx to wininfo_S and back.
 
 X11: Putting more than about 262040 characters of text on the clipboard and
 pasting it in another Vim doesn't work.  (Dominique Pelle, 2008 Aug 21-23)
@@ -1227,10 +1259,6 @@
 import can't be used in define option when include matches too.
 (Romain Lafourcade, 2017 Jun 18, #1519)
 
-When session file has name in argument list but the buffer was deleted, the
-buffer is not deleted when using the session file. (#1393)
-Should add the buffer in hidden state.
-
 Wrong diff highlighting with three files. (2016 Oct 20, #1186)
 Also get E749 on exit.
 Another example in #1309
@@ -1689,10 +1717,6 @@
 
 Patch to add a "literal" argument to bufnr().  (Olaf Dabrunz, 2015 Aug 4)
 
-When a session file is created and there are "nofile" buffers, these are not
-filled.  Need to trigger BufReadCmd autocommands.  Also handle deleting the
-initial empty buffer better. (ZyX, 2015 March 8)
-
 Extended file attributes lost on write (backupcopy=no).  Issue 306.
 
 Patch to add :lockjumps. (Carlo Baldassi, 2015 May 25)
@@ -1821,9 +1845,6 @@
 - Development work on plugins (although diff with distributed version would be
   useful).
 
-Setting the spell file in a session only reads the local additions, not the
-normal spell file. (Enno Nagel, 2014 Mar 29)
-
 When typing the first character of a command, e.g. "f", then using a menu, the
 menu item doesn't work.  Clear typeahead when using a menu?
 
@@ -2472,9 +2493,6 @@
 height.  Also happens when there is another window in the frame, if it's not
 very high. (Yegappan Lakshmanan, 2010 Jul 22, Michael Peeters, 2010 Jul 22)
 
-Directory wrong in session file, caused by ":lcd" in BufEnter autocommand.
-(Felix Kater, 2009 Mar 3)
-
 Session file generates error upon loading, cause by --remote-silent-tab.
 (7tommm (ytommm) 2010 Nov 24)
 
@@ -2534,11 +2552,6 @@
 "gqip" in Insert mode has an off-by-one error, causing it to reflow text.
 (Raul Coronado, 2009 Nov 2)
 
-Something wrong with session that has "cd" commands and "badd", in such a way
-that Vim doesn't find the edited file in the buffer list, causing the
-ATTENTION message?  (Tony Mechelynck, 2008 Dec 1)
-Also: swap files are in ~/tmp/  One has relative file name ".mozilla/...".
-
 MS-Windows: editing the first, empty buffer, 'ffs' set to "unix,dos", ":enew"
 doesn't set 'ff' to "unix".  (Ben Fritz, 2008 Dec 5) Reusing the old buffer
 probably causes this.
@@ -2735,9 +2748,6 @@
 ":echoe" in catch block stops processing, while this doesn't happen outside of
 a catch block. (ZyX, 2011 Jun 2)
 
-'foldcolumn' in modeline applied to wrong window when using a session. (Teemu
-Likonen, March 19)
-
 Test 54 uses shell commands, that doesn't work on non-Unix systems.  Use some
 other way to test buffer-local autocommands.
 
diff --git a/runtime/doc/version8.txt b/runtime/doc/version8.txt
index f7dc1fc..161527c 100644
--- a/runtime/doc/version8.txt
+++ b/runtime/doc/version8.txt
@@ -1,4 +1,4 @@
-*version8.txt*  For Vim version 8.2.  Last change: 2020 Oct 25
+*version8.txt*  For Vim version 8.2.  Last change: 2020 Dec 24
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -3282,7 +3282,7 @@
 Files:	    src/os_mswin.c
 
 Patch 7.4.472
-Problem:    The "precedes" entry in 'listchar' will be drawn when 'showbreak'
+Problem:    The "precedes" entry in 'listchars' will be drawn when 'showbreak'
 	    is set and 'list' is not.
 Solution:   Only draw this character when 'list' is on. (Christian Brabandt)
 Files:	    src/screen.c
@@ -35835,7 +35835,7 @@
 Patch 8.1.1592
 Problem:    May start file dialog while exiting.
 Solution:   Ignore the "browse" modifier when exiting. (Ozaki Kiichi,
-            closes #4582
+            closes #4582)
 Files:	    src/ex_cmds.c, src/terminal.c
 
 Patch 8.1.1593
@@ -46431,7 +46431,7 @@
 
 Patch 8.2.0854
 Problem:    Xxd cannot show offset as a decimal number.
-Solution:   Add the "-d" flag. (Aapo Rantalainen, closes #5616
+Solution:   Add the "-d" flag. (Aapo Rantalainen, closes #5616)
 Files:      src/testdir/test_xxd.vim, src/xxd/xxd.c
 
 Patch 8.2.0855
@@ -46661,7 +46661,7 @@
 Files:      src/gui_xim.c
 
 Patch 8.2.0890
-Problem:    No color in terminal window when 'termguicolor' is set.
+Problem:    No color in terminal window when 'termguicolors' is set.
 Solution:   Clear the underline color. (closes #6186)
 Files:      src/highlight.c
 
@@ -46728,7 +46728,7 @@
 
 Patch 8.2.0902
 Problem:    Using searchcount() in 'statusline' causes an error.
-Solution:   Avoid saving/restoring the search patten recursively.
+Solution:   Avoid saving/restoring the search pattern recursively.
             (closes #6194)
 Files:      src/search.c, src/testdir/test_search_stat.vim,
             src/testdir/dumps/Test_searchstat_4.dump
@@ -48832,7 +48832,7 @@
 Patch 8.2.1260
 Problem:    There is no good test for CursorHold.
 Solution:   Add a test.  Remove duplicated test. (Yegappan Lakshmanan,
-            closes #6503
+            closes #6503)
 Files:      src/testdir/test_autocmd.vim, src/testdir/test_buffer.vim,
             src/testdir/test_normal.vim
 
diff --git a/runtime/doc/vim9.txt b/runtime/doc/vim9.txt
index b21b7bf..e13863a 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 Dec 24
+*vim9.txt*	For Vim version 8.2.  Last change: 2021 Jan 02
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -14,7 +14,7 @@
 THIS IS STILL UNDER DEVELOPMENT - ANYTHING CAN BREAK - ANYTHING CAN CHANGE
 
 
-1.  What is Vim9 script?		|vim9-script|
+1.  What is Vim9 script?		|Vim9-script|
 2.  Differences				|vim9-differences|
 3.  New style functions			|fast-functions|
 4.  Types				|vim9-types|
@@ -565,6 +565,13 @@
 
 White space is required around most operators.
 
+White space is required in a sublist (list slice) around the ":", except at
+the start and end: >
+	otherlist = mylist[v : count]  	# v:count has a different meaning
+	otherlist = mylist[:]		# make a copy of the List
+	otherlist = mylist[v :]
+	otherlist = mylist[: v]
+
 White space is not allowed:
 - Between a function name and the "(": >
 	call Func (arg)	   # Error!
@@ -595,7 +602,7 @@
 empty list and dict is falsy:
 
 	type		truthy when ~
-	bool		v:true or 1
+	bool		true, v:true or 1
 	number		non-zero
 	float		non-zero
 	string		non-empty
@@ -603,11 +610,11 @@
 	list		non-empty (different from JavaScript)
 	dictionary	non-empty (different from JavaScript)
 	func		when there is a function name
-	special		v:true
+	special		true or v:true
 	job		when not NULL
 	channel		when not NULL
 	class		when not NULL
-	object		when not NULL (TODO: when isTrue() returns v:true)
+	object		when not NULL (TODO: when isTrue() returns true)
 
 The boolean operators "||" and "&&" expect the values to be boolean, zero or
 one: >
@@ -629,12 +636,15 @@
 When using "`.."` for string concatenation arguments of simple types are
 always converted to string: >
 	'hello ' .. 123  == 'hello 123'
-	'hello ' .. v:true  == 'hello v:true'
+	'hello ' .. v:true  == 'hello true'
 
 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.
+In Vim9 script one can use "true" for v:true and "false" for v:false.  When
+converting a boolean to a string "false" and "true" are used, not "v:false"
+and "v:true" like in legacy script.  "v:none" and "v:null" are not changed,
+they are only used in JSON.
 
 Indexing a string with [idx] or [idx, idx] uses character indexes instead of
 byte indexes. Example: >
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index d624e2b..dddb6d1 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:	2020 Dec 07
+" Last Change:	2020 Dec 24
 
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
diff --git a/runtime/ftplugin/dune.vim b/runtime/ftplugin/dune.vim
index 8b1f8b4..86c99c0 100644
--- a/runtime/ftplugin/dune.vim
+++ b/runtime/ftplugin/dune.vim
@@ -1,7 +1,7 @@
 " Language:    Dune buildsystem
 " Maintainer:  Markus Mottl        <markus.mottl@gmail.com>
 "              Anton Kochkov       <anton.kochkov@gmail.com>
-" URL:         https://github.com/rgrinberg/vim-ocaml
+" URL:         https://github.com/ocaml/vim-ocaml
 " Last Change:
 "              2018 Nov 3 - Added commentstring (Markus Mottl)
 "              2017 Sep 6 - Initial version (Etienne Millon)
diff --git a/runtime/ftplugin/fstab.vim b/runtime/ftplugin/fstab.vim
new file mode 100644
index 0000000..3e7af9f
--- /dev/null
+++ b/runtime/ftplugin/fstab.vim
@@ -0,0 +1,19 @@
+" Vim ftplugin file
+" Language: fstab file
+" Maintainer: Radu Dineiu <radu.dineiu@gmail.com>
+" URL: https://raw.github.com/rid9/vim-fstab/master/ftplugin/fstab.vim
+" Last Change: 2020 Dec 29
+" Version: 1.0
+"
+" Credits:
+"   Subhaditya Nath <sn03.general@gmail.com>
+
+if exists("b:did_ftplugin")
+	finish
+endif
+let b:did_ftplugin = 1
+
+setlocal commentstring=#%s
+let b:undo_ftplugin = "setlocal commentstring<"
+
+" vim: ts=8 ft=vim
\ No newline at end of file
diff --git a/runtime/ftplugin/ocaml.vim b/runtime/ftplugin/ocaml.vim
index e0d7efe..793b887 100644
--- a/runtime/ftplugin/ocaml.vim
+++ b/runtime/ftplugin/ocaml.vim
@@ -5,7 +5,7 @@
 "              Pierre Vittet       <pierre-vittet@pvittet.com>
 "              Stefano Zacchiroli  <zack@bononia.it>
 "              Vincent Aravantinos <firstname.name@imag.fr>
-" URL:         https://github.com/rgrinberg/vim-ocaml
+" URL:         https://github.com/ocaml/vim-ocaml
 " Last Change:
 "              2013 Oct 27 - Added commentstring (MM)
 "              2013 Jul 26 - load default compiler settings (MM)
@@ -38,7 +38,8 @@
 set cpo&vim
 
 " Comment string
-setlocal comments=
+setlocal comments=sr:(*\ ,mb:\ ,ex:*)
+setlocal comments^=sr:(**,mb:\ \ ,ex:*)
 setlocal commentstring=(*%s*)
 
 " Add mappings, unless the user didn't want this.
@@ -391,9 +392,9 @@
     endif
   endfun
 
-  " This variable contain a dictionnary of list. Each element of the dictionnary
-  " represent an annotation system. An annotation system is a list with :
-  " - annotation file name as it's key
+  " This variable contains a dictionary of lists. Each element of the dictionary
+  " represents an annotation system. An annotation system is a list with:
+  " - annotation file name as its key
   " - annotation file path as first element of the contained list
   " - build path as second element of the contained list
   " - annot_file_last_mod (contain the date of .annot file) as third element
@@ -521,7 +522,7 @@
   "c. link this stuff with what the user wants
   " ie. get the expression selected/under the cursor
 
-    let s:ocaml_word_char = '\w|[À-ÿ]|'''
+    let s:ocaml_word_char = '\w|[\xc0-\xff]|'''
 
       "In:  the current mode (eg. "visual", "normal", etc.)
       "Out: the borders of the expression we are looking for the type
diff --git a/runtime/ftplugin/sexplib.vim b/runtime/ftplugin/sexplib.vim
new file mode 100644
index 0000000..27e1b28
--- /dev/null
+++ b/runtime/ftplugin/sexplib.vim
@@ -0,0 +1,15 @@
+" Vim filetype plugin file
+" Language:    Sexplib
+" Maintainer:  Markus Mottl        <markus.mottl@gmail.com>
+" URL:         https://github.com/ocaml/vim-ocaml
+" Last Change:
+"              2017 Apr 12 - First version (MM)
+
+if exists("b:did_ftplugin")
+  finish
+endif
+let b:did_ftplugin=1
+
+" Comment string
+setl commentstring=;\ %s
+setl comments=:;
diff --git a/runtime/indent/dune.vim b/runtime/indent/dune.vim
new file mode 100644
index 0000000..0590d66
--- /dev/null
+++ b/runtime/indent/dune.vim
@@ -0,0 +1,13 @@
+" Vim indent file
+" Language: dune
+" Maintainers:  Markus Mottl         <markus.mottl@gmail.com>
+" URL:          https://github.com/ocaml/vim-ocaml
+" Last Change:  2021 Jan 01
+
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+" dune format-dune-file uses 1 space to indent
+setlocal softtabstop=1 shiftwidth=1 expandtab
diff --git a/runtime/indent/ocaml.vim b/runtime/indent/ocaml.vim
index 8fe9de3..19c81f4 100644
--- a/runtime/indent/ocaml.vim
+++ b/runtime/indent/ocaml.vim
@@ -3,7 +3,7 @@
 " Maintainers:  Jean-Francois Yuen   <jfyuen@happycoders.org>
 "               Mike Leary           <leary@nwlink.com>
 "               Markus Mottl         <markus.mottl@gmail.com>
-" URL:          http://www.ocaml.info/vim/indent/ocaml.vim
+" URL:          https://github.com/ocaml/vim-ocaml
 " Last Change:  2017 Jun 13
 "               2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working
 "               2005 May 09 - Added an option to not indent OCaml-indents specially (MM)
@@ -30,7 +30,8 @@
 " Comment formatting
 if !exists("no_ocaml_comments")
  if (has("comments"))
-   setlocal comments=sr:(*,mb:*,ex:*)
+   setlocal comments=sr:(*\ ,mb:\ ,ex:*)
+   setlocal comments^=sr:(**,mb:\ \ ,ex:*)
    setlocal fo=cqort
  endif
 endif
diff --git a/runtime/syntax/diff.vim b/runtime/syntax/diff.vim
index ac43d66..408556a 100644
--- a/runtime/syntax/diff.vim
+++ b/runtime/syntax/diff.vim
@@ -2,7 +2,7 @@
 " Language:	Diff (context or unified)
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
 "               Translations by Jakson Alves de Aquino.
-" Last Change:	2020 Dec 07
+" Last Change:	2020 Dec 30
 
 " Quit when a (custom) syntax file was already loaded
 if exists("b:current_syntax")
@@ -348,11 +348,16 @@
 syn match diffFile	"^diff\>.*"
 syn match diffFile	"^Index: .*"
 syn match diffFile	"^==== .*"
-" Old style diff uses *** for old and --- for new.
-" Unified diff uses --- for old and +++ for new; names are wrong but it works.
-syn match diffOldFile	"^+++ .*"
-syn match diffOldFile	"^\*\*\* .*"
-syn match diffNewFile	"^--- .*"
+
+if search('^@@ -\S\+ +\S\+ @@', 'nw', '', 100)
+  " unified
+  syn match diffOldFile	"^--- .*"
+  syn match diffNewFile	"^+++ .*"
+else
+  " context / old style
+  syn match diffOldFile	"^\*\*\* .*"
+  syn match diffNewFile	"^--- .*"
+endif
 
 " Used by git
 syn match diffIndexLine	"^index \x\x\x\x.*"
diff --git a/runtime/syntax/dune.vim b/runtime/syntax/dune.vim
index f901813..b425405 100644
--- a/runtime/syntax/dune.vim
+++ b/runtime/syntax/dune.vim
@@ -1,7 +1,8 @@
+" Vim syntax file
 " Language:    Dune buildsystem
 " Maintainer:  Markus Mottl        <markus.mottl@gmail.com>
 "              Anton Kochkov       <anton.kochkov@gmail.com>
-" URL:         https://github.com/rgrinberg/vim-ocaml
+" URL:         https://github.com/ocaml/vim-ocaml
 " Last Change:
 "              2019 Feb 27 - Add newer keywords to the syntax (Simon Cruanes)
 "              2018 May 8 - Check current_syntax (Kawahara Satoru)
@@ -28,7 +29,7 @@
 syn keyword lispKey javascript_files flags ocamlc_flags ocamlopt_flags pps staged_pps
 syn keyword lispKey library_flags c_flags c_library_flags kind package action
 syn keyword lispKey deps targets locks fallback
-syn keyword lispKey inline_tests tests names
+syn keyword lispKey inline_tests tests test names
 
 syn keyword lispAtom true false
 
diff --git a/runtime/syntax/fstab.vim b/runtime/syntax/fstab.vim
index 6b17b5a..3184887 100644
--- a/runtime/syntax/fstab.vim
+++ b/runtime/syntax/fstab.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language: fstab file
 " Maintainer: Radu Dineiu <radu.dineiu@gmail.com>
-" URL: https://raw.github.com/rid9/vim-fstab/master/fstab.vim
-" Last Change: 2020 Aug 06
+" URL: https://raw.github.com/rid9/vim-fstab/master/syntax/fstab.vim
+" Last Change: 2020 Dec 30
 " Version: 1.4
 "
 " Credits:
diff --git a/runtime/syntax/gift.vim b/runtime/syntax/gift.vim
new file mode 100644
index 0000000..3f8d631
--- /dev/null
+++ b/runtime/syntax/gift.vim
@@ -0,0 +1,216 @@
+" Vim syntax file
+"
+" Language:        Moodle GIFT (General Import Format Template)
+" Maintainer:      Selim Temizer (http://selimtemizer.com)
+" Creation:        November 28, 2020
+" Latest Revision: December 21, 2020
+" Note:            The order of entities in this file is important!
+
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+
+setlocal conceallevel=1
+
+"-----------------------------------------------
+" GIFT entities
+
+syn match giftS        "\~"          contained                    "GIFT special characters
+syn match giftS         "="          contained
+syn match giftS         "#"          contained
+syn match giftS         "{"          contained
+syn match giftS         "}"          contained
+syn match giftS         ":"          contained
+
+syn match giftES     "\\\~"          contained  conceal  cchar=~  "GIFT escaped special characters
+syn match giftES      "\\="          contained  conceal  cchar==
+syn match giftES      "\\#"          contained  conceal  cchar=#
+syn match giftES      "\\{"          contained  conceal  cchar={
+syn match giftES      "\\}"          contained  conceal  cchar=}
+syn match giftES      "\\:"          contained  conceal  cchar=:
+
+syn match giftEN      "\\n"          contained  conceal  cchar=n  "GIFT escaped newline
+
+syn match giftFormat  "\[html]"      contained                    "GIFT formats
+syn match giftFormat  "\[plain]"     contained
+syn match giftFormat  "\[moodle]"    contained
+syn match giftFormat  "\[markdown]"  contained
+
+"--------------------------------------------------------
+" HTML entities
+
+syn match giftH            "<"       contained                    "HTML characters that might need to be handled/escaped
+syn match giftH            ">"       contained
+syn match giftH            "&"       contained
+
+syn match giftEH        "&lt;"       contained  conceal  cchar=<  "HTML escaped characters
+syn match giftEH        "&gt;"       contained  conceal  cchar=>
+syn match giftEH       "&amp;"       contained  conceal  cchar=&
+syn match giftEH      "&nbsp;"       contained  conceal  cchar=_
+
+"-------------------------------------------------------
+" Answer components: Feedback and general feedback
+
+syn match giftFB           "#\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|#\|####\|}\)"           contained  contains=giftF       "Feedback block
+syn match giftF         "#\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|#\|####\|}\)"           contained  contains=@giftCEF    "Feedback
+
+syn match giftGFB          "####\_.\{-}\(\_^\|[^\\]\)\ze}"                            contained  contains=giftGF      "General feedback block
+syn match giftGF        "####\zs\_.\{-}\(\_^\|[^\\]\)\ze}"                            contained  contains=@giftCEF    "General feedback
+
+"------------------------------------------------------
+" Answer components: Other components
+
+syn keyword giftTF      T TRUE F FALSE                                                contained
+
+syn match   giftNum1    "[-+]\=[.0-9]\+"                                              contained                       "Something matching a number
+
+syn match   giftNum2    "[-+]\=[.0-9]\+\s*:\s*[-+]\=[.0-9]\+"                         contained  contains=giftNum2D   "Number with error margin
+syn match   giftNum2D                    ":"                                          contained                       "Associated delimiter
+
+syn match   giftNum3    "[-+]\=[.0-9]\+\s*\.\.\s*[-+]\=[.0-9]\+"                      contained  contains=giftNum3D   "Number as min/max range
+syn match   giftNum3D                    "\.\."                                       contained                       "Associated delimiter
+
+syn match   giftWeightB    "%-*[0-9]\{1,2}\.\?[0-9]*%"                                contained  contains=giftWeight  "Weight block
+syn match   giftWeight  "%\zs-*[0-9]\{1,2}\.\?[0-9]*\ze%"                             contained                       "Weight
+
+"-----------------------------------------------------
+" Answer choices
+
+syn match giftWrongNum  "\~\zs\_.\{-}\(\_^\|[^\\]\)\ze\(####\|}\)"                    contained  contains=@giftCEFF             "Wrong numeric choice
+syn match giftRightNum   "=\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)"             contained  contains=@giftCEFFW,@giftNums  "Right numeric choice
+
+syn match giftWrong     "\~\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)"             contained  contains=@giftCEFFW            "Wrong choice
+syn match giftRight      "=\zs\_.\{-}\(\ze->\|\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)\)"  contained  contains=@giftCEFFW            "Right choice
+syn match giftMatchB                "->\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)"    contained  contains=giftMatch             "Match choice block
+syn match giftMatch              "->\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)"    contained  contains=@giftCE               "Match choice
+
+"----------------------------------------------------
+" Answer
+
+syn match giftAnswer      "{\_.\{-}\(\_^\|[^\\]\)}"                                   contained  keepend  contains=@giftA     "General answer
+syn match giftAnswer      "{}"                                                        contained                               "Minimal answer
+
+syn match giftAnswerNum      "{\_[[:space:]]*#\_[^#]\_.\{-}\(\_^\|[^\\]\)}"           contained  keepend  contains=@giftANum  "Numeric answer
+syn match giftAnswerNumD  "{\zs\_[[:space:]]*#"                                       contained                               "Associated delimiter
+
+"---------------------------------------------------
+" Question
+
+" The first pattern matches the last question at the end of the file (in case there is no empty line coming after).
+" However, it slows down parsing (and especially scrolling up), therefore it is commented out.
+
+"syn match giftQuestion  "[^{[:space:]]\_.\{-}\%$"                                               keepend  contains=@giftCEF,giftAnswer,giftAnswerNum
+ syn match giftQuestion  "[^{[:space:]]\_.\{-}\n\(\s*\n\)\+"                                     keepend  contains=@giftCEF,giftAnswer,giftAnswerNum
+
+"--------------------------------------------------
+" Question name
+
+syn match giftName       "::\_.\{-}::"                                                           contains=@giftCE,giftNameD  "Question name
+syn match giftNameD      "::"                                                         contained                              "Associated delimiter
+
+"-------------------------------------------------
+" Category
+
+syn match giftCategoryB  "^\s*\$CATEGORY:.*\n\+"                                                 contains=giftCategory       "Category block
+syn match giftCategory   "^\s*\$CATEGORY:\zs.*\ze\n"                                  contained                              "Category
+
+"------------------------------------------------
+" Comments (may need to be the last entity)
+
+syn keyword giftTodo     FIXME TODO NOTE FIX XXX                                      contained
+
+syn match   giftIdB         "\[id:\(\\]\|[^][:cntrl:]]\)\+]"                          contained  contains=giftId             "Id block
+syn match   giftId       "\[id:\zs\(\\]\|[^][:cntrl:]]\)\+\ze]"                       contained                              "Id
+
+syn match   giftTagB        "\[tag:\(\\]\|[^]<>`[:cntrl:]]\)\+]"                      contained  contains=giftTag            "Tag block
+syn match   giftTag      "\[tag:\zs\(\\]\|[^]<>`[:cntrl:]]\)\+\ze]"                   contained                              "Tag
+
+syn match   giftComment  "^\s*//.*"                                                              contains=giftTodo,giftIdB,giftTagB
+
+"-----------------------------------------------
+" Clusters
+
+"Comments and entities (to be escaped)
+syn cluster giftCE    contains=giftComment,giftS,giftES,giftEN,giftH,giftEH
+
+"The above plus format
+syn cluster giftCEF   contains=@giftCE,giftFormat
+
+"The above plus feedback block
+syn cluster giftCEFF  contains=@giftCEF,giftFB
+
+"The above plus weight block
+syn cluster giftCEFFW contains=@giftCEFF,giftWeightB
+
+"Possible numerical representations
+syn cluster giftNums  contains=giftNum1,giftNum2,giftNum3
+
+"Possible contents of answers
+syn cluster giftA     contains=giftComment,giftTF,giftWrong,giftRight,giftMatchB,giftFB,giftGFB
+
+"Possible contents of numerical answers
+syn cluster giftANum  contains=giftAnswerNumD,giftComment,@giftNums,giftWrongNum,giftRightNum,giftFB,giftGFB
+
+"-----------------------------------------------
+
+let b:current_syntax = "gift"
+
+"-----------------------------------------------
+
+hi Conceal   ctermbg=NONE ctermfg=Blue       guibg=NONE guifg=Blue
+hi Feedback  ctermbg=NONE ctermfg=DarkCyan   guibg=NONE guifg=DarkCyan
+hi GFeedback ctermbg=NONE ctermfg=DarkGreen  guibg=NONE guifg=DarkGreen
+hi WeightB   ctermbg=NONE ctermfg=DarkYellow guibg=NONE guifg=DarkYellow
+
+"-----------------------------------------------
+
+hi def link giftS          Error
+hi def link giftES         Conceal
+hi def link giftEN         Conceal
+hi def link giftFormat     LineNr
+
+hi def link giftH          Error
+hi def link giftEH         Conceal
+
+hi def link giftFB         PreProc
+hi def link giftF          Feedback
+hi def link giftGFB        Title
+hi def link giftGF         GFeedback
+
+hi def link giftTF         Question
+hi def link giftNum1       Question
+hi def link giftNum2       Question
+hi def link giftNum2D      Special
+hi def link giftNum3       Question
+hi def link giftNum3D      Special
+hi def link giftWeightB    WeightB
+hi def link giftWeight     Identifier
+
+hi def link giftWrongNum   Constant
+hi def link giftRightNum   Question
+hi def link giftWrong      Constant
+hi def link giftRight      Question
+hi def link giftMatchB     ModeMsg
+hi def link giftMatch      Constant
+
+hi def link giftAnswer     MoreMsg
+hi def link giftAnswerNum  MoreMsg
+hi def link giftAnswerNumD Identifier
+
+hi def link giftQuestion   Identifier
+
+hi def link giftName       PreProc
+hi def link giftNameD      Directory
+
+hi def link giftCategoryB  LineNr
+hi def link giftCategory   Directory
+
+hi def link giftTodo       Todo
+hi def link giftIdB        LineNr
+hi def link giftId         Title
+hi def link giftTagB       LineNr
+hi def link giftTag        Constant
+hi def link giftComment    Comment
diff --git a/runtime/syntax/ocaml.vim b/runtime/syntax/ocaml.vim
index 42913f2..af3efd3 100644
--- a/runtime/syntax/ocaml.vim
+++ b/runtime/syntax/ocaml.vim
@@ -4,7 +4,7 @@
 " Maintainers:  Markus Mottl      <markus.mottl@gmail.com>
 "               Karl-Heinz Sylla  <Karl-Heinz.Sylla@gmd.de>
 "               Issac Trotts      <ijtrotts@ucdavis.edu>
-" URL:          https://github.com/rgrinberg/vim-ocaml
+" URL:          https://github.com/ocaml/vim-ocaml
 " Last Change:
 "               2018 Nov 08 - Improved highlighting of operators (Maëlan)
 "               2018 Apr 22 - Improved support for PPX (Andrey Popp)
@@ -18,14 +18,20 @@
 " can be distinguished from begin/end, which is used for indentation,
 " and folding. (David Baelde)
 
-" quit when a syntax file was already loaded
+" Quit when a syntax file was already loaded
 if exists("b:current_syntax") && b:current_syntax == "ocaml"
   finish
 endif
 
+let s:keepcpo = &cpo
+set cpo&vim
+
 " ' can be used in OCaml identifiers
 setlocal iskeyword+='
 
+" ` is part of the name of polymorphic variants
+setlocal iskeyword+=`
+
 " OCaml is case sensitive.
 syn case match
 
@@ -123,7 +129,7 @@
 syn region   ocamlModSpec matchgroup=ocamlKeyword start="\<module\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\>" contained contains=@ocamlAllErrs,ocamlComment skipwhite skipempty nextgroup=ocamlModTRWith,ocamlMPRestr
 
 " "open"
-syn region   ocamlNone matchgroup=ocamlKeyword start="\<open\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\( *\. *\u\(\w\|'\)*\)*\>" contains=@ocamlAllErrs,ocamlComment
+syn match   ocamlKeyword "\<open\>" skipwhite skipempty nextgroup=ocamlFullMod
 
 " "include"
 syn match    ocamlKeyword "\<include\>" skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod
@@ -225,7 +231,18 @@
 syn match    ocamlAngle        "<"
 syn match    ocamlAngle        ">"
 " Custom indexing operators:
-syn match    ocamlIndexingOp   "\.[~?!:|&$%=>@^/*+-][~?!.:|&$%<=>@^*/+-]*\(()\|\[]\|{}\)\(<-\)\?"
+syn region   ocamlIndexing matchgroup=ocamlIndexingOp
+  \ start="\.[~?!:|&$%=>@^/*+-][~?!.:|&$%<=>@^*/+-]*\_s*("
+  \ end=")\(\_s*<-\)\?"
+  \ contains=ALLBUT,@ocamlContained,ocamlParenErr
+syn region   ocamlIndexing matchgroup=ocamlIndexingOp
+  \ start="\.[~?!:|&$%=>@^/*+-][~?!.:|&$%<=>@^*/+-]*\_s*\["
+  \ end="]\(\_s*<-\)\?"
+  \ contains=ALLBUT,@ocamlContained,ocamlBrackErr
+syn region   ocamlIndexing matchgroup=ocamlIndexingOp
+  \ start="\.[~?!:|&$%=>@^/*+-][~?!.:|&$%<=>@^*/+-]*\_s*{"
+  \ end="}\(\_s*<-\)\?"
+  \ contains=ALLBUT,@ocamlContained,ocamlBraceErr
 " Extension operators (has to be declared before regular infix operators):
 syn match    ocamlExtensionOp          "#[#~?!.:|&$%<=>@^*/+-]\+"
 " Infix and prefix operators:
@@ -283,7 +300,6 @@
 syn sync match ocamlSigSync     groupthere ocamlSig     "\<end\>"
 
 " Define the default highlighting.
-" Only when an item doesn't have highlighting yet
 
 hi def link ocamlBraceErr	   Error
 hi def link ocamlBrackErr	   Error
@@ -308,14 +324,17 @@
 hi def link ocamlObject	   Include
 hi def link ocamlModule	   Include
 hi def link ocamlModParam1    Include
+hi def link ocamlGenMod       Include
 hi def link ocamlModType	   Include
 hi def link ocamlMPRestr3	   Include
 hi def link ocamlFullMod	   Include
+hi def link ocamlFuncWith	   Include
+hi def link ocamlModParam     Include
 hi def link ocamlModTypeRestr Include
 hi def link ocamlWith	   Include
 hi def link ocamlMTDef	   Include
-hi def link ocamlSigEncl    ocamlModule
-hi def link ocamlStructEncl ocamlModule
+hi def link ocamlSigEncl	   ocamlModule
+hi def link ocamlStructEncl	   ocamlModule
 
 hi def link ocamlScript	   Include
 
@@ -326,24 +345,25 @@
 hi def link ocamlMPRestr2	   Keyword
 hi def link ocamlKeyword	   Keyword
 hi def link ocamlMethod	   Include
+hi def link ocamlArrow	   Keyword
 hi def link ocamlKeyChar	   Keyword
 hi def link ocamlAnyVar	   Keyword
 hi def link ocamlTopStop	   Keyword
 
-hi def link ocamlRefAssign  ocamlKeyChar
-hi def link ocamlEqual	    ocamlKeyChar
-hi def link ocamlStar	    ocamlInfixOp
-hi def link ocamlAngle	    ocamlInfixOp
-hi def link ocamlCons	    ocamlInfixOp
+hi def link ocamlRefAssign    ocamlKeyChar
+hi def link ocamlEqual        ocamlKeyChar
+hi def link ocamlStar         ocamlInfixOp
+hi def link ocamlAngle        ocamlInfixOp
+hi def link ocamlCons         ocamlInfixOp
 
-hi def link ocamlPrefixOp	ocamlOperator
-hi def link ocamlInfixOp	ocamlOperator
-hi def link ocamlExtensionOp	ocamlOperator
-hi def link ocamlIndexingOp	ocamlOperator
+hi def link ocamlPrefixOp       ocamlOperator
+hi def link ocamlInfixOp        ocamlOperator
+hi def link ocamlExtensionOp    ocamlOperator
+hi def link ocamlIndexingOp     ocamlOperator
 
 if exists("ocaml_highlight_operators")
     hi def link ocamlInfixOpKeyword ocamlOperator
-    hi def link ocamlOperator	    Operator
+    hi def link ocamlOperator       Operator
 else
     hi def link ocamlInfixOpKeyword Keyword
 endif
@@ -353,7 +373,7 @@
 hi def link ocamlNumber	   Number
 hi def link ocamlFloat	   Float
 hi def link ocamlString	   String
-hi def link ocamlQuotedStringDelim  Identifier
+hi def link ocamlQuotedStringDelim Identifier
 
 hi def link ocamlLabel	   Identifier
 
@@ -363,8 +383,11 @@
 
 hi def link ocamlEncl	   Keyword
 
-hi def link ocamlPpxEncl    ocamlEncl
+hi def link ocamlPpxEncl       ocamlEncl
 
 let b:current_syntax = "ocaml"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim: ts=8
diff --git a/runtime/syntax/opam.vim b/runtime/syntax/opam.vim
new file mode 100644
index 0000000..9ac1d41
--- /dev/null
+++ b/runtime/syntax/opam.vim
@@ -0,0 +1,38 @@
+" Vim syntax file
+" Language:    OPAM - OCaml package manager
+" Maintainer:  Markus Mottl        <markus.mottl@gmail.com>
+" URL:         https://github.com/ocaml/vim-ocaml
+" Last Change:
+"              2020 Dec 31 - Added header (Markus Mottl)
+
+if exists("b:current_syntax")
+  finish
+endif
+
+" need %{vars}%
+" env: [[CAML_LD_LIBRARY_PATH = "%{lib}%/stublibs"]]
+syn keyword opamKeyword1 remove depends pin-depends depopts conflicts env packages patches version maintainer tags license homepage authors doc install author available name depexts substs synopsis description
+syn match opamKeyword2 "\v(bug-reports|post-messages|ocaml-version|opam-version|dev-repo|build-test|build-doc|build)"
+
+syn keyword opamTodo FIXME NOTE NOTES TODO XXX contained
+syn match opamComment "#.*$" contains=opamTodo,@Spell
+syn match opamOperator ">\|<\|=\|<=\|>="
+
+syn region opamInterpolate start=/%{/ end=/}%/ contained
+syn region opamString start=/"/ end=/"/ contains=opamInterpolate
+syn region opamSeq start=/\[/ end=/\]/ contains=ALLBUT,opamKeyword1,opamKeyword2
+syn region opamExp start=/{/ end=/}/ contains=ALLBUT,opamKeyword1,opamKeyword2
+
+hi link opamKeyword1 Keyword
+hi link opamKeyword2 Keyword
+
+hi link opamString String
+hi link opamExp Function
+hi link opamSeq Statement
+hi link opamOperator Operator
+hi link opamComment Comment
+hi link opamInterpolate Identifier
+
+let b:current_syntax = "opam"
+
+" vim: ts=2 sw=2
diff --git a/runtime/syntax/sexplib.vim b/runtime/syntax/sexplib.vim
new file mode 100644
index 0000000..55dd3fb
--- /dev/null
+++ b/runtime/syntax/sexplib.vim
@@ -0,0 +1,88 @@
+" Vim syntax file
+" Language:     S-expressions as used in Sexplib
+" Filenames:    *.sexp
+" Maintainers:  Markus Mottl      <markus.mottl@gmail.com>
+" URL:          https://github.com/ocaml/vim-ocaml
+" Last Change:  2020 Dec 31 - Updated header for Vim contribution (MM)
+"               2017 Apr 11 - Improved matching of negative numbers (MM)
+"               2012 Jun 20 - Fixed a block comment highlighting bug (MM)
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax") && b:current_syntax == "sexplib"
+  finish
+endif
+
+" Sexplib is case sensitive.
+syn case match
+
+" Comments
+syn keyword  sexplibTodo contained TODO FIXME XXX NOTE
+syn region   sexplibBlockComment matchgroup=sexplibComment start="#|" matchgroup=sexplibComment end="|#" contains=ALLBUT,sexplibQuotedAtom,sexplibUnquotedAtom,sexplibEncl,sexplibComment
+syn match    sexplibSexpComment "#;" skipwhite skipempty nextgroup=sexplibQuotedAtomComment,sexplibUnquotedAtomComment,sexplibListComment,sexplibComment
+syn region   sexplibQuotedAtomComment start=+"+ skip=+\\\\\|\\"+ end=+"+ contained
+syn match    sexplibUnquotedAtomComment /\([^;()" \t#|]\|#[^;()" \t|]\||[^;()" \t#]\)[^;()" \t]*/ contained
+syn region   sexplibListComment matchgroup=sexplibComment start="(" matchgroup=sexplibComment end=")" contained contains=ALLBUT,sexplibEncl,sexplibString,sexplibQuotedAtom,sexplibUnquotedAtom,sexplibTodo,sexplibNumber,sexplibFloat
+syn match    sexplibComment ";.*" contains=sexplibTodo
+
+" Atoms
+syn match    sexplibUnquotedAtom /\([^;()" \t#|]\|#[^;()" \t|]\||[^;()" \t#]\)[^;()" \t]*/
+syn region   sexplibQuotedAtom    start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match    sexplibNumber        "-\=\<\d\(_\|\d\)*[l|L|n]\?\>"
+syn match    sexplibNumber        "-\=\<0[x|X]\(\x\|_\)\+[l|L|n]\?\>"
+syn match    sexplibNumber        "-\=\<0[o|O]\(\o\|_\)\+[l|L|n]\?\>"
+syn match    sexplibNumber        "-\=\<0[b|B]\([01]\|_\)\+[l|L|n]\?\>"
+syn match    sexplibFloat         "-\=\<\d\(_\|\d\)*\.\?\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>"
+
+" Lists
+syn region   sexplibEncl transparent matchgroup=sexplibEncl start="(" matchgroup=sexplibEncl end=")" contains=ALLBUT,sexplibParenErr
+
+" Errors
+syn match    sexplibUnquotedAtomErr /\([^;()" \t#|]\|#[^;()" \t|]\||[^;()" \t#]\)[^;()" \t]*\(#|\||#\)[^;()" \t]*/
+syn match    sexplibParenErr ")"
+
+" Synchronization
+syn sync minlines=50
+syn sync maxlines=500
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_sexplib_syntax_inits")
+  if version < 508
+    let did_sexplib_syntax_inits = 1
+    command -nargs=+ HiLink hi link <args>
+  else
+    command -nargs=+ HiLink hi def link <args>
+  endif
+
+  HiLink sexplibParenErr            Error
+  HiLink sexplibUnquotedAtomErr     Error
+
+  HiLink sexplibComment             Comment
+  HiLink sexplibSexpComment         Comment
+  HiLink sexplibQuotedAtomComment   Include
+  HiLink sexplibUnquotedAtomComment Comment
+  HiLink sexplibBlockComment        Comment
+  HiLink sexplibListComment         Comment
+
+  HiLink sexplibBoolean             Boolean
+  HiLink sexplibCharacter           Character
+  HiLink sexplibNumber              Number
+  HiLink sexplibFloat               Float
+  HiLink sexplibUnquotedAtom        Identifier
+  HiLink sexplibEncl                Identifier
+  HiLink sexplibQuotedAtom          Keyword
+
+  HiLink sexplibTodo                Todo
+
+  HiLink sexplibEncl                Keyword
+
+  delcommand HiLink
+endif
+
+let b:current_syntax = "sexplib"
+
+" vim: ts=8
diff --git a/runtime/syntax/sml.vim b/runtime/syntax/sml.vim
index fa4524f..afff530 100644
--- a/runtime/syntax/sml.vim
+++ b/runtime/syntax/sml.vim
@@ -3,13 +3,16 @@
 " Filenames:    *.sml *.sig
 " Maintainers:  Markus Mottl            <markus.mottl@gmail.com>
 "               Fabrizio Zeno Cornelli  <zeno@filibusta.crema.unimi.it>
-" URL:          http://www.ocaml.info/vim/syntax/sml.vim
-" Last Change:  2006 Oct 23 - Fixed character highlighting bug (MM)
-"               2002 Jun 02 - Fixed small typo  (MM)
-"               2001 Nov 20 - Fixed small highlighting bug with modules (MM)
+" Last Change:  2019 Oct 01 - Only spell check strings & comments (Chuan Wei Foo)
+"               2015 Aug 31 - Fixed opening of modules (Ramana Kumar)
+"               2006 Oct 23 - Fixed character highlighting bug (MM)
 
 " quit when a syntax file was already loaded
 if exists("b:current_syntax")
+
+" Disable spell checking of syntax.
+syn spell notoplevel
+
   finish
 endif
 
@@ -52,7 +55,7 @@
 
 
 " Comments
-syn region   smlComment start="(\*" end="\*)" contains=smlComment,smlTodo
+syn region   smlComment start="(\*" end="\*)" contains=smlComment,smlTodo,@Spell
 syn keyword  smlTodo contained TODO FIXME XXX
 
 
@@ -82,7 +85,7 @@
 syn region   smlModSpec matchgroup=smlKeyword start="\<structure\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contained contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlModTRWith,smlMPRestr
 
 " "open"
-syn region   smlNone matchgroup=smlKeyword start="\<open\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*\>" contains=@smlAllErrs,smlComment
+syn region   smlNone matchgroup=smlKeyword start="\<open\>" matchgroup=smlModule end="\<\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*\>" contains=@smlAllErrs,smlComment
 
 " "structure" - somewhat complicated stuff ;-)
 syn region   smlModule matchgroup=smlKeyword start="\<\(structure\|functor\)\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlPreDef
@@ -136,7 +139,7 @@
 
 syn match    smlCharacter    +#"\\""\|#"."\|#"\\\d\d\d"+
 syn match    smlCharErr      +#"\\\d\d"\|#"\\\d"+
-syn region   smlString       start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn region   smlString       start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell
 
 syn match    smlFunDef       "=>"
 syn match    smlRefAssign    ":="
@@ -149,9 +152,9 @@
 syn match    smlKeyChar      "\*"
 syn match    smlKeyChar      "="
 
-syn match    smlNumber	      "\<-\=\d\+\>"
-syn match    smlNumber	      "\<-\=0[x|X]\x\+\>"
-syn match    smlReal	      "\<-\=\d\+\.\d*\([eE][-+]\=\d\+\)\=[fl]\=\>"
+syn match    smlNumber        "\<-\=\d\+\>"
+syn match    smlNumber        "\<-\=0[x|X]\x\+\>"
+syn match    smlReal          "\<-\=\d\+\.\d*\([eE][-+]\=\d\+\)\=[fl]\=\>"
 
 " Synchronization
 syn sync minlines=20
@@ -167,49 +170,49 @@
 " Define the default highlighting.
 " Only when an item doesn't have highlighting yet
 
-hi def link smlBraceErr	 Error
-hi def link smlBrackErr	 Error
-hi def link smlParenErr	 Error
+hi def link smlBraceErr     Error
+hi def link smlBrackErr     Error
+hi def link smlParenErr     Error
 
-hi def link smlCommentErr	 Error
+hi def link smlCommentErr   Error
 
-hi def link smlEndErr	 Error
-hi def link smlThenErr	 Error
+hi def link smlEndErr       Error
+hi def link smlThenErr      Error
 
-hi def link smlCharErr	 Error
+hi def link smlCharErr      Error
 
-hi def link smlComment	 Comment
+hi def link smlComment      Comment
 
-hi def link smlModPath	 Include
-hi def link smlModule	 Include
-hi def link smlModParam1	 Include
-hi def link smlModType	 Include
-hi def link smlMPRestr3	 Include
-hi def link smlFullMod	 Include
+hi def link smlModPath      Include
+hi def link smlModule       Include
+hi def link smlModParam1    Include
+hi def link smlModType      Include
+hi def link smlMPRestr3     Include
+hi def link smlFullMod      Include
 hi def link smlModTypeRestr Include
-hi def link smlWith	 Include
-hi def link smlMTDef	 Include
+hi def link smlWith         Include
+hi def link smlMTDef        Include
 
 hi def link smlConstructor  Constant
 
-hi def link smlModPreRHS	 Keyword
-hi def link smlMPRestr2	 Keyword
-hi def link smlKeyword	 Keyword
-hi def link smlFunDef	 Keyword
-hi def link smlRefAssign	 Keyword
-hi def link smlKeyChar	 Keyword
-hi def link smlAnyVar	 Keyword
-hi def link smlTopStop	 Keyword
-hi def link smlOperator	 Keyword
+hi def link smlModPreRHS    Keyword
+hi def link smlMPRestr2     Keyword
+hi def link smlKeyword      Keyword
+hi def link smlFunDef       Keyword
+hi def link smlRefAssign    Keyword
+hi def link smlKeyChar      Keyword
+hi def link smlAnyVar       Keyword
+hi def link smlTopStop      Keyword
+hi def link smlOperator     Keyword
 
-hi def link smlBoolean	 Boolean
-hi def link smlCharacter	 Character
-hi def link smlNumber	 Number
-hi def link smlReal	 Float
-hi def link smlString	 String
-hi def link smlType	 Type
-hi def link smlTodo	 Todo
-hi def link smlEncl	 Keyword
+hi def link smlBoolean      Boolean
+hi def link smlCharacter    Character
+hi def link smlNumber       Number
+hi def link smlReal         Float
+hi def link smlString       String
+hi def link smlType         Type
+hi def link smlTodo         Todo
+hi def link smlEncl         Keyword
 
 
 let b:current_syntax = "sml"
diff --git a/src/po/fr.po b/src/po/fr.po
index 13be518..a5e7c48 100644
--- a/src/po/fr.po
+++ b/src/po/fr.po
@@ -6,14 +6,14 @@
 #  FIRST AUTHOR  DindinX         <David.Odin@bigfoot.com>    2000.
 # SECOND AUTHOR  Adrien Beau     <version.francaise@free.fr> 2002, 2003.
 #  THIRD AUTHOR  David Blanchet  <david.blanchet@free.fr>    2006, 2008.
-# FOURTH AUTHOR  Dominique Pellé <dominique.pelle@gmail.com> 2008, 2019.
+# FOURTH AUTHOR  Dominique Pellé <dominique.pelle@gmail.com> 2008, 2020.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Vim 8.1\n"
+"Project-Id-Version: Vim\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-07 11:35+0100\n"
-"PO-Revision-Date: 2019-12-07 12:32+0100\n"
+"POT-Creation-Date: 2020-12-25 13:48+0100\n"
+"PO-Revision-Date: 2020-12-29 10:49+0100\n"
 "Last-Translator: Dominique Pellé <dominique.pelle@gmail.com>\n"
 "Language-Team: French\n"
 "Language: fr\n"
@@ -31,6 +31,9 @@
 msgid "E165: Cannot go beyond last file"
 msgstr "E165: Impossible d'aller au-delà du dernier fichier"
 
+msgid "E610: No argument to delete"
+msgstr "E610: Aucun argument à supprimer"
+
 msgid "E249: window layout changed unexpectedly"
 msgstr "E249: l'arrangement de fenêtre a été changé inopinément"
 
@@ -232,9 +235,6 @@
 msgid "[Not edited]"
 msgstr "[Non édité]"
 
-msgid "[New file]"
-msgstr "[Nouveau fichier]"
-
 msgid "[Read errors]"
 msgstr "[Erreurs de lecture]"
 
@@ -305,6 +305,12 @@
 msgid "Do you really want to write to it"
 msgstr "Voulez-vous vraiment écrire dedans"
 
+msgid "[New]"
+msgstr "[Nouveau]"
+
+msgid "[New File]"
+msgstr "[Nouveau fichier]"
+
 msgid "E676: No matching autocommands for acwrite buffer"
 msgstr "E676: Pas d'autocommande correspondante pour le tampon acwrite"
 
@@ -401,12 +407,6 @@
 msgid "[Device]"
 msgstr "[Périph.]"
 
-msgid "[New]"
-msgstr "[Nouveau]"
-
-msgid "[New File]"
-msgstr "[Nouveau fichier]"
-
 msgid " [a]"
 msgstr " [a]"
 
@@ -447,12 +447,16 @@
 msgid "E902: Cannot connect to port"
 msgstr "E902: Impossible de se connecter au port"
 
+msgid "E898: socket() in channel_connect()"
+msgstr "E898: socket() dans channel_connect()"
+
+#, c-format
+msgid "E901: getaddrinfo() in channel_open(): %s"
+msgstr "E901: getaddrinfo() dans channel_open(): %s"
+
 msgid "E901: gethostbyname() in channel_open()"
 msgstr "E901: gethostbyname() dans channel_open()"
 
-msgid "E898: socket() in channel_open()"
-msgstr "E898: socket() dans channel_open()"
-
 msgid "E903: received command with non-string argument"
 msgstr "E903: commande reçue avec un argument qui n'est pas une chaîne"
 
@@ -486,18 +490,49 @@
 "E912: Impossible d'utiliser ch_evalexpr()/ch_sendexpr() avec un canal brut "
 "ou nl"
 
-msgid "E920: _io file requires _name to be set"
-msgstr "E920: fichier _io nécessite _name"
+msgid "No display"
+msgstr "Aucun display"
 
-msgid "E915: in_io buffer requires in_buf or in_name to be set"
-msgstr "E915: tampon in_io nécessite in_buf ou in_name "
+msgid ": Send failed.\n"
+msgstr " : L'envoi a échoué.\n"
+
+msgid ": Send failed. Trying to execute locally\n"
+msgstr " : L'envoi a échoué. Tentative d'exécution locale\n"
 
 #, c-format
-msgid "E918: buffer must be loaded: %s"
-msgstr "E918: le tampon doit être chargé : %s"
+msgid "%d of %d edited"
+msgstr "%d édités sur %d"
 
-msgid "E916: not a valid job"
-msgstr "E916: tâche invalide"
+msgid "No display: Send expression failed.\n"
+msgstr "Aucun display : L'envoi de l'expression a échoué.\n"
+
+msgid ": Send expression failed.\n"
+msgstr " : L'envoi de l'expression a échoué.\n"
+
+msgid "E240: No connection to the X server"
+msgstr "E240: Pas de connexion au serveur X"
+
+# AB - La version française est meilleure que la version anglaise.
+#, c-format
+msgid "E241: Unable to send to %s"
+msgstr "E241: L'envoi au serveur %s a échoué"
+
+msgid "E277: Unable to read a server reply"
+msgstr "E277: Impossible de lire la réponse du serveur"
+
+msgid "E941: already started a server"
+msgstr "E941: serveur déjà démarré"
+
+msgid "E942: +clientserver feature not available"
+msgstr "E942: La fonctionnalité +clientserver n'est pas disponible"
+
+# AB - La version française est meilleure que la version anglaise.
+msgid "E258: Unable to send to client"
+msgstr "E258: La réponse n'a pas pu être envoyée au client"
+
+# DB - Message de débogage.
+msgid "Used CUT_BUFFER0 instead of empty selection"
+msgstr "CUT_BUFFER0 utilisé plutôt qu'une sélection vide"
 
 # DB - TODO : Pas compris le message ni comment le déclencher malgré une visite
 #      dans le code.
@@ -579,22 +614,6 @@
 msgid "%3d  expr %s"
 msgstr "%3d  expr %s"
 
-#, c-format
-msgid "E720: Missing colon in Dictionary: %s"
-msgstr "E720: Il manque ':' dans le Dictionnaire %s"
-
-#, c-format
-msgid "E721: Duplicate key in Dictionary: \"%s\""
-msgstr "E721: Clé dupliquée dans le Dictionnaire : %s"
-
-#, c-format
-msgid "E722: Missing comma in Dictionary: %s"
-msgstr "E722: Il manque une virgule dans le Dictionnaire : %s"
-
-#, c-format
-msgid "E723: Missing end of Dictionary '}': %s"
-msgstr "E723: Il manque '}' à la fin du Dictionnaire : %s"
-
 msgid "extend() argument"
 msgstr "argument de extend()"
 
@@ -748,18 +767,6 @@
 msgid "E791: Empty keymap entry"
 msgstr "E791: Entrée du descripteur de clavier (keymap) vide"
 
-msgid "E111: Missing ']'"
-msgstr "E111: ']' manquant"
-
-msgid "E719: Cannot use [:] with a Dictionary"
-msgstr "E719: Utilisation de [:] impossible avec un Dictionnaire"
-
-msgid "E806: using Float as a String"
-msgstr "E806: Utilisation d'un Flottant comme une Chaîne"
-
-msgid "E274: No white space allowed before parenthesis"
-msgstr "E274: espace interdite avant une parenthèse"
-
 msgid "E689: Can only index a List, Dictionary or Blob"
 msgstr "E689: Seul une Liste, un Dictionnaire ou un Blob peut être indexé"
 
@@ -775,64 +782,15 @@
 msgid "E996: Cannot lock a range"
 msgstr "E996: Impossible de verrouiller une plage"
 
-msgid "E710: List value has more items than target"
-msgstr "E710: La Liste a plus d'éléments que la destination"
-
-msgid "E711: List value has not enough items"
-msgstr "E711: La Liste n'a pas assez d'éléments"
-
 msgid "E996: Cannot lock a list or dict"
 msgstr "E996: Impossible de verrouiller une liste ou un dictionnaire"
 
-msgid "E690: Missing \"in\" after :for"
-msgstr "E690: \"in\" manquant après :for"
-
-# AB - Je suis partagé entre la concision d'une traduction assez littérale et
-#      la lourdeur d'une traduction plus correcte.
-msgid "E109: Missing ':' after '?'"
-msgstr "E109: Il manque ':' après '?'"
-
-msgid "E804: Cannot use '%' with Float"
-msgstr "E804: Impossible d'utiliser '%' avec un Flottant"
-
-msgid "E973: Blob literal should have an even number of hex characters"
-msgstr ""
-"E973: Un littéral de Blob doit avoir un nombre pair de caractères "
-"hexadécimaux"
-
-msgid "E110: Missing ')'"
-msgstr "E110: ')' manquant"
-
 msgid "E260: Missing name after ->"
 msgstr "E260: Nom manquant après ->"
 
 msgid "E695: Cannot index a Funcref"
 msgstr "E695: Impossible d'indexer une Funcref"
 
-msgid "E909: Cannot index a special variable"
-msgstr "E909: Impossible d'indexer une variable spéciale"
-
-# AB - La version française est meilleure que la version anglaise.
-#, c-format
-msgid "E112: Option name missing: %s"
-msgstr "E112: Il manque un nom d'option après %s"
-
-#, c-format
-msgid "E113: Unknown option: %s"
-msgstr "E113: Option inconnue : %s"
-
-# AB - La version française est meilleure que la version anglaise, qui est
-#      erronée, d'ailleurs : il s'agit d'une "double quote" et non d'une
-#      "quote".
-#, c-format
-msgid "E114: Missing quote: %s"
-msgstr "E114: Il manque \" à la fin de %s"
-
-# AB - La version française est meilleure que la version anglaise.
-#, c-format
-msgid "E115: Missing quote: %s"
-msgstr "E115: Il manque ' à la fin de %s"
-
 msgid "Not enough memory to set references, garbage collection aborted!"
 msgstr ""
 "Pas assez de mémoire pour les références, arrêt du ramassage de miètes !"
@@ -840,66 +798,6 @@
 msgid "E724: variable nested too deep for displaying"
 msgstr "E724: variable trop imbriquée pour être affichée"
 
-msgid "E805: Using a Float as a Number"
-msgstr "E805: Utilisation d'un Flottant comme un Nombre"
-
-msgid "E703: Using a Funcref as a Number"
-msgstr "E703: Utilisation d'une Funcref comme un Nombre"
-
-msgid "E745: Using a List as a Number"
-msgstr "E745: Utilisation d'une Liste comme un Nombre"
-
-msgid "E728: Using a Dictionary as a Number"
-msgstr "E728: Utilisation d'un Dictionnaire comme un Nombre"
-
-msgid "E910: Using a Job as a Number"
-msgstr "E910: Utilisation d'une Tâche comme un Nombre"
-
-msgid "E913: Using a Channel as a Number"
-msgstr "E913: Utilisation d'un Canal comme un Nombre"
-
-msgid "E974: Using a Blob as a Number"
-msgstr "E974: Utilisation d'un Blob comme un Nombre"
-
-msgid "E891: Using a Funcref as a Float"
-msgstr "E891: Utilisation d'une Funcref comme un Flottant"
-
-msgid "E892: Using a String as a Float"
-msgstr "E892: Utilisation d'une Chaîne comme un Flottant"
-
-msgid "E893: Using a List as a Float"
-msgstr "E893: Utilisation d'une Liste comme un Flottant"
-
-msgid "E894: Using a Dictionary as a Float"
-msgstr "E894: Utilisation d'un Dictionnaire comme un Flottant"
-
-msgid "E907: Using a special value as a Float"
-msgstr "E907: Utilisation d'une valeur spéciale comme un Flottant"
-
-msgid "E911: Using a Job as a Float"
-msgstr "E911: Utilisation d'une Tâche comme un Flottant"
-
-msgid "E914: Using a Channel as a Float"
-msgstr "E914: Utilisation d'un Canal comme un Flottant"
-
-msgid "E975: Using a Blob as a Float"
-msgstr "E975: Utilisation d'un Blob comme un Flottant"
-
-msgid "E729: using Funcref as a String"
-msgstr "E729: Utilisation d'une Funcref comme une Chaîne"
-
-msgid "E730: using List as a String"
-msgstr "E730: Utilisation d'une Liste comme une Chaîne"
-
-msgid "E731: using Dictionary as a String"
-msgstr "E731: Utilisation d'un Dictionnaire comme une Chaîne"
-
-msgid "E976: using Blob as a String"
-msgstr "E976: Utilisation d'un Blob comme une Chaîne"
-
-msgid "E908: using an invalid value as a String"
-msgstr "E908: Utilisation d'une valeur invalide comme une Chaîne"
-
 msgid "E698: variable nested too deep for making a copy"
 msgstr "E698: variable trop imbriquée pour en faire une copie"
 
@@ -911,27 +809,6 @@
 "\n"
 "\tModifié la dernière fois dans "
 
-msgid " line "
-msgstr " ligne "
-
-msgid "E977: Can only compare Blob with Blob"
-msgstr "E977: Un Blob ne peut être comparé qu'avec un Blob"
-
-msgid "E691: Can only compare List with List"
-msgstr "E691: Une Liste ne peut être comparée qu'avec une Liste"
-
-msgid "E692: Invalid operation for List"
-msgstr "E692: Opération invalide avec les Liste"
-
-msgid "E735: Can only compare Dictionary with Dictionary"
-msgstr "E735: Un Dictionnaire ne peut être comparé qu'avec un Dictionnaire"
-
-msgid "E736: Invalid operation for Dictionary"
-msgstr "E736: Opération invalide avec les Dictionnaires"
-
-msgid "E694: Invalid operation for Funcrefs"
-msgstr "E694: Opération invalide avec les Funcrefs"
-
 msgid "E808: Number or Float required"
 msgstr "E808: Nombre ou Flottant requis"
 
@@ -984,41 +861,14 @@
 msgid "E727: Start past end"
 msgstr "E727: Début au-delà de la fin"
 
-msgid "E240: No connection to the X server"
-msgstr "E240: Pas de connexion au serveur X"
-
-# AB - La version française est meilleure que la version anglaise.
-#, c-format
-msgid "E241: Unable to send to %s"
-msgstr "E241: L'envoi au serveur %s a échoué"
-
-msgid "E277: Unable to read a server reply"
-msgstr "E277: Impossible de lire la réponse du serveur"
-
-msgid "E941: already started a server"
-msgstr "E941: serveur déjà démarré"
-
-msgid "E942: +clientserver feature not available"
-msgstr "E942: La fonctionnalité +clientserver n'est pas disponible"
-
-# AB - La version française est meilleure que la version anglaise.
-msgid "E258: Unable to send to client"
-msgstr "E258: La réponse n'a pas pu être envoyée au client"
-
 #, c-format
 msgid "E962: Invalid action: '%s'"
 msgstr "E962: Action invalide : « %s »"
 
-msgid "(Invalid)"
-msgstr "(Invalide)"
-
 #, c-format
 msgid "E935: invalid submatch number: %d"
 msgstr "E935: numéro de submatch invalide : %d"
 
-msgid "E18: Unexpected characters in :let"
-msgstr "E18: Caractères inattendus avant '='"
-
 msgid "E991: cannot use =<< here"
 msgstr "E991: Impossible d'utiliser =<< ici"
 
@@ -1032,8 +882,8 @@
 msgid "E990: Missing end marker '%s'"
 msgstr "E990: Marqueur de fin manquant « %s »"
 
-msgid "E985: .= is not supported with script version 2"
-msgstr "E985: .= non supporté avec la version de script 2"
+msgid "E985: .= is not supported with script version >= 2"
+msgstr "E985: .= non supporté avec la version de script >= 2"
 
 # DB - todo : trouver mieux que "destinations".
 msgid "E687: Less targets than List items"
@@ -1043,8 +893,8 @@
 msgid "E688: More targets than List items"
 msgstr "E688: Plus de destinations que d'éléments dans la Liste"
 
-msgid "Double ; in list of variables"
-msgstr "Double ; dans une liste de variables"
+msgid "E452: Double ; in list of variables"
+msgstr "E452: Double ; dans une liste de variables"
 
 #, c-format
 msgid "E738: Can't list variables for %s"
@@ -1053,9 +903,6 @@
 msgid "E996: Cannot lock an environment variable"
 msgstr "E996: Impossible de verrouiller une variable d'environnement"
 
-msgid "E996: Cannot lock an option"
-msgstr "E996: Impossible de verrouiller une option"
-
 msgid "E996: Cannot lock a register"
 msgstr "E996: Impossible de verrouiller un registre"
 
@@ -1063,10 +910,6 @@
 msgid "E108: No such variable: \"%s\""
 msgstr "E108: Variable inexistante : %s"
 
-#, c-format
-msgid "E940: Cannot lock or unlock variable %s"
-msgstr "E940: Impossible de (dé)verrouiller la variable %s"
-
 msgid "E743: variable nested too deep for (un)lock"
 msgstr "E743: variable trop imbriquée pour la (dé)verrouiller"
 
@@ -1290,51 +1133,6 @@
 msgid "Pattern not found: %s"
 msgstr "Motif introuvable : %s"
 
-# This message should *so* be E42!
-msgid "E478: Don't panic!"
-msgstr "E478: Pas de panique !"
-
-#, c-format
-msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661: Désolé, aucune aide en langue '%s' pour %s"
-
-#, c-format
-msgid "E149: Sorry, no help for %s"
-msgstr "E149: Désolé, aucune aide pour %s"
-
-#, c-format
-msgid "Sorry, help file \"%s\" not found"
-msgstr "Désolé, le fichier d'aide \"%s\" est introuvable"
-
-#, c-format
-msgid "E151: No match: %s"
-msgstr "E151: Aucune correspondance : %s"
-
-#, c-format
-msgid "E152: Cannot open %s for writing"
-msgstr "E152: Impossible d'ouvrir %s en écriture"
-
-#, c-format
-msgid "E153: Unable to open %s for reading"
-msgstr "E153: Impossible d'ouvrir %s en lecture"
-
-#, c-format
-msgid "E670: Mix of help file encodings within a language: %s"
-msgstr "E670: Encodages différents dans les fichiers d'aide en langue %s"
-
-# AB - L'étiquette la plus longue fait 27 caractères. Le nom de fichier le plus
-#      long fait 12 caractères. Il faudrait donc idéalement faire une
-#      traduction de 40 caractères ou moins. Ce qui est loin d'être le cas
-#      présent.
-# DB - Suggestion.
-#, c-format
-msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154: Marqueur \"%s\" dupliqué dans le fichier %s/%s"
-
-#, c-format
-msgid "E150: Not a directory: %s"
-msgstr "E150: %s n'est pas un répertoire"
-
 msgid "No old files"
 msgstr "Aucun vieux fichier"
 
@@ -1369,16 +1167,6 @@
 msgid "W21: Required python version 3.x not supported, ignoring file: %s"
 msgstr "W21: Python 3.x non supporté, fichier %s ignoré"
 
-# DB - Le premier %s est, au choix : "time ", "ctype " ou "messages ",
-#      sans qu'il soit possible de les traduire.
-#, c-format
-msgid "Current %slanguage: \"%s\""
-msgstr "Langue courante pour %s : \"%s\""
-
-#, c-format
-msgid "E197: Cannot set language to \"%s\""
-msgstr "E197: Impossible de choisir la langue \"%s\""
-
 msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
 msgstr "Mode Ex activé. Tapez \"visual\" pour passer en mode Normal."
 
@@ -1420,15 +1208,16 @@
 msgid "E494: Use w or w>>"
 msgstr "E494: Utilisez w ou w>>"
 
-msgid ""
-"INTERNAL: Cannot use EX_DFLALL with ADDR_NONE, ADDR_UNSIGNED or ADDR_QUICKFIX"
-msgstr ""
-"INTERNE: Impossible d'utiliser EX_DFLALL avec ADDR_NONE, ADDR_UNSIGNED ou ADDR_QUICKFIX"
-
 msgid "E943: Command table needs to be updated, run 'make cmdidxs'"
 msgstr ""
 "E943: La table des commandes doit être mise à jour, lancez 'make cmdidxs'"
 
+msgid ""
+"INTERNAL: Cannot use EX_DFLALL with ADDR_NONE, ADDR_UNSIGNED or ADDR_QUICKFIX"
+msgstr ""
+"INTERNE: Impossible d'utiliser EX_DFLALL avec ADDR_NONE, ADDR_UNSIGNED ou "
+"ADDR_QUICKFIX"
+
 msgid "E319: Sorry, the command is not available in this version"
 msgstr "E319: Désolé, cette commande n'est pas disponible dans cette version"
 
@@ -1616,15 +1405,6 @@
 msgid "E579: :if nesting too deep"
 msgstr "E579: Imbrication de :if trop importante"
 
-msgid "E580: :endif without :if"
-msgstr "E580: :endif sans :if"
-
-msgid "E581: :else without :if"
-msgstr "E581: :else sans :if"
-
-msgid "E582: :elseif without :if"
-msgstr "E582: :elseif sans :if"
-
 msgid "E583: multiple :else"
 msgstr "E583: Il ne peut y avoir qu'un seul :else"
 
@@ -1634,35 +1414,23 @@
 msgid "E585: :while/:for nesting too deep"
 msgstr "E585: Imbrication de :while ou :for trop importante"
 
-msgid "E586: :continue without :while or :for"
-msgstr "E586: :continue sans :while ou :for"
-
-msgid "E587: :break without :while or :for"
-msgstr "E587: :break sans :while ou :for"
-
 msgid "E732: Using :endfor with :while"
 msgstr "E732: Utilisation de :endfor avec :while"
 
 msgid "E733: Using :endwhile with :for"
 msgstr "E733: Utilisation de :endwhile avec :for"
 
+msgid "E579: block nesting too deep"
+msgstr "E579: Imbrication de bloc trop importante"
+
 msgid "E601: :try nesting too deep"
 msgstr "E601: Imbrication de :try trop importante"
 
-msgid "E603: :catch without :try"
-msgstr "E603: :catch sans :try"
-
 msgid "E604: :catch after :finally"
 msgstr "E604: :catch après :finally"
 
-msgid "E606: :finally without :try"
-msgstr "E606: :finally sans :try"
-
-msgid "E607: multiple :finally"
-msgstr "E607: Il ne peut y avoir qu'un seul :finally"
-
-msgid "E602: :endtry without :try"
-msgstr "E602: :endtry sans :try"
+msgid "E193: :enddef not inside a function"
+msgstr "E193: :enddef en dehors d'une fonction"
 
 msgid "E193: :endfunction not inside a function"
 msgstr "E193: :endfunction en dehors d'une fonction"
@@ -1776,10 +1544,10 @@
 msgstr[1] "%ld lignes, "
 
 #, c-format
-msgid "%lld character"
-msgid_plural "%lld characters"
-msgstr[0] "%lld caractère"
-msgstr[1] "%lld caractères"
+msgid "%lld byte"
+msgid_plural "%lld bytes"
+msgstr[0] "%lld octet"
+msgstr[1] "%lld octets"
 
 msgid "[noeol]"
 msgstr "[noeol]"
@@ -1867,6 +1635,9 @@
 msgid "E655: Too many symbolic links (cycle?)"
 msgstr "E655: Trop de liens symboliques (cycle ?)"
 
+msgid "writefile() first argument must be a List or a Blob"
+msgstr "le premier argument de writefile() doit être une Liste ou un Blob"
+
 # DB : Les trois messages qui suivent sont des titres de boîtes
 #      de dialogue par défaut.
 msgid "Select Directory dialog"
@@ -1881,6 +1652,9 @@
 msgid "E338: Sorry, no file browser in console mode"
 msgstr "E338: Désolé, pas de sélecteur de fichiers en mode console"
 
+msgid "no matches"
+msgstr "aucune correspondance"
+
 msgid "E854: path too long for completion"
 msgstr "E854: chemin trop long pour complètement"
 
@@ -1968,10 +1742,6 @@
 msgid "E599: Value of 'imactivatekey' is invalid"
 msgstr "E599: Valeur de 'imactivatekey' invalide"
 
-#, c-format
-msgid "E254: Cannot allocate color %s"
-msgstr "E254: Impossible d'allouer la couleur %s"
-
 msgid "No match at cursor, finding next"
 msgstr "Aucune correspondance sous le curseur, recherche de la suivante"
 
@@ -2006,15 +1776,15 @@
 msgid "E232: Cannot create BalloonEval with both message and callback"
 msgstr "E232: Impossible de créer un BalloonEval avec message ET callback"
 
-msgid "_Cancel"
-msgstr "_Annuler"
-
 msgid "_Save"
 msgstr "_Enregistrer"
 
 msgid "_Open"
 msgstr "_Ouvrir"
 
+msgid "_Cancel"
+msgstr "_Annuler"
+
 msgid "_OK"
 msgstr "_Ok"
 
@@ -2159,7 +1929,9 @@
 msgstr "E243: Argument non supporté : \"-%s\" ; Utilisez la version OLE."
 
 msgid "E988: GUI cannot be used. Cannot execute gvim.exe."
-msgstr "E988: L'interface graphique ne peut pas être utilisée. Impossible d'exécuter gvim.exe."
+msgstr ""
+"E988: L'interface graphique ne peut pas être utilisée. Impossible d'exécuter "
+"gvim.exe."
 
 msgid "E672: Unable to open window inside MDI application"
 msgstr "E672: Impossible d'ouvrir une fenêtre dans une application MDI"
@@ -2207,6 +1979,27 @@
 msgid "Font%d width: %d"
 msgstr "Largeur de Font%d : %d"
 
+msgid "E284: Cannot set IC values"
+msgstr "E284: Impossible de régler les valeurs IC"
+
+msgid "E285: Failed to create input context"
+msgstr "E285: Échec de la création du contexte de saisie"
+
+msgid "E286: Failed to open input method"
+msgstr "E286: Échec de l'ouverture de la méthode de saisie"
+
+msgid "E287: Warning: Could not set destroy callback to IM"
+msgstr ""
+"E287: Alerte : Impossible d'inscrire le callback de destruction dans la MS"
+
+msgid "E288: input method doesn't support any style"
+msgstr "E288: la méthode de saisie ne supporte aucun style"
+
+msgid "E289: input method doesn't support my preedit type"
+msgstr ""
+"E289: le type de préédition de Vim n'est pas supporté par la méthode de "
+"saisie"
+
 # DB - todo : Pas certain de mon coup, ici...
 msgid "Invalid font specification"
 msgstr "La spécification de la police est invalide"
@@ -2336,6 +2129,51 @@
 msgid "Print job sent."
 msgstr "Tâche d'impression envoyée."
 
+# This message should *so* be E42!
+msgid "E478: Don't panic!"
+msgstr "E478: Pas de panique !"
+
+#, c-format
+msgid "E661: Sorry, no '%s' help for %s"
+msgstr "E661: Désolé, aucune aide en langue '%s' pour %s"
+
+#, c-format
+msgid "E149: Sorry, no help for %s"
+msgstr "E149: Désolé, aucune aide pour %s"
+
+#, c-format
+msgid "Sorry, help file \"%s\" not found"
+msgstr "Désolé, le fichier d'aide \"%s\" est introuvable"
+
+#, c-format
+msgid "E151: No match: %s"
+msgstr "E151: Aucune correspondance : %s"
+
+#, c-format
+msgid "E152: Cannot open %s for writing"
+msgstr "E152: Impossible d'ouvrir %s en écriture"
+
+#, c-format
+msgid "E153: Unable to open %s for reading"
+msgstr "E153: Impossible d'ouvrir %s en lecture"
+
+#, c-format
+msgid "E670: Mix of help file encodings within a language: %s"
+msgstr "E670: Encodages différents dans les fichiers d'aide en langue %s"
+
+# AB - L'étiquette la plus longue fait 27 caractères. Le nom de fichier le plus
+#      long fait 12 caractères. Il faudrait donc idéalement faire une
+#      traduction de 40 caractères ou moins. Ce qui est loin d'être le cas
+#      présent.
+# DB - Suggestion.
+#, c-format
+msgid "E154: Duplicate tag \"%s\" in file %s/%s"
+msgstr "E154: Marqueur \"%s\" dupliqué dans le fichier %s/%s"
+
+#, c-format
+msgid "E150: Not a directory: %s"
+msgstr "E150: %s n'est pas un répertoire"
+
 msgid "E679: recursive loop loading syncolor.vim"
 msgstr "E679: boucle récursive lors du chargement de syncolor.vim"
 
@@ -2376,6 +2214,9 @@
 msgid "E420: BG color unknown"
 msgstr "E420: Couleur d'arrière-plan inconnue"
 
+msgid "E453: UL color unknown"
+msgstr "E453: Couleur d'UL inconnue"
+
 #, c-format
 msgid "E421: Color name or number not recognized: %s"
 msgstr "E421: Nom ou numéro de couleur non reconnu : %s"
@@ -2401,29 +2242,6 @@
 msgid "E849: Too many highlight and syntax groups"
 msgstr "E849: Trop de groupes de surbrillance et de syntaxe"
 
-#, c-format
-msgid "E799: Invalid ID: %d (must be greater than or equal to 1)"
-msgstr "E799: ID invalide : %d (doit être plus grand ou égal à 1)"
-
-#, c-format
-msgid "E801: ID already taken: %d"
-msgstr "E801: ID déjà pris : %d"
-
-msgid "E290: List or number required"
-msgstr "E290: Liste ou nombre requis"
-
-#, c-format
-msgid "E802: Invalid ID: %d (must be greater than or equal to 1)"
-msgstr "E802: ID invalide : %d (doit être plus grand ou égal à 1)"
-
-#, c-format
-msgid "E803: ID not found: %d"
-msgstr "E803: ID introuvable : %d"
-
-#, c-format
-msgid "E798: ID is reserved for \":match\": %d"
-msgstr "E798: ID est réservé pour \":match\" : %d"
-
 msgid "Add a new database"
 msgstr "Ajouter une base de données"
 
@@ -2939,6 +2757,23 @@
 msgid "match %d"
 msgstr "Correspondance %d"
 
+msgid "E920: _io file requires _name to be set"
+msgstr "E920: fichier _io nécessite _name"
+
+msgid "E915: in_io buffer requires in_buf or in_name to be set"
+msgstr "E915: tampon in_io nécessite in_buf ou in_name "
+
+#, c-format
+msgid "E918: buffer must be loaded: %s"
+msgstr "E918: le tampon doit être chargé : %s"
+
+msgid "E916: not a valid job"
+msgstr "E916: tâche invalide"
+
+#, c-format
+msgid "E491: json decode error at '%s'"
+msgstr "E491: Erreur de décodage json près de '%s'"
+
 #, c-format
 msgid "E938: Duplicate key in JSON: \"%s\""
 msgstr "E938: Clé dupliquée dans le document JSON : \"%s\""
@@ -2947,14 +2782,16 @@
 msgid "E899: Argument of %s must be a List or Blob"
 msgstr "E899: L'argument de %s doit être une Liste ou un Blob"
 
+msgid "E900: maxdepth must be non-negative number"
+msgstr "E900: maxdepth doit être un nombre positif"
+
+msgid "flatten() argument"
+msgstr "argument de flatten()"
+
 #, c-format
 msgid "E696: Missing comma in List: %s"
 msgstr "E696: Il manque une virgule dans la Liste %s"
 
-#, c-format
-msgid "E697: Missing end of List ']': %s"
-msgstr "E697: Il manque ']' à la fin de la Liste %s"
-
 msgid "sort() argument"
 msgstr "argument de sort()"
 
@@ -2970,6 +2807,9 @@
 msgid "map() argument"
 msgstr "argument de map()"
 
+msgid "mapnew() argument"
+msgstr "argument de mapnew()"
+
 msgid "filter() argument"
 msgstr "argument de filter()"
 
@@ -2985,6 +2825,16 @@
 msgid "reverse() argument"
 msgstr "argument de reverse()"
 
+# DB - Le premier %s est, au choix : "time ", "ctype " ou "messages ",
+#      sans qu'il soit possible de les traduire.
+#, c-format
+msgid "Current %slanguage: \"%s\""
+msgstr "Langue courante pour %s : \"%s\""
+
+#, c-format
+msgid "E197: Cannot set language to \"%s\""
+msgstr "E197: Impossible de choisir la langue \"%s\""
+
 msgid "Unknown option argument"
 msgstr "Option inconnue"
 
@@ -3405,25 +3255,6 @@
 msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
 msgstr "--windowid <HWND>\tOuvrir Vim dans un autre widget win32"
 
-msgid "No display"
-msgstr "Aucun display"
-
-msgid ": Send failed.\n"
-msgstr " : L'envoi a échoué.\n"
-
-msgid ": Send failed. Trying to execute locally\n"
-msgstr " : L'envoi a échoué. Tentative d'exécution locale\n"
-
-#, c-format
-msgid "%d of %d edited"
-msgstr "%d édités sur %d"
-
-msgid "No display: Send expression failed.\n"
-msgstr "Aucun display : L'envoi de l'expression a échoué.\n"
-
-msgid ": Send expression failed.\n"
-msgstr " : L'envoi de l'expression a échoué.\n"
-
 #, c-format
 msgid "E224: global abbreviation already exists for %s"
 msgstr "E224: une abréviation globale existe déjà pour %s"
@@ -3449,6 +3280,9 @@
 msgid "E228: makemap: Illegal mode"
 msgstr "E228: makemap : mode invalide"
 
+msgid "E460: entries missing in mapset() dict argument"
+msgstr "E460: entrées manquantes dans l'argument dict de mapset()"
+
 #, c-format
 msgid "E357: 'langmap': Matching character missing for %s"
 msgstr "E357: 'langmap' : Aucun caractère correspondant pour %s"
@@ -3485,30 +3319,32 @@
 "\n"
 "modif  ligne col fichier/texte"
 
+#, c-format
+msgid "E799: Invalid ID: %d (must be greater than or equal to 1)"
+msgstr "E799: ID invalide : %d (doit être plus grand ou égal à 1)"
+
+#, c-format
+msgid "E801: ID already taken: %d"
+msgstr "E801: ID déjà pris : %d"
+
+msgid "E290: List or number required"
+msgstr "E290: Liste ou nombre requis"
+
+#, c-format
+msgid "E802: Invalid ID: %d (must be greater than or equal to 1)"
+msgstr "E802: ID invalide : %d (doit être plus grand ou égal à 1)"
+
+#, c-format
+msgid "E803: ID not found: %d"
+msgstr "E803: ID introuvable : %d"
+
+#, c-format
+msgid "E798: ID is reserved for \":match\": %d"
+msgstr "E798: ID est réservé pour \":match\" : %d"
+
 msgid "E543: Not a valid codepage"
 msgstr "E543: Page de codes non valide"
 
-msgid "E284: Cannot set IC values"
-msgstr "E284: Impossible de régler les valeurs IC"
-
-msgid "E285: Failed to create input context"
-msgstr "E285: Échec de la création du contexte de saisie"
-
-msgid "E286: Failed to open input method"
-msgstr "E286: Échec de l'ouverture de la méthode de saisie"
-
-msgid "E287: Warning: Could not set destroy callback to IM"
-msgstr ""
-"E287: Alerte : Impossible d'inscrire le callback de destruction dans la MS"
-
-msgid "E288: input method doesn't support any style"
-msgstr "E288: la méthode de saisie ne supporte aucun style"
-
-msgid "E289: input method doesn't support my preedit type"
-msgstr ""
-"E289: le type de préédition de Vim n'est pas supporté par la méthode de "
-"saisie"
-
 msgid "E293: block was not locked"
 msgstr "E293: le bloc n'était pas verrouillé"
 
@@ -3715,12 +3551,17 @@
 
 msgid ""
 "\n"
-"You may want to delete the .swp file now.\n"
-"\n"
+"You may want to delete the .swp file now."
 msgstr ""
 "\n"
-"Il est conseillé d'effacer maintenant le fichier .swp.\n"
+"Il est conseillé d'effacer maintenant le fichier .swp."
+
+msgid ""
 "\n"
+"Note: process STILL RUNNING: "
+msgstr ""
+"\n"
+"Note : processus EN COURS D'EXECUTION : "
 
 msgid "Using crypt key from swap file for the text file.\n"
 msgstr ""
@@ -3742,9 +3583,6 @@
 msgid "      -- none --\n"
 msgstr "     -- aucun --\n"
 
-msgid "%a %b %d %H:%M:%S %Y"
-msgstr "%a %b %d %H:%M:%S %Y"
-
 msgid "          owned by: "
 msgstr "      propriété de : "
 
@@ -4030,6 +3868,10 @@
 msgstr "E337: Menu introuvable - vérifiez les noms des menus"
 
 #, c-format
+msgid "Error detected while compiling %s:"
+msgstr "Erreur détectée lors de la compilation %s"
+
+#, c-format
 msgid "Error detected while processing %s:"
 msgstr "Erreur détectée en traitant %s :"
 
@@ -4094,11 +3936,12 @@
 msgid "E767: Too many arguments to printf()"
 msgstr "E767: Trop d'arguments pour printf()"
 
-msgid "Type number and <Enter> or click with mouse (empty cancels): "
-msgstr "Tapez un nombre et <Entrée> ou cliquez avec la souris (rien annule) :"
+msgid "Type number and <Enter> or click with the mouse (q or empty cancels): "
+msgstr ""
+"Tapez un nombre et <Entrée> ou cliquez avec la souris (q ou rien annule) :"
 
-msgid "Type number and <Enter> (empty cancels): "
-msgstr "Tapez un nombre et <Entrée> (rien annule) :"
+msgid "Type number and <Enter> (q or empty cancels): "
+msgstr "Tapez un nombre et <Entrée> (q ou rien annule) :"
 
 #, c-format
 msgid "%ld more line"
@@ -4121,12 +3964,6 @@
 msgid "E677: Error writing temp file"
 msgstr "E677: Erreur lors de l'écriture du fichier temporaire"
 
-#, c-format
-msgid "%ld second ago"
-msgid_plural "%ld seconds ago"
-msgstr[0] "il y a %ld seconde"
-msgstr[1] "il y a %ld secondes"
-
 msgid "ERROR: "
 msgstr "ERREUR : "
 
@@ -4245,6 +4082,12 @@
 msgstr[1] "%ld lignes modifiées"
 
 #, c-format
+msgid "%d line changed"
+msgid_plural "%d lines changed"
+msgstr[0] "%d ligne modifiée"
+msgstr[1] "%d lignes modifiées"
+
+#, c-format
 msgid "%ld Cols; "
 msgstr "%ld Colonnes ; "
 
@@ -4295,7 +4138,8 @@
 msgstr "E520: Non autorisé dans une ligne de mode"
 
 msgid "E992: Not allowed in a modeline when 'modelineexpr' is off"
-msgstr "E992: Non autorisé dans une ligne de mode avec 'modelineexpr' désélectionnée"
+msgstr ""
+"E992: Non autorisé dans une ligne de mode avec 'modelineexpr' désélectionnée"
 
 msgid "E846: Key code not set"
 msgstr "E846: Le code de touche n'est pas configuré"
@@ -4380,7 +4224,6 @@
 msgid "E540: Unclosed expression sequence"
 msgstr "E540: '}' manquant"
 
-
 msgid "E542: unbalanced groups"
 msgstr "E542: parenthèses non équilibrées"
 
@@ -4426,7 +4269,8 @@
 msgstr "E528: Une valeur ' doit être spécifiée"
 
 msgid "E595: 'showbreak' contains unprintable or wide character"
-msgstr "E595: 'showbreak' contient des caractères à largeur double ou non imprimables"
+msgstr ""
+"E595: 'showbreak' contient des caractères à largeur double ou non imprimables"
 
 msgid "E596: Invalid font(s)"
 msgstr "E596: Police(s) invalide(s)"
@@ -4681,8 +4525,11 @@
 msgid "shell returned %d"
 msgstr "le shell a retourné %d"
 
-msgid "E278: Cannot put a terminal buffer in a popup window"
-msgstr "E278: Impossible de mettre un tampon de terminal dans une fenêtre contextuelle"
+msgid "E861: Cannot open a second popup with a terminal"
+msgstr "E861: Impossible d'ouvrir une seconde fenêtre contextuelle avec un terminal"
+
+msgid "E450: buffer number, text or a list required"
+msgstr "E450: numéro de tampon, texte ou une liste requis"
 
 #, c-format
 msgid "E997: Tabpage not found: %d"
@@ -4695,16 +4542,21 @@
 msgid "E994: Not allowed in a popup window"
 msgstr "E994: Opération interdite dans une fenêtre contextuelle"
 
+msgid "E863: Not allowed for a terminal in a popup window"
+msgstr "E863: Opération interdite pour un terminal  dans une fenêtre contextuelle"
+
 msgid "E750: First use \":profile start {fname}\""
 msgstr "E750: Utilisez d'abord \":profile start {nomfichier}\""
 
 msgid "E553: No more items"
 msgstr "E553: Plus d'éléments"
 
+msgid "E925: Current quickfix list was changed"
+msgstr "E925: La liste quickfix courante a changé"
+
 msgid "E926: Current location list was changed"
 msgstr "E926: La liste d'emplacements courante a changé"
 
-#, c-format
 msgid "E372: Too many %%%c in format string"
 msgstr "E372: Trop de %%%c dans la chaîne de format"
 
@@ -4736,9 +4588,6 @@
 msgid "E924: Current window was closed"
 msgstr "E924: La fenêtre courante doit être fermée"
 
-msgid "E925: Current quickfix was changed"
-msgstr "E925: Le quickfix courant a changé"
-
 #, c-format
 msgid "(%d of %d)%s%s: "
 msgstr "(%d sur %d)%s%s : "
@@ -4769,6 +4618,9 @@
 msgid "Cannot open file \"%s\""
 msgstr "Impossible d'ouvrir le fichier \"%s\""
 
+msgid "cannot have both a list and a \"what\" argument"
+msgstr "impossible d'avoir une liste et un argument \"what\" en même temps"
+
 msgid "E681: Buffer is not loaded"
 msgstr "E681: le tampon n'est pas chargé"
 
@@ -4823,6 +4675,10 @@
 msgstr "E956: Impossible d'utiliser le motif récursivement"
 
 #, c-format
+msgid "E654: missing delimiter after search pattern: %s"
+msgstr "E654: il manque un délimiteur après le motif de recherche : %s"
+
+#, c-format
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554: Erreur de syntaxe dans %s{...}"
 
@@ -4904,13 +4760,13 @@
 msgid "E877: (NFA regexp) Invalid character class: %d"
 msgstr "E877: (regexp NFA) Classe de caractère invalide : %d"
 
+msgid "E951: \\% value too large"
+msgstr "E951: valeur \\% trop grande"
+
 #, c-format
 msgid "E867: (NFA) Unknown operator '\\z%c'"
 msgstr "E867: (NFA) Opérateur inconnu '\\z%c'"
 
-msgid "E951: \\% value too large"
-msgstr "E951: valeur \\% trop grande"
-
 #, c-format
 msgid "E867: (NFA) Unknown operator '\\%%%c'"
 msgstr "E867: (NFA) Opérateur inconnu '\\%%%c'"
@@ -5259,9 +5115,6 @@
 msgid " (not supported)"
 msgstr " (non supporté)"
 
-msgid "E756: Spell checking is not enabled"
-msgstr "E756: La vérification orthographique n'est pas activée"
-
 #, c-format
 msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
 msgstr "Alerte : Liste de mots \"%s_%s.spl\" ou \"%s_ascii.spl\" introuvable"
@@ -5509,32 +5362,36 @@
 msgstr "Lecture de la liste de mots %s..."
 
 #, c-format
-msgid "Duplicate /encoding= line ignored in %s line %d: %s"
-msgstr "Ligne /encoding= en double ignorée dans %s ligne %d : %s"
+msgid "Conversion failure for word in %s line %ld: %s"
+msgstr "Échec de conversion du mot dans %s ligne %ld : %s"
 
 #, c-format
-msgid "/encoding= line after word ignored in %s line %d: %s"
-msgstr "Ligne /encoding= après des mots ignorée dans %s ligne %d : %s"
+msgid "Duplicate /encoding= line ignored in %s line %ld: %s"
+msgstr "Ligne /encoding= en double ignorée dans %s ligne %ld : %s"
 
 #, c-format
-msgid "Duplicate /regions= line ignored in %s line %d: %s"
-msgstr "Ligne /regions= en double ignorée dans %s ligne %d : %s"
+msgid "/encoding= line after word ignored in %s line %ld: %s"
+msgstr "Ligne /encoding= après des mots ignorée dans %s ligne %ld : %s"
 
 #, c-format
-msgid "Too many regions in %s line %d: %s"
-msgstr "Trop de régions dans %s ligne %d : %s"
+msgid "Duplicate /regions= line ignored in %s line %ld: %s"
+msgstr "Ligne /regions= en double ignorée dans %s ligne %ld : %s"
 
 #, c-format
-msgid "/ line ignored in %s line %d: %s"
-msgstr "Ligne / ignorée dans %s ligne %d : %s"
+msgid "Too many regions in %s line %ld: %s"
+msgstr "Trop de régions dans %s ligne %ld : %s"
 
 #, c-format
-msgid "Invalid region nr in %s line %d: %s"
-msgstr "Numéro de région invalide dans %s ligne %d : %s"
+msgid "/ line ignored in %s line %ld: %s"
+msgstr "Ligne / ignorée dans %s ligne %ld : %s"
 
 #, c-format
-msgid "Unrecognized flags in %s line %d: %s"
-msgstr "Drapeaux non reconnus dans %s ligne %d : %s"
+msgid "Invalid region nr in %s line %ld: %s"
+msgstr "Numéro de région invalide dans %s ligne %ld : %s"
+
+#, c-format
+msgid "Unrecognized flags in %s line %ld: %s"
+msgstr "Drapeaux non reconnus dans %s ligne %ld : %s"
 
 #, c-format
 msgid "Ignored %d words with non-ASCII characters"
@@ -5544,8 +5401,8 @@
 msgstr "E845: mémoire insuffisante, liste de mots peut-être incomplète"
 
 #, c-format
-msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
-msgstr "%d noeuds compressés sur %d ; %d (%d%%) restants "
+msgid "Compressed %s: %ld of %ld nodes; %ld (%ld%%) remaining"
+msgstr "Compressé %s : %ld/%ld noeuds ; %ld (%ld%%) restants"
 
 msgid "Reading back spell file..."
 msgstr "Relecture du fichier orthographique"
@@ -5626,6 +5483,10 @@
 msgid " < \"%.*s\""
 msgstr " < \"%.*s\""
 
+#, c-format
+msgid "E390: Illegal argument: %s"
+msgstr "E390: Argument invalide : %s"
+
 msgid "No Syntax items defined for this buffer"
 msgstr "Aucun élément de syntaxe défini pour ce tampon"
 
@@ -5638,22 +5499,12 @@
 msgid "syntax conceal off"
 msgstr "\"syntax conceal\" désactivée"
 
-#, c-format
-msgid "E390: Illegal argument: %s"
-msgstr "E390: Argument invalide : %s"
-
 msgid "syntax case ignore"
 msgstr "syntaxe ignore la casse"
 
 msgid "syntax case match"
 msgstr "syntaxe respecte la casse"
 
-msgid "syntax spell toplevel"
-msgstr "contrôle orthographique dans le texte sans groupe syntaxique"
-
-msgid "syntax spell notoplevel"
-msgstr "pas de contrôle orthographique dans le texte sans groupe syntaxique"
-
 msgid "syntax spell default"
 msgstr ""
 "contrôle orthographique dans le texte sans groupe syntaxique, sauf si @Spell/"
@@ -5675,9 +5526,11 @@
 msgid "no syncing"
 msgstr "Aucune synchronisation"
 
-# DB - Les deux messages qui suivent vont ensemble.
+msgid "syncing starts at the first line"
+msgstr "la synchronisation débute à la première ligne"
+
 msgid "syncing starts "
-msgstr "La synchronisation débute "
+msgstr "la synchronisation débute "
 
 msgid " lines before top line"
 msgstr " lignes avant la ligne du haut"
@@ -5707,6 +5560,9 @@
 msgid "E392: No such syntax cluster: %s"
 msgstr "E392: Aucune grappe de syntaxe %s"
 
+msgid "from the first line"
+msgstr "à partir de la première ligne"
+
 msgid "minimal "
 msgstr "minimum "
 
@@ -5987,7 +5843,8 @@
 msgstr "E965: nom du type de propriété absent"
 
 msgid "E275: Cannot add text property to unloaded buffer"
-msgstr "E275: Impossible d'ajouter des propriétés de texte à un tampon déchargé"
+msgstr ""
+"E275: Impossible d'ajouter des propriétés de texte à un tampon déchargé"
 
 msgid "E967: text property info corrupted"
 msgstr "E967: information de propriété de texte corrompu"
@@ -5995,6 +5852,9 @@
 msgid "E968: Need at least one of 'id' or 'type'"
 msgstr "E968: Au moins « id » ou « type » sont nécessaires"
 
+msgid "E860: Need 'id' and 'type' with 'both'"
+msgstr "E860: 'id' et 'type' requis avec 'both'"
+
 #, c-format
 msgid "E969: Property type %s already defined"
 msgstr "E969: Type de propriété %s déjà défini"
@@ -6003,16 +5863,127 @@
 msgid "E970: Unknown highlight group name: '%s'"
 msgstr "E970: Nom de groupe de surbrillance inconnu : « %s »"
 
+msgid "(Invalid)"
+msgstr "(Invalide)"
+
+msgid "%a %b %d %H:%M:%S %Y"
+msgstr "%a %b %d %H:%M:%S %Y"
+
+#, c-format
+msgid "%ld second ago"
+msgid_plural "%ld seconds ago"
+msgstr[0] "il y a %ld seconde"
+msgstr[1] "il y a %ld secondes"
+
+msgid "E805: Using a Float as a Number"
+msgstr "E805: Utilisation d'un Flottant comme un Nombre"
+
+msgid "E703: Using a Funcref as a Number"
+msgstr "E703: Utilisation d'une Funcref comme un Nombre"
+
+msgid "E745: Using a List as a Number"
+msgstr "E745: Utilisation d'une Liste comme un Nombre"
+
+msgid "E728: Using a Dictionary as a Number"
+msgstr "E728: Utilisation d'un Dictionnaire comme un Nombre"
+
+msgid "E611: Using a Special as a Number"
+msgstr "E611: Utilisation d'une valeur Spéciale comme Nombre"
+
+msgid "E910: Using a Job as a Number"
+msgstr "E910: Utilisation d'une Tâche comme un Nombre"
+
+msgid "E913: Using a Channel as a Number"
+msgstr "E913: Utilisation d'un Canal comme un Nombre"
+
+msgid "E974: Using a Blob as a Number"
+msgstr "E974: Utilisation d'un Blob comme un Nombre"
+
+msgid "E891: Using a Funcref as a Float"
+msgstr "E891: Utilisation d'une Funcref comme un Flottant"
+
+msgid "E892: Using a String as a Float"
+msgstr "E892: Utilisation d'une Chaîne comme un Flottant"
+
+msgid "E893: Using a List as a Float"
+msgstr "E893: Utilisation d'une Liste comme un Flottant"
+
+msgid "E894: Using a Dictionary as a Float"
+msgstr "E894: Utilisation d'un Dictionnaire comme un Flottant"
+
+msgid "E362: Using a boolean value as a Float"
+msgstr "E362: Utilisation d'une valeur Booléenne comme un Flottant"
+
+msgid "E907: Using a special value as a Float"
+msgstr "E907: Utilisation d'une valeur spéciale comme un Flottant"
+
+msgid "E911: Using a Job as a Float"
+msgstr "E911: Utilisation d'une Tâche comme un Flottant"
+
+msgid "E914: Using a Channel as a Float"
+msgstr "E914: Utilisation d'un Canal comme un Flottant"
+
+msgid "E975: Using a Blob as a Float"
+msgstr "E975: Utilisation d'un Blob comme un Flottant"
+
+msgid "E729: using Funcref as a String"
+msgstr "E729: Utilisation d'une Funcref comme une Chaîne"
+
+msgid "E730: using List as a String"
+msgstr "E730: Utilisation d'une Liste comme une Chaîne"
+
+msgid "E731: using Dictionary as a String"
+msgstr "E731: Utilisation d'un Dictionnaire comme une Chaîne"
+
+msgid "E976: using Blob as a String"
+msgstr "E976: Utilisation d'un Blob comme une Chaîne"
+
+msgid "E977: Can only compare Blob with Blob"
+msgstr "E977: Un Blob ne peut être comparé qu'avec un Blob"
+
+msgid "E691: Can only compare List with List"
+msgstr "E691: Une Liste ne peut être comparée qu'avec une Liste"
+
+msgid "E692: Invalid operation for List"
+msgstr "E692: Opération invalide avec les Liste"
+
+msgid "E735: Can only compare Dictionary with Dictionary"
+msgstr "E735: Un Dictionnaire ne peut être comparé qu'avec un Dictionnaire"
+
+msgid "E736: Invalid operation for Dictionary"
+msgstr "E736: Opération invalide avec les Dictionnaires"
+
+msgid "E694: Invalid operation for Funcrefs"
+msgstr "E694: Opération invalide avec les Funcrefs"
+
+# AB - La version française est meilleure que la version anglaise.
+#, c-format
+msgid "E112: Option name missing: %s"
+msgstr "E112: Il manque un nom d'option après %s"
+
+msgid "E973: Blob literal should have an even number of hex characters"
+msgstr ""
+"E973: Un littéral de Blob doit avoir un nombre pair de caractères "
+"hexadécimaux"
+
+# AB - La version française est meilleure que la version anglaise, qui est
+#      erronée, d'ailleurs : il s'agit d'une "double quote" et non d'une
+#      "quote".
+#, c-format
+msgid "E114: Missing quote: %s"
+msgstr "E114: Il manque \" à la fin de %s"
+
+# AB - La version française est meilleure que la version anglaise.
+#, c-format
+msgid "E115: Missing quote: %s"
+msgstr "E115: Il manque ' à la fin de %s"
+
 msgid "new shell started\n"
 msgstr "nouveau shell démarré\n"
 
 msgid "Vim: Error reading input, exiting...\n"
 msgstr "Vim : Erreur lors de la lecture de l'entrée, sortie...\n"
 
-# DB - Message de débogage.
-msgid "Used CUT_BUFFER0 instead of empty selection"
-msgstr "CUT_BUFFER0 utilisé plutôt qu'une sélection vide"
-
 msgid "E881: Line count changed unexpectedly"
 msgstr "E881: Le nombre de lignes a été changé inopinément"
 
@@ -6233,7 +6204,13 @@
 msgstr "E853: Nom d'argument dupliqué : %s"
 
 msgid "E989: Non-default argument follows default argument"
-msgstr "E989: Argument sans valeur par défaut ne peut pas suivre un argument avec valeur par défaut"
+msgstr ""
+"E989: Argument sans valeur par défaut ne peut pas suivre un argument avec "
+"valeur par défaut"
+
+#, c-format
+msgid "E451: Expected }: %s"
+msgstr "E451: signe } attendu : %s"
 
 #, c-format
 msgid "E740: Too many arguments for function %s"
@@ -6273,22 +6250,10 @@
 msgstr "E699: Trop d'arguments"
 
 #, c-format
-msgid "E117: Unknown function: %s"
-msgstr "E117: Fonction inconnue : %s"
-
-#, c-format
 msgid "E276: Cannot use function as a method: %s"
 msgstr "E276: Impossible d'utiliser une fonction comme méthode : %s"
 
 #, c-format
-msgid "E933: Function was deleted: %s"
-msgstr "E933: La fonction a été effacée : %s"
-
-#, c-format
-msgid "E119: Not enough arguments for function: %s"
-msgstr "E119: La fonction %s n'a pas reçu assez d'arguments"
-
-#, c-format
 msgid "E120: Using <SID> not in a script context: %s"
 msgstr "E120: <SID> utilisé en dehors d'un script : %s"
 
@@ -6310,6 +6275,9 @@
 "E884: Le nom de la fonction ne peut pas contenir le caractère deux-points : "
 "%s"
 
+msgid "E454: function list was modified"
+msgstr "E454: la liste de fonctions a été modifiée"
+
 #, c-format
 msgid "E123: Undefined function: %s"
 msgstr "E123: Fonction non définie : %s"
@@ -6333,6 +6301,10 @@
 msgstr "E126: Il manque :endfunction"
 
 #, c-format
+msgid "W1001: Text found after :enddef: %s"
+msgstr "W1001: Texte trouvé après :enddef : %s"
+
+#, c-format
 msgid "W22: Text found after :endfunction: %s"
 msgstr "W22: Texte trouvé après :endfunction : %s"
 
@@ -6513,18 +6485,15 @@
 msgid "with X11-Athena GUI."
 msgstr "avec interface graphique X11-Athena."
 
+msgid "with Haiku GUI."
+msgstr "avec interface graphique Haiku."
+
 msgid "with Photon GUI."
 msgstr "avec interface graphique Photon."
 
 msgid "with GUI."
 msgstr "avec une interface graphique."
 
-msgid "with Carbon GUI."
-msgstr "avec interface graphique Carbon."
-
-msgid "with Cocoa GUI."
-msgstr "avec interface graphique Cocoa."
-
 msgid "  Features included (+) or not (-):\n"
 msgstr "  Fonctionnalités incluses (+) ou non (-) :\n"
 
@@ -6535,16 +6504,16 @@
 msgstr "     fichier vimrc utilisateur : \""
 
 msgid " 2nd user vimrc file: \""
-msgstr " 2me fichier vimrc utilisateur : \""
+msgstr "  2e fichier vimrc utilisateur : \""
 
 msgid " 3rd user vimrc file: \""
-msgstr " 3me fichier vimrc utilisateur : \""
+msgstr "  3e fichier vimrc utilisateur : \""
 
 msgid "      user exrc file: \""
 msgstr "      fichier exrc utilisateur : \""
 
 msgid "  2nd user exrc file: \""
-msgstr "  2me fichier exrc utilisateur : \""
+msgstr "   2e fichier exrc utilisateur : \""
 
 msgid "  system gvimrc file: \""
 msgstr "        fichier gvimrc système : \""
@@ -6553,10 +6522,10 @@
 msgstr "    fichier gvimrc utilisateur : \""
 
 msgid "2nd user gvimrc file: \""
-msgstr "2me fichier gvimrc utilisateur : \""
+msgstr " 2e fichier gvimrc utilisateur : \""
 
 msgid "3rd user gvimrc file: \""
-msgstr "3me fichier gvimrc utilisateur : \""
+msgstr " 3e fichier gvimrc utilisateur : \""
 
 msgid "       defaults file: \""
 msgstr " fichier de valeurs par défaut : \""
@@ -6657,6 +6626,21 @@
 msgid "menu  Help->Sponsor/Register  for information    "
 msgstr "menu  Aide->Sponsor/Enregistrement pour plus d'info"
 
+msgid "[end of lines]"
+msgstr "[fin des lignes]"
+
+msgid "global"
+msgstr "global"
+
+msgid "buffer"
+msgstr "tampon"
+
+msgid "window"
+msgstr "fenêtre"
+
+msgid "tab"
+msgstr "onglet"
+
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -6807,8 +6791,8 @@
 # DB - ... dont les valeurs possibles sont les messages
 #      qui suivent.
 #, c-format
-msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "Lecture du fichier viminfo \"%s\"%s%s%s"
+msgid "Reading viminfo file \"%s\"%s%s%s%s"
+msgstr "Lecture du fichier viminfo \"%s\"%s%s%s%s"
 
 # AB - Ce texte fait partie d'un message de débogage.
 # DB - Voir ci-dessus.
@@ -6883,9 +6867,6 @@
 msgid "E444: Cannot close last window"
 msgstr "E444: Impossible de fermer la dernière fenêtre"
 
-msgid "E813: Cannot close autocmd or popup window"
-msgstr "E813: Impossible de fermer la fenêtre des autocommandes ou contextuelle"
-
 msgid "E814: Cannot close window, only autocmd window would remain"
 msgstr ""
 "E814: Impossible de fermer la fenêtre, seule la fenêtre des autocommandes "
@@ -6894,6 +6875,9 @@
 msgid "E445: Other window contains changes"
 msgstr "E445: Les modifications de l'autre fenêtre n'ont pas été enregistrées"
 
+msgid "E366: Not allowed to enter a popup window"
+msgstr "E366: Interdit d'entrer dans une fenêtre contextuelle"
+
 #, c-format
 msgid "E370: Could not load library %s"
 msgstr "E370: Impossible de charger la bibliothèque %s"
@@ -6938,7 +6922,356 @@
 msgid "Path length too long!"
 msgstr "Le chemin est trop long !"
 
-# msgstr "--Pas de lignes dans le tampon--"
+#, c-format
+msgid "E121: Undefined variable: %s"
+msgstr "E121: Variable non définie : %s"
+
+#, c-format
+msgid "E121: Undefined variable: %c:%s"
+msgstr "E121: Variable non définie : %c:%s"
+
+msgid "E476: Invalid command"
+msgstr "E476: Commande invalide"
+
+#, c-format
+msgid "E476: Invalid command: %s"
+msgstr "E476: Commande invalide : %s"
+
+msgid "E710: List value has more items than targets"
+msgstr "E710: La Liste a plus d'éléments que la destination"
+
+msgid "E711: List value does not have enough items"
+msgstr "E711: La Liste n'a pas assez d'éléments"
+
+msgid "E719: Cannot slice a Dictionary"
+msgstr "E719: Utilisation de [:] impossible avec un Dictionnaire"
+
+msgid ""
+"E856: \"assert_fails()\" second argument must be a string or a list with one "
+"or two strings"
+msgstr "E856: le second argument d'\"assert_fails()\" doit être une chaîne ou une liste avec une ou deux chaînes"
+
+msgid "E909: Cannot index a special variable"
+msgstr "E909: Impossible d'indexer une variable spéciale"
+
+#, c-format
+msgid "E1100: Missing :var: %s"
+msgstr "E1100: Il manque :var: %s"
+
+#, c-format
+msgid "E1001: Variable not found: %s"
+msgstr "E1001: Variable introuvable: %s"
+
+#, c-format
+msgid "E1002: Syntax error at %s"
+msgstr "E1002: Erreur de syntaxe dans %s"
+
+msgid "E1003: Missing return value"
+msgstr "E1003: Valeur de retour manquante"
+
+#, c-format
+msgid "E1004: White space required before and after '%s'"
+msgstr "E1004: Espace requise avant et après '%s'"
+
+msgid "E1005: Too many argument types"
+msgstr "E1005: Trop de types d'arguments"
+
+#, c-format
+msgid "E1006: %s is used as an argument"
+msgstr "E1006: %s est utilisé comme argument"
+
+msgid "E1007: Mandatory argument after optional argument"
+msgstr "E1007: Argument obligatoire après un argument optionnel"
+
+msgid "E1008: Missing <type>"
+msgstr "E1008: <type> manquant"
+
+msgid "E1009: Missing > after type"
+msgstr "E1009: Il manque > après type"
+
+#, c-format
+msgid "E1010: Type not recognized: %s"
+msgstr "E1010: Type non reconnu : %s"
+
+#, c-format
+msgid "E1011: Name too long: %s"
+msgstr "E1011: Nom trop long : %s"
+
+#, c-format
+msgid "E1012: Type mismatch; expected %s but got %s"
+msgstr "E1012: Type inconsistant ; attendu %s mais reçu %s"
+
+#, c-format
+msgid "E1013: Argument %d: type mismatch, expected %s but got %s"
+msgstr "E1013: Argument %d : type inconsistant, attendu %s mais reçu %s"
+
+#, c-format
+msgid "E1014: Invalid key: %s"
+msgstr "E1014: clé invalide : %s"
+
+#, c-format
+msgid "E1015: Name expected: %s"
+msgstr "E1015: Nom attendu : %s"
+
+#, c-format
+msgid "E1016: Cannot declare a %s variable: %s"
+msgstr "E1016: Impossible de déclarer variable %s : %s"
+
+#, c-format
+msgid "E1016: Cannot declare an environment variable: %s"
+msgstr "E1016: Impossible de déclarer une variable d'environnement : %s"
+
+#, c-format
+msgid "E1017: Variable already declared: %s"
+msgstr "E1017: Variable déjà déclarée : %s"
+
+#, c-format
+msgid "E1018: Cannot assign to a constant: %s"
+msgstr "E1018: Impossible d'assigner à une constante : %s"
+
+msgid "E1019: Can only concatenate to string"
+msgstr "E1019: Seules les chaînes peuvent être concaténées"
+
+#, c-format
+msgid "E1020: Cannot use an operator on a new variable: %s"
+msgstr "E1020: Impossible d'utiliser un opérateur sur une nouvelle variable : %s"
+
+msgid "E1021: Const requires a value"
+msgstr "E1021: Const nécessite une valeur"
+
+msgid "E1022: Type or initialization required"
+msgstr "E1022: Type ou initialisation requis"
+
+#, c-format
+msgid "E1023: Using a Number as a Bool: %d"
+msgstr "E1023: Utilisation d'un Nombre comme un Booléen : %d"
+
+msgid "E1024: Using a Number as a String"
+msgstr "E1024: Utilisation d'un Nombre comme une Chaîne"
+
+msgid "E1025: Using } outside of a block scope"
+msgstr "E1025: Utilisation de } hors d'un bloc de portée"
+
+msgid "E1026: Missing }"
+msgstr "E1026: } manquant"
+
+msgid "E1027: Missing return statement"
+msgstr "E1027: commande 'return' manquante"
+
+msgid "E1028: Compiling :def function failed"
+msgstr "E1028: Compilation de function :def a échoué"
+
+#, c-format
+msgid "E1029: Expected %s but got %s"
+msgstr "E1029: %s attendu mais %s reçu"
+
+#, c-format
+msgid "E1030: Using a String as a Number: \"%s\""
+msgstr "E1030: Utilisation d'une Chaîne comme Nombre : \"%s\""
+
+msgid "E1031: Cannot use void value"
+msgstr "E1031: Impossible d'utiliser une valeur 'void'"
+
+msgid "E1032: Missing :catch or :finally"
+msgstr "E1032: :catch ou :finally manquant"
+
+#, c-format
+msgid "E1034: Cannot use reserved name %s"
+msgstr "E1034: Impossible d'utiliser le nom réservé %s"
+
+msgid "E1035: % requires number arguments"
+msgstr "E1035: % nécessite des arguments numériques"
+
+#, c-format
+msgid "E1036: %c requires number or float arguments"
+msgstr "E1036: %c nécessite des arguments numériques ou flottants"
+
+#, c-format
+msgid "E1037: Cannot use \"%s\" with %s"
+msgstr "E1037: Impossible d'utiliser \"%s\" avec %s"
+
+msgid "E1038: \"vim9script\" can only be used in a script"
+msgstr "E1038: \"vim9script\" ne peut être utilisé que dans un script"
+
+msgid "E1039: \"vim9script\" must be the first command in a script"
+msgstr "E1039: \"vim9script\" doit être la première commande dans un script"
+
+msgid "E1040: Cannot use :scriptversion after :vim9script"
+msgstr "E1040: Impossible d'utiliser :scriptversion après :vim9script"
+
+#, c-format
+msgid "E1041: Redefining script item %s"
+msgstr "E1041: Redéfinition de l'élément de script %s"
+
+msgid "E1042: Export can only be used in vim9script"
+msgstr "E1042: Export ne peut être utilisé que dans vim9script"
+
+msgid "E1043: Invalid command after :export"
+msgstr "E1043: Commande invalide après :export"
+
+msgid "E1044: Export with invalid argument"
+msgstr "E1044: Export avec argument invalide"
+
+msgid "E1045: Missing \"as\" after *"
+msgstr "E1045: \"as\" manquant après *"
+
+msgid "E1046: Missing comma in import"
+msgstr "E1046: virgule manquante dans import"
+
+msgid "E1047: Syntax error in import"
+msgstr "E1047: Erreur de syntaxe dans import" 
+
+#, c-format
+msgid "E1048: Item not found in script: %s"
+msgstr "E1048: Élément non trouvé dans le script : %s"
+
+#, c-format
+msgid "E1049: Item not exported in script: %s"
+msgstr "E1049: Élément non exporté dans le script : %s"
+
+#, c-format
+msgid "E1052: Cannot declare an option: %s"
+msgstr "E1052: Impossible de déclarer un option : %s"
+
+#, c-format
+msgid "E1053: Could not import \"%s\""
+msgstr "E1053: Impossible d'importer \"%s\""
+
+#, c-format
+msgid "E1054: Variable already declared in the script: %s"
+msgstr "E1054: Variable déjà déclarée dans le script : %s"
+
+msgid "E1055: Missing name after ..."
+msgstr "E1055: Nom manquant après ..."
+
+#, c-format
+msgid "E1056: Expected a type: %s"
+msgstr "E1056: Type attendu : %s"
+
+msgid "E1057: Missing :enddef"
+msgstr "E1057: :enddef manquant"
+
+msgid "E1058: Function nesting too deep"
+msgstr "E1058: Fonctions trop imbriquées"
+
+#, c-format
+msgid "E1059: No white space allowed before colon: %s"
+msgstr "E1059: Espace interdite avant les deux-points : %s"
+
+#, c-format
+msgid "E1060: Expected dot after name: %s"
+msgstr "E1060: point attendu après le nom : %s"
+
+#, c-format
+msgid "E1061: Cannot find function %s"
+msgstr "E1061: Impossible de trouver la fonction : %s"
+
+msgid "E1062: Cannot index a Number"
+msgstr "E1062: Impossible d'indexer un Nombre"
+
+msgid "E1063: Type mismatch for v: variable"
+msgstr "E1063: Type inconsistant pour la variable v:"
+
+#, c-format
+msgid "E1066: Cannot declare a register: %s"
+msgstr "E1066: Impossible déclarer un registre : %s"
+
+#, c-format
+msgid "E1067: Separator mismatch: %s"
+msgstr "E1067: Séparateur inconsistant : %s"
+
+#, c-format
+msgid "E1068: No white space allowed before '%s'"
+msgstr "E1068: Espace interdite avant '%s'"
+
+#, c-format
+msgid "E1069: White space required after '%s'"
+msgstr "E1069: Espace interdite après '%s'"
+
+msgid "E1070: Missing \"from\""
+msgstr "E1070: \"from\" manquant"
+
+msgid "E1071: Invalid string after \"from\""
+msgstr "E1071: Chaîne invalide après \"from\""
+
+#, c-format
+msgid "E1072: Cannot compare %s with %s"
+msgstr "E1072: Impossible de comparer %s avec %s"
+
+#, c-format
+msgid "E1073: Name already defined: %s"
+msgstr "E1073: Nom déjà défini : %s"
+
+msgid "E1074: No white space allowed after dot"
+msgstr "E1074: Espace interdite après un point"
+
+#, c-format
+msgid "E1084: Cannot delete Vim9 script function %s"
+msgstr "E1084: Impossible de supprimer la fonction %s du script vim9"
+
+msgid "E1086: Cannot use :function inside :def"
+msgstr "E1086: Impossible d'utiliser :function dans :def"
+
+msgid "E1119: Cannot change list item"
+msgstr "E1119: Impossible de changer un élément de liste"
+
+msgid "E1120: Cannot change dict"
+msgstr "E1120: Impossible de changer un dictionnaire"
+
+msgid "E1121: Cannot change dict item"
+msgstr "E1121: Impossible de changer un élément de dictionnaire"
+
+#, c-format
+msgid "E1122: Variable is locked: %s"
+msgstr "E1122: Variable verrouillée : %s"
+
+#, c-format
+msgid "E1123: Missing comma before argument: %s"
+msgstr "E1123: Virgule manquante avant un argument : %s"
+
+msgid "E1127: Missing name after dot"
+msgstr "E1127: Nom manquant après un point"
+
+msgid "E1128: } without {"
+msgstr "E1128: } sans {"
+
+msgid "E1130: Cannot add to null list"
+msgstr "E1130: Impossible d'ajouter à une liste nulle"
+
+msgid "E1131: Cannot add to null blob"
+msgstr "E1131: Impossible d'ajouter à un Blob nul"
+
+msgid "E1132: Missing function argument"
+msgstr "E1132: Argument de fonction manquant"
+
+msgid "E1133: Cannot extend a null dict"
+msgstr "E1133: Impossible d'étendre un dictionnaire nul"
+
+#, c-format
+msgid "E1135: Using a String as a Bool: \"%s\""
+msgstr "E1135: Utilisation d'une Chaîne comme un Booléen : \"%s\""
+
+msgid "E1138: Using a Bool as a Number"
+msgstr "E1138: Utilisation d'un Booléen comme un Nombre"
+
+msgid "E1141: Indexable type required"
+msgstr "E1141: Type indexable requis"
+
+msgid "E1142: Non-empty string required"
+msgstr "E1142: Chaîne non vide requise"
+
+#, c-format
+msgid "E1143: Empty expression: \"%s\""
+msgstr "E1143: Expression vide : \"%s\""
+
+#, c-format
+msgid "E1146: Command not recognized: %s"
+msgstr "E1146: Commande non reconnue : %s"
+
+#, c-format
+msgid "E1148: Cannot index a %s"
+msgstr "E1148: Impossible d'indexer %s"
+
 # DB - todo : ou encore : msgstr "--Aucune ligne dans le tampon--"
 msgid "--No lines in buffer--"
 msgstr "--Le tampon est vide--"
@@ -6964,9 +7297,21 @@
 msgid "E171: Missing :endif"
 msgstr "E171: :endif manquant"
 
+msgid "E603: :catch without :try"
+msgstr "E603: :catch sans :try"
+
+msgid "E606: :finally without :try"
+msgstr "E606: :finally sans :try"
+
+msgid "E607: multiple :finally"
+msgstr "E607: Il ne peut y avoir qu'un seul :finally"
+
 msgid "E600: Missing :endtry"
 msgstr "E600: :endtry manquant"
 
+msgid "E602: :endtry without :try"
+msgstr "E602: :endtry sans :try"
+
 msgid "E170: Missing :endwhile"
 msgstr "E170: :endwhile manquant"
 
@@ -7033,13 +7378,13 @@
 msgid "E16: Invalid range"
 msgstr "E16: Plage invalide"
 
-msgid "E476: Invalid command"
-msgstr "E476: Commande invalide"
-
 #, c-format
 msgid "E17: \"%s\" is a directory"
 msgstr "E17: \"%s\" est un répertoire"
 
+msgid "E756: Spell checking is not possible"
+msgstr "E756: La vérification orthographique n'est pas possible"
+
 #, c-format
 msgid "E364: Library call failed for \"%s()\""
 msgstr "E364: L'appel à la bibliothèque a échoué pour \"%s()\""
@@ -7187,10 +7532,6 @@
 msgstr "E45: L'option 'readonly' est activée (ajoutez ! pour passer outre)"
 
 #, c-format
-msgid "E121: Undefined variable: %s"
-msgstr "E121: Variable non définie : %s"
-
-#, c-format
 msgid "E734: Wrong variable type for %s="
 msgstr "E734: Type de variable erroné avec %s="
 
@@ -7236,8 +7577,16 @@
 msgstr "E118: La fonction %s a reçu trop d'arguments"
 
 #, c-format
-msgid "E716: Key not present in Dictionary: %s"
-msgstr "E716: La clé %s n'existe pas dans le Dictionnaire"
+msgid "E119: Not enough arguments for function: %s"
+msgstr "E119: La fonction %s n'a pas reçu assez d'arguments"
+
+#, c-format
+msgid "E933: Function was deleted: %s"
+msgstr "E933: La fonction a été effacée : %s"
+
+#, c-format
+msgid "E716: Key not present in Dictionary: \"%s\""
+msgstr "E716: La clé n'existe pas dans le Dictionnaire : \"%s\""
 
 msgid "E714: List required"
 msgstr "E714: Liste requise"
@@ -7246,6 +7595,10 @@
 msgstr "E897: Liste ou Blob requis"
 
 #, c-format
+msgid "E697: Missing end of List ']': %s"
+msgstr "E697: Il manque ']' à la fin de la Liste %s"
+
+#, c-format
 msgid "E712: Argument of %s must be a List or Dictionary"
 msgstr "E712: L'argument de %s doit être une Liste ou un Dictionnaire"
 
@@ -7253,6 +7606,26 @@
 msgid "E896: Argument of %s must be a List, Dictionary or Blob"
 msgstr "E896: L'argument de %s doit être une Liste, Dictionnaire ou un Blob"
 
+msgid "E804: Cannot use '%' with Float"
+msgstr "E804: Impossible d'utiliser '%' avec un Flottant"
+
+msgid "E908: using an invalid value as a String"
+msgstr "E908: Utilisation d'une valeur invalide comme une Chaîne"
+
+msgid "E996: Cannot lock an option"
+msgstr "E996: Impossible de verrouiller une option"
+
+#, c-format
+msgid "E113: Unknown option: %s"
+msgstr "E113: Option inconnue : %s"
+
+msgid "E18: Unexpected characters in :let"
+msgstr "E18: Caractères inattendus avant '='"
+
+#, c-format
+msgid "E857: Dictionary key \"%s\" required"
+msgstr "E857: Clé de Dictionnaire \"%s\" requis"
+
 msgid "E47: Error while reading errorfile"
 msgstr "E47: Erreur lors de la lecture du fichier d'erreurs"
 
@@ -7260,7 +7633,13 @@
 msgstr "E48: Opération interdite dans le bac à sable"
 
 msgid "E523: Not allowed here"
-msgstr "E523: Interdit à cet endroit"
+msgstr "E523: Interdit ici"
+
+msgid "E578: Not allowed to change text here"
+msgstr "E578: Interdit de changer le texte ici"
+
+msgid "E565: Not allowed to change text or change window"
+msgstr "E565: Interdit de changer le texte ou la fenêtre"
 
 msgid "E359: Screen mode setting not supported"
 msgstr "E359: Choix du mode d'écran non supporté"
@@ -7295,6 +7674,10 @@
 msgid "E488: Trailing characters"
 msgstr "E488: Caractères surnuméraires"
 
+#, c-format
+msgid "E488: Trailing characters: %s"
+msgstr "E488: Caractères surnuméraires : %s"
+
 msgid "E78: Unknown mark"
 msgstr "E78: Marque inconnue"
 
@@ -7320,6 +7703,25 @@
 msgid "E107: Missing parentheses: %s"
 msgstr "E107: Parenthèses manquantes : %s"
 
+msgid "E110: Missing ')'"
+msgstr "E110: ')' manquant"
+
+#, c-format
+msgid "E720: Missing colon in Dictionary: %s"
+msgstr "E720: Il manque ':' dans le Dictionnaire %s"
+
+#, c-format
+msgid "E721: Duplicate key in Dictionary: \"%s\""
+msgstr "E721: Clé dupliquée dans le Dictionnaire : %s"
+
+#, c-format
+msgid "E722: Missing comma in Dictionary: %s"
+msgstr "E722: Il manque une virgule dans le Dictionnaire : %s"
+
+#, c-format
+msgid "E723: Missing end of Dictionary '}': %s"
+msgstr "E723: Il manque '}' à la fin du Dictionnaire : %s"
+
 msgid "E449: Invalid expression received"
 msgstr "E449: Expression invalide reçue"
 
@@ -7353,6 +7755,9 @@
 msgid "E850: Invalid register name"
 msgstr "E850: Nom de registre invalide"
 
+msgid "E806: using Float as a String"
+msgstr "E806: Utilisation d'un Flottant comme une Chaîne"
+
 #, c-format
 msgid "E919: Directory not found in '%s': \"%s\""
 msgstr "E919: Répertoire introuvable dans '%s' : \"%s\""
@@ -7360,6 +7765,10 @@
 msgid "E952: Autocommand caused recursive behavior"
 msgstr "E952: Une autocommande a causé une récursivité"
 
+msgid "E813: Cannot close autocmd or popup window"
+msgstr ""
+"E813: Impossible de fermer la fenêtre des autocommandes ou contextuelle"
+
 # DB - todo : J'hésite avec
 #      msgstr "E328: Le menu n'existe pas dans ce mode"
 msgid "E328: Menu only exists in another mode"
@@ -7372,12 +7781,56 @@
 msgid "E686: Argument of %s must be a List"
 msgstr "E686: L'argument de %s doit être une Liste"
 
+# AB - Je suis partagé entre la concision d'une traduction assez littérale et
+#      la lourdeur d'une traduction plus correcte.
+msgid "E109: Missing ':' after '?'"
+msgstr "E109: Il manque ':' après '?'"
+
+msgid "E690: Missing \"in\" after :for"
+msgstr "E690: \"in\" manquant après :for"
+
+#, c-format
+msgid "E117: Unknown function: %s"
+msgstr "E117: Fonction inconnue : %s"
+
+msgid "E111: Missing ']'"
+msgstr "E111: ']' manquant"
+
+msgid "E581: :else without :if"
+msgstr "E581: :else sans :if"
+
+msgid "E582: :elseif without :if"
+msgstr "E582: :elseif sans :if"
+
+msgid "E580: :endif without :if"
+msgstr "E580: :endif sans :if"
+
+msgid "E586: :continue without :while or :for"
+msgstr "E586: :continue sans :while ou :for"
+
+msgid "E587: :break without :while or :for"
+msgstr "E587: :break sans :while ou :for"
+
+msgid "E274: No white space allowed before parenthesis"
+msgstr "E274: espace interdite avant une parenthèse"
+
+#, c-format
+msgid "E940: Cannot lock or unlock variable %s"
+msgstr "E940: Impossible de (dé)verrouiller la variable %s"
+
+#, c-format
+msgid "E254: Cannot allocate color %s"
+msgstr "E254: Impossible d'allouer la couleur %s"
+
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "La recherche a atteint le HAUT, et continue en BAS"
 
 msgid "search hit BOTTOM, continuing at TOP"
 msgstr "La recherche a atteint le BAS, et continue en HAUT"
 
+msgid " line "
+msgstr " ligne "
+
 #, c-format
 msgid "Need encryption key for \"%s\""
 msgstr "Besoin de la clé de chiffrement pour \"%s\""
@@ -7708,3 +8161,69 @@
 
 msgid "Vim"
 msgstr "Vim"
+
+msgid "(local to buffer)"
+msgstr "(local au tampon)"
+
+msgid "(global or local to buffer)"
+msgstr "(global ou local au tampon)"
+
+msgid "number of lines used for the command-line"
+msgstr "nombre de lignes utilisée pour la ligne de commande"
+
+msgid "don't redraw while executing macros"
+msgstr "ne pas rafraîchir l'écran lors de l'exécution des macros"
+
+msgid "show <Tab> as ^I and end-of-line as $"
+msgstr "montrer ^I pour <Tab> et $ pour la fin de ligne"
+
+msgid "show the line number for each line"
+msgstr "montrer le numéro de chaque ligne"
+
+msgid "terminal"
+msgstr "terminal"
+
+msgid "enable lisp mode"
+msgstr "activer le mode lisp"
+
+msgid "folding"
+msgstr "repli"
+
+msgid "list of directories to put backup files in"
+msgstr "liste des répertoires des copies de secours dans"
+
+msgid "the swap file"
+msgstr "le fichier d'échange"
+
+msgid "list of directories for the swap file"
+msgstr "liste des répertoires du fichier d'échange"
+
+msgid "command line editing"
+msgstr "édition de ligne de commande"
+
+msgid "multi-byte characters"
+msgstr "caractères multi-octets"
+
+msgid "various"
+msgstr "divers"
+
+msgid "name of the Lua dynamic library"
+msgstr "nom de la bibliothèque dynamique Lua"
+
+msgid "name of the Perl dynamic library"
+msgstr "nom de la bibliothèque dynamique Perl"
+
+msgid "whether to use Python 2 or 3"
+msgstr "utilisation de Python 2 ou 3"
+
+msgid "name of the Python 2 dynamic library"
+msgstr "nom de la bibliothèque dynamique Python 2"
+
+msgid "name of the Ruby dynamic library"
+msgstr "nom de la bibliothèque dynamique Ruby"
+
+msgid "name of the Tcl dynamic library"
+msgstr "nom de la bibliothèque dynamique Tcl"
+
+msgid "name of the MzScheme dynamic library"
+msgstr "nom de la bibliothèque dynamique MzScheme"