changeset 15729:fe57e4f0eac1

Update runtime files. commit https://github.com/vim/vim/commit/314dd79cac2adc10304212d1980d23ecf6782cfc Author: Bram Moolenaar <Bram@vim.org> Date: Sun Feb 3 15:27:20 2019 +0100 Update runtime files.
author Bram Moolenaar <Bram@vim.org>
date Sun, 03 Feb 2019 15:30:09 +0100
parents 479381bd1728
children e5441bee8063
files runtime/autoload/paste.vim runtime/bugreport.vim runtime/defaults.vim runtime/doc/eval.txt runtime/doc/if_perl.txt runtime/doc/if_ruby.txt runtime/doc/indent.txt runtime/doc/insert.txt runtime/doc/options.txt runtime/doc/os_vms.txt runtime/doc/tags runtime/doc/terminal.txt runtime/doc/todo.txt runtime/doc/usr_05.txt runtime/doc/usr_11.txt runtime/doc/usr_41.txt runtime/evim.vim runtime/filetype.vim runtime/indent/sh.vim runtime/indent/xml.vim runtime/menu.vim runtime/optwin.vim runtime/pack/dist/opt/matchit/doc/matchit.txt runtime/pack/dist/opt/matchit/plugin/matchit.vim runtime/syntax/debchangelog.vim runtime/vimrc_example.vim src/po/de.po
diffstat 27 files changed, 740 insertions(+), 1284 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/autoload/paste.vim
+++ b/runtime/autoload/paste.vim
@@ -1,35 +1,25 @@
 " Vim support file to help with paste mappings and menus
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2017 Aug 30
+" Last Change:	2019 Jan 27
 
 " Define the string to use for items that are present both in Edit, Popup and
 " Toolbar menu.  Also used in mswin.vim and macmap.vim.
 
-" Pasting blockwise and linewise selections is not possible in Insert and
-" Visual mode without the +virtualedit feature.  They are pasted as if they
-" were characterwise instead.  Add to that some tricks to leave the cursor in
-" the right position, also for "gi".
-if has("virtualedit")
-  let paste#paste_cmd = {'n': ":call paste#Paste()<CR>"}
-  let paste#paste_cmd['v'] = '"-c<Esc>' . paste#paste_cmd['n']
-  let paste#paste_cmd['i'] = "\<c-\>\<c-o>\"+gP"
+let paste#paste_cmd = {'n': ":call paste#Paste()<CR>"}
+let paste#paste_cmd['v'] = '"-c<Esc>' . paste#paste_cmd['n']
+let paste#paste_cmd['i'] = "\<c-\>\<c-o>\"+gP"
 
-  func! paste#Paste()
-    let ove = &ve
-    set ve=all
-    normal! `^
-    if @+ != ''
-      normal! "+gP
-    endif
-    let c = col(".")
-    normal! i
-    if col(".") < c	" compensate for i<ESC> moving the cursor left
-      normal! l
-    endif
-    let &ve = ove
-  endfunc
-else
-  let paste#paste_cmd = {'n': "\"=@+.'xy'<CR>gPFx\"_2x"}
-  let paste#paste_cmd['v'] = '"-c<Esc>gix<Esc>' . paste#paste_cmd['n'] . '"_x'
-  let paste#paste_cmd['i'] = 'x<Esc>' . paste#paste_cmd['n'] . '"_s'
-endif
+func! paste#Paste()
+  let ove = &ve
+  set ve=all
+  normal! `^
+  if @+ != ''
+    normal! "+gP
+  endif
+  let c = col(".")
+  normal! i
+  if col(".") < c	" compensate for i<ESC> moving the cursor left
+    normal! l
+  endif
+  let &ve = ove
+endfunc
--- a/runtime/bugreport.vim
+++ b/runtime/bugreport.vim
@@ -2,7 +2,7 @@
 :" information about the environment of a possible bug in Vim.
 :"
 :" Maintainer:	Bram Moolenaar <Bram@vim.org>
-:" Last change:	2005 Jun 12
+:" Last change:	2019 Jan 27
 :"
 :" To use inside Vim:
 :"	:so $VIMRUNTIME/bugreport.vim
@@ -54,9 +54,7 @@
 :endif
 :set all
 :set termcap
-:if has("autocmd")
-:  au
-:endif
+:au
 :if 1
 :  echo "--- Normal/Visual mode mappings ---"
 :endif
--- a/runtime/defaults.vim
+++ b/runtime/defaults.vim
@@ -1,7 +1,7 @@
 " The default vimrc file.
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last change:	2017 Jun 13
+" Last change:	2019 Jan 26
 "
 " This is loaded if no vimrc file was found.
 " Except when Vim is run with "-u NONE" or "-C".
@@ -90,33 +90,28 @@ if &t_Co > 2 || has("gui_running")
   let c_comment_strings=1
 endif
 
-" Only do this part when compiled with support for autocommands.
-if has("autocmd")
-
-  " Enable file type detection.
-  " Use the default filetype settings, so that mail gets 'tw' set to 72,
-  " 'cindent' is on in C files, etc.
-  " Also load indent files, to automatically do language-dependent indenting.
-  " Revert with ":filetype off".
-  filetype plugin indent on
+" Enable file type detection.
+" Use the default filetype settings, so that mail gets 'tw' set to 72,
+" 'cindent' is on in C files, etc.
+" Also load indent files, to automatically do language-dependent indenting.
+" Revert with ":filetype off".
+filetype plugin indent on
 
-  " Put these in an autocmd group, so that you can revert them with:
-  " ":augroup vimStartup | au! | augroup END"
-  augroup vimStartup
-    au!
+" Put these in an autocmd group, so that you can revert them with:
+" ":augroup vimStartup | au! | augroup END"
+augroup vimStartup
+  au!
 
-    " When editing a file, always jump to the last known cursor position.
-    " Don't do it when the position is invalid, when inside an event handler
-    " (happens when dropping a file on gvim) and for a commit message (it's
-    " likely a different one than last time).
-    autocmd BufReadPost *
-      \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit'
-      \ |   exe "normal! g`\""
-      \ | endif
+  " When editing a file, always jump to the last known cursor position.
+  " Don't do it when the position is invalid, when inside an event handler
+  " (happens when dropping a file on gvim) and for a commit message (it's
+  " likely a different one than last time).
+  autocmd BufReadPost *
+    \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit'
+    \ |   exe "normal! g`\""
+    \ | endif
 
-  augroup END
-
-endif " has("autocmd")
+augroup END
 
 " Convenient command to see the difference between the current buffer and the
 " file it was loaded from, thus the changes you made.
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -10193,7 +10193,7 @@ compatible		Compiled to be very Vi compa
 conpty			Platform where |ConPTY| can be used.
 cryptv			Compiled with encryption support |encryption|.
 cscope			Compiled with |cscope| support.
-cursorbind		Compiled with |cursorbind| (always true)
+cursorbind		Compiled with |'cursorbind'| (always true)
 debug			Compiled with "DEBUG" defined.
 dialog_con		Compiled with console dialog support.
 dialog_gui		Compiled with GUI dialog support.
--- a/runtime/doc/if_perl.txt
+++ b/runtime/doc/if_perl.txt
@@ -1,4 +1,4 @@
-*if_perl.txt*   For Vim version 8.1.  Last change: 2017 Nov 24
+*if_perl.txt*   For Vim version 8.1.  Last change: 2019 Jan 29
 
 
 		  VIM REFERENCE MANUAL    by Sven Verdoolaege
@@ -192,7 +192,7 @@ VIM::Eval({expr})	Evaluates {expr} and r
 			and inserting line breaks.
 
 							*perl-Blob*
-VIM::Blob({expr})	Return Blob literal string 0zXXXX from scalar value.
+VIM::Blob({expr})	Return |Blob| literal string 0zXXXX from scalar value.
 
 							*perl-SetHeight*
 Window->SetHeight({height})
--- a/runtime/doc/if_ruby.txt
+++ b/runtime/doc/if_ruby.txt
@@ -1,4 +1,4 @@
-*if_ruby.txt*   For Vim version 8.1.  Last change: 2018 Mar 15
+*if_ruby.txt*   For Vim version 8.1.  Last change: 2019 Jan 29
 
 
 		  VIM REFERENCE MANUAL    by Shugo Maeda
@@ -112,7 +112,7 @@ Vim::message({msg})
 
 							*ruby-blob*
 Vim::blob({arg})
-	Return Blob literal string from {arg}.
+	Return |Blob| literal string from {arg}.
 
 							*ruby-set_option*
 Vim::set_option({arg})
--- a/runtime/doc/indent.txt
+++ b/runtime/doc/indent.txt
@@ -1,4 +1,4 @@
-*indent.txt*    For Vim version 8.1.  Last change: 2018 Apr 04
+*indent.txt*    For Vim version 8.1.  Last change: 2019 Jan 31
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- a/runtime/doc/insert.txt
+++ b/runtime/doc/insert.txt
@@ -1,4 +1,4 @@
-*insert.txt*    For Vim version 8.1.  Last change: 2019 Jan 11
+*insert.txt*    For Vim version 8.1.  Last change: 2019 Jan 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1078,7 +1078,8 @@ that contains the List.  The Dict can ha
 			leading text is changed.
 
 If you want to suppress the warning message for an empty result, return
-v:none.  This is useful to implement asynchronous completion with complete().
+|v:none|.  This is useful to implement asynchronous completion with
+|complete()|.
 
 Other items are ignored.
 
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 8.1.  Last change: 2019 Jan 16
+*options.txt*	For Vim version 8.1.  Last change: 2019 Feb 03
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -354,12 +354,12 @@ files.  You use this command: >
 	:setlocal makeprg=perlmake
 You can switch back to using the global value by making the local value empty: >
 	:setlocal makeprg=
-This only works for a string option.  For a boolean option you need to use the
-"<" flag, like this: >
+This only works for a string option.  For a number or boolean option you need
+to use the "<" flag, like this: >
 	:setlocal autoread<
-Note that for non-boolean options using "<" copies the global value to the
-local value, it doesn't switch back to using the global value (that matters
-when the global value changes later).  You can also use: >
+Note that for non-boolean and non-number options using "<" copies the global
+value to the local value, it doesn't switch back to using the global value
+(that matters when the global value changes later).  You can also use: >
 	:set path<
 This will make the local value of 'path' empty, so that the global value is
 used.  Thus it does the same as: >
--- a/runtime/doc/os_vms.txt
+++ b/runtime/doc/os_vms.txt
@@ -1,4 +1,4 @@
-*os_vms.txt*    For Vim version 8.1.  Last change: 2019 Jan 19
+*os_vms.txt*    For Vim version 8.1.  Last change: 2019 Jan 29
 
 
 		  VIM REFERENCE MANUAL
@@ -105,7 +105,7 @@ You may want to use GUI with GTK icons, 
 GTK for OpenVMS or at least runtime shareable images - LIBGTK from
 polarhome.com
 Post 7.2 Vim uses GTK2+ while the last GTK on OpenVMS is 1.2.10, therefore
-the GTK build is no longer available. 
+the GTK build is no longer available.
 
 For more advanced questions, please send your problem to Vim on VMS mailing
 list <vim-vms@polarhome.com>
@@ -772,9 +772,9 @@ Version 8.1
 Version 8.0
 - solve the 100% cpu usage issue while waiting for a keystroke
 - correct the VMS warnings and errors around handling the INFINITY (used in json.c)
-- minor VMS port related changes 
-- correct the make_vms.mms file for 8.0 
-- fix [.TESTDIR]make_vms.mms for 8.0 
+- minor VMS port related changes
+- correct the make_vms.mms file for 8.0
+- fix [.TESTDIR]make_vms.mms for 8.0
 
 Version 7.4
 - Undo: VMS can not handle more than one dot in the filenames use "dir/name" -> "dir/_un_name"
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -1092,6 +1092,7 @@
 'termbidi'	options.txt	/*'termbidi'*
 'termencoding'	options.txt	/*'termencoding'*
 'termguicolors'	options.txt	/*'termguicolors'*
+'termmode'	options.txt	/*'termmode'*
 'termwinkey'	options.txt	/*'termwinkey'*
 'termwinscroll'	options.txt	/*'termwinscroll'*
 'termwinsize'	options.txt	/*'termwinsize'*
@@ -1112,6 +1113,7 @@
 'titlestring'	options.txt	/*'titlestring'*
 'tl'	options.txt	/*'tl'*
 'tm'	options.txt	/*'tm'*
+'tmod'	options.txt	/*'tmod'*
 'to'	options.txt	/*'to'*
 'toolbar'	options.txt	/*'toolbar'*
 'toolbariconsize'	options.txt	/*'toolbariconsize'*
@@ -1717,6 +1719,7 @@ 05.5	usr_05.txt	/*05.5*
 05.6	usr_05.txt	/*05.6*
 05.7	usr_05.txt	/*05.7*
 05.8	usr_05.txt	/*05.8*
+05.9	usr_05.txt	/*05.9*
 06.1	usr_06.txt	/*06.1*
 06.2	usr_06.txt	/*06.2*
 06.3	usr_06.txt	/*06.3*
@@ -3741,6 +3744,7 @@ ColorSchemePre	autocmd.txt	/*ColorScheme
 Command-line	cmdline.txt	/*Command-line*
 Command-line-mode	cmdline.txt	/*Command-line-mode*
 CompleteDone	autocmd.txt	/*CompleteDone*
+ConPTY	terminal.txt	/*ConPTY*
 Contents	quickref.txt	/*Contents*
 Cscope	if_cscop.txt	/*Cscope*
 CursorHold	autocmd.txt	/*CursorHold*
@@ -5012,7 +5016,10 @@ ZZ	editing.txt	/*ZZ*
 [:cntrl:]	pattern.txt	/*[:cntrl:]*
 [:digit:]	pattern.txt	/*[:digit:]*
 [:escape:]	pattern.txt	/*[:escape:]*
+[:fname:]	pattern.txt	/*[:fname:]*
 [:graph:]	pattern.txt	/*[:graph:]*
+[:ident:]	pattern.txt	/*[:ident:]*
+[:keyword:]	pattern.txt	/*[:keyword:]*
 [:lower:]	pattern.txt	/*[:lower:]*
 [:print:]	pattern.txt	/*[:print:]*
 [:punct:]	pattern.txt	/*[:punct:]*
@@ -5847,6 +5854,7 @@ dec-mouse	options.txt	/*dec-mouse*
 decada_members	ft_ada.txt	/*decada_members*
 deepcopy()	eval.txt	/*deepcopy()*
 defaults.vim	starting.txt	/*defaults.vim*
+defaults.vim-explained	usr_05.txt	/*defaults.vim-explained*
 definition-search	tagsrch.txt	/*definition-search*
 definitions	intro.txt	/*definitions*
 delete()	eval.txt	/*delete()*
@@ -7313,7 +7321,7 @@ lambda	eval.txt	/*lambda*
 lang-variable	eval.txt	/*lang-variable*
 language-mapping	map.txt	/*language-mapping*
 last-pattern	pattern.txt	/*last-pattern*
-last-position-jump	eval.txt	/*last-position-jump*
+last-position-jump	usr_05.txt	/*last-position-jump*
 last_buffer_nr()	eval.txt	/*last_buffer_nr()*
 latex-syntax	syntax.txt	/*latex-syntax*
 lc_time-variable	eval.txt	/*lc_time-variable*
--- a/runtime/doc/terminal.txt
+++ b/runtime/doc/terminal.txt
@@ -1,4 +1,4 @@
-*terminal.txt*	For Vim version 8.1.  Last change: 2018 May 17
+*terminal.txt*	For Vim version 8.1.  Last change: 2019 Feb 03
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 8.1.  Last change: 2019 Jan 26
+*todo.txt*      For Vim version 8.1.  Last change: 2019 Feb 02
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -38,6 +38,8 @@ browser use: https://github.com/vim/vim/
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
+Timer test doesn't work on MS-Windows console, any way to make it work?
+
 'incsearch' with :s: (#3321)
 - Get E20 when using command history to get "'<,'>s/a/b" and no Visual area
   was set. (#3837)
@@ -61,6 +63,7 @@ Terminal debugger:
 - Add option to not open the program window.  It's not used when attaching to
   an already running program. (M. Kelly)
 - When only gdb window exists, on "quit" edit another buffer.
+- Use a sign group
 - Termdebug does not work when Vim was build with mzscheme: gdb hangs just
   after "run".  Everything else works, including communication channel.  Not
   initializing mzscheme avoid the problem, thus it's not some #ifdef.
@@ -107,48 +110,18 @@ Problem with Visual yank when 'linebreak
 Patch with tests, but it's not clear how it is supposed to work. (tommm, 2018
 Nov 17)  Asked about this, Dec 22. Christian will have a look.
 
-Key mapping times out when using a timer in Gvim. (Michael Henry, 2018 Sep 9,
-#3417)
-Another report, with reproduction steps. (#3799)
-Is this fixed by 8.1.0761?
-
 Does not build with MinGW out of the box:
 - _stat64 is not defined, need to use "struct stat" in vim.h
 - WINVER conflict, should use 0x0600 by default?
 
-js_decode() does not handle infinity properly. (Dominique Pelle, 2019 Jan 10,
-#3788)
-
-Patch to avoid skipping buffers when loading a session. (Jason Franklin, 2019
-Jan 20)
-
-Patch to update example of how to restore the cursor. (Ken Takata, 2019 Jan
-21)
-
-Patch to fix problems with timer in GUI. (Ozaki Kiichi, #3817)
-Should also fix #3824.
-Change the order in which GUI handles events?  Make it work like os_unix.c,
-check timer on lower level, check for pending messages higher up.
-
-Signs:
--   screen not redrawn correctly. (Dominique Pelle, 2019 Jan 14, #3803)
--   Use a sign group in the Termdebug plugin.
--   Avoid that "sign unplace id" does a redraw right away, esp. when there is
-    a sequence of these commands. (Andy Stewart, 2018 Mar 16)
-
 Crash when mixing matchadd and substitute()? (Max Christian Pohle, 2018 May
 13, #2910)  Can't reproduce?
 
-Patch to recognize more systems with has().  (Ozaki Kiichi, #3855)
-
 Merge checking for 'cursorline' and 'concealcursor', see neovim #9492.
 
 Errors found with random data:
     heap-buffer-overflow in alist_add (#2472)
 
-Patch for xxd to make it work with 64 bit numbers. (Christer Jense, 2019 Jan
-11, #3791)
-
 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?
 
@@ -177,12 +150,6 @@ similar to check_due_timer().  Also see 
 C syntax: {} inside () causes following {} to be highlighted as error.
 (Michalis Giannakidis, 2006 Jun 1)
 
-Patch on #3690 to fix that "wincmd p" does not always behave properly.
-(Christian Brabandt, 2018 Dec 17)
-
-Patch: When using %v in 'errorformat', assume the number is the screen column
-not bytes, also handle multi-byte charactes. (Yegappan Lakshmanan, #3700)
-
 Support setting the character displayed below the last line?  Neovim uses
 "eob:X" in 'fillchars'.
 
@@ -197,37 +164,24 @@ balloonexpr() on MS-Windows GUI doesn't 
 2018 Sep 14)
 Another request: #3811.
 
-Patch for MinGW build with static libraries. (Ken Takata, 2018 Dec 16)
-
-Patch to add new regexp classes :ident:, :keyword:, :fname:.
-(ichizok, 2016 Jan 12, #1373)
-
-Patch to add "termsig" - signal that caused job to end. (Ozaki Kiichi, 2019
-Jan 10, #3786)
-
 More warnings from static analysis:
 https://lgtm.com/projects/g/vim/vim/alerts/?mode=list
 
-Patch for this: (Aron Widforss, 2018 Oct 13, #3539)
-    missing a test.
-7   Make 'scrolloff' a global-local option, so that it can be different in the
-    quickfix window, for example. (Gary Holloway)
-    Also do 'sidescrolloff'.
-
-Patch for ConPTY support, new one: #3794 Does this work now?
-(Nobuhiro Takasaki)
-
-Issue #3649: Retrying the X server connection once may be insufficient.
-Since patch 8.1.0615 we try reconnecting five times.  Does it work?
-
 nvo-mode mapping works on Windows, not on Linux. (#3678)
 
 Patch to be able to separately map CTRL-H and BS on Windows.
 (Linwei, 2017 Jul 11, #1833)
 
+Patch to improve readability of complicated if(). (ichizok, 2019 Jan 29,
+#3879)
+
 Pasting foo} causes Vim to behave weird. (John Little, 2018 Jun 17)
 Related to bracketed paste.  I cannot reproduce it.
 
+When 'confirm' is set a "silent q" doesn't show the prompt.  It should in this
+case. (Nate Peterson, 2019 Jan 31, #3892)
+For "silent! q" it should not prompt and just fail.
+
 Using CTRL-L to add a character to the search string doesn't work for the last
 character in the file. (Smylers, 2018 Nov 17, #3620)
 Suggested patch by Hirohito Higashi, 2018 Nov 18.
@@ -250,13 +204,16 @@ When 'sidescrolloff' is set, using "zl" 
 scrolls back.  Should allow for this scrolling, like 'scrolloff' does when
 using CTRL-E. (Yee Cheng Chin, #3721)
 
-Patch to add ":vsbuffer" - vertical split + :sbuffer. (Rob Pilling, 2019 Jan
-17, #3816)  Do we really need this?
-
 Invalid memory access with old regexp engine. (Dominique Pelle, 2018 Sep 3,
 #3405)  Introduced by 8.0.1517, which was fixing another memory access error.
 (Sep 8)
 
+Patch to add complete_mode().  Shougo - #3866.  Alternate patch by Hirohito
+Higashi, 2019 Jan 27, included now?
+
+Patch for ConPTY support, new one: #3794 Does this work now?  It should.
+(Nobuhiro Takasaki)
+
 Add function to make use of internal diff, working on two lists and returning
 unified diff (list of lines).
 
@@ -272,6 +229,8 @@ cursorline highlighting not removed afte
 (Matéo Zanibelli, 2018 Oct 30, #3578)
 Patch by Christian, Oct 30.
 
+Patch to clean up CI configs. (Ozaki Kiichi, 2019 Feb 1, #3890)
+
 Memory leaks in test_channel? (or is it because of fork())
 Using uninitialized value in test_crypt.
 Memory leak in test_terminal:
@@ -293,6 +252,11 @@ Patch to add match count and current ind
 matchaddpos() gets slow with many matches.  Proposal by Rick Howe, 2018 Jul
 19.
 
+Should make 'listchars' global-local.  Local to window or to buffer?
+Probably window.
+Add something like 'fillchars' local to window, but allow for specifying a
+highlight name.  Esp. for the statusline.
+
 Sourceforge Vim pages still have content, redirect from empty page.
 Check for PHP errors. (Wayne Davison, 2018 Oct 26)
 
@@ -335,6 +299,9 @@ Further xdiff changes:
 
 Difference between two regexp engines: #3373
 
+Patch to properly break CJK lines: #3875
+Requires more tests.  dbcs_ functions are not implemented.
+
 Patch to add ch_listen() (Yasuhiro Matsumoto, 2018 Nov 26, #3639)
 What is the practical use for this?
 
@@ -424,8 +391,6 @@ behave strangely, as if there is a gap a
 Make {skip} argument of searchpair() consistent with other places where we
 pass an expression to evaluate.  Allow passing zero for "never skip".
 
-The 'scrolloff' option is global, make it global-local. #3195
-
 Add an option similar to 'lazyredraw' to skip redrawing while executing a
 script or function.
 
--- a/runtime/doc/usr_05.txt
+++ b/runtime/doc/usr_05.txt
@@ -1,4 +1,4 @@
-*usr_05.txt*	For Vim version 8.1.  Last change: 2018 Feb 20
+*usr_05.txt*	For Vim version 8.1.  Last change: 2019 Jan 26
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -11,12 +11,13 @@ Vim's capabilities.  Or define your own 
 
 |05.1|	The vimrc file
 |05.2|	The example vimrc file explained
-|05.3|	Simple mappings
-|05.4|	Adding a package
-|05.5|	Adding a plugin
-|05.6|	Adding a help file
-|05.7|	The option window
-|05.8|	Often used options
+|05.3|	The defaults.vim file explained
+|05.4|	Simple mappings
+|05.5|	Adding a package
+|05.6|	Adding a plugin
+|05.7|	Adding a help file
+|05.8|	The option window
+|05.9|	Often used options
 
      Next chapter: |usr_06.txt|  Using syntax highlighting
  Previous chapter: |usr_04.txt|  Making small changes
@@ -82,6 +83,95 @@ will give you hints about how to set up 
 will be explained though.  Use the ":help" command to find out more.
 
 >
+	" Get the defaults that most users want.
+	source $VIMRUNTIME/defaults.vim
+>
+This loads the "defaults.vim" file in the $VIMRUNTIME directory.  This sets up
+Vim for how most users like it.  If you are one of the few that don't, then
+comment out this line.  The commands are explained below:
+|defaults.vim-explained|
+
+>
+	if has("vms")
+	  set nobackup
+	else
+	  set backup
+	  if has('persistent_undo')
+	    set undofile
+	  endif
+	endif
+
+This tells Vim to keep a backup copy of a file when overwriting it.  But not
+on the VMS system, since it keeps old versions of files already.  The backup
+file will have the same name as the original file with "~" added.  See |07.4|
+
+This also sets the 'undofile' option, if available.  This will store the
+multi-level undo information in a file.  The result is that when you change a
+file, exit Vim, and then edit the file again, you can undo the changes made
+previously.  It's a very powerful and useful feature, at the cost of storing a
+file.  For more information see |undo-persistence|.
+
+The "if" command is very useful to set options
+only when some condition is met.  More about that in |usr_41.txt|.
+
+>
+	if &t_Co > 2 || has("gui_running")
+	  set hlsearch
+	endif
+
+This switches on the 'hlsearch' option, telling Vim to highlight matches with
+the last used search pattern.
+
+>
+	augroup vimrcEx
+	  au!
+	  autocmd FileType text setlocal textwidth=78
+	augroup END
+
+This makes Vim break text to avoid lines getting longer than 78 characters.
+But only for files that have been detected to be plain text.  There are
+actually two parts here.  "autocmd FileType text" is an autocommand.  This
+defines that when the file type is set to "text" the following command is
+automatically executed.  "setlocal textwidth=78" sets the 'textwidth' option
+to 78, but only locally in one file.
+
+The wrapper with "augroup vimrcEx" and "augroup END" makes it possible to
+delete the autocommand with the "au!" command.  See |:augroup|.
+
+>
+	if has('syntax') && has('eval')
+	  packadd! matchit
+	endif
+
+This loads the "matchit" plugin if the required features are available.
+It makes the |%| command more powerful.  This is explained at
+|matchit-install|.
+
+
+==============================================================================
+*05.3*	The defaults.vim file explained		*defaults.vim-explained*
+
+The |defaults.vim| file is loaded when the user has no vimrc file.  When you
+create a new vimrc file, add this line near the top to keep using it: >
+
+	source $VIMRUNTIME/defaults.vim
+
+Or use the vimrc_example.vim file, as explained above.
+
+The following explains what defaults.vim is doing.
+
+>
+	if exists('skip_defaults_vim')
+	  finish
+	endif
+>
+Loading defaults.vim can be disabled with this command: >
+	let skip_defaults_vim = 1
+This has to be done in the system vimrc file.  See |system-vimrc|.  If you
+have a user vimrc this is not needed, since defaults.vim will not be loaded
+automatically.
+>
+>
 	set nocompatible
 
 As mentioned in the first chapter, these manuals explain Vim working in an
@@ -94,38 +184,19 @@ option off, thus 'nocompatible' takes ca
 This specifies where in Insert mode the <BS> is allowed to delete the
 character in front of the cursor.  The three items, separated by commas, tell
 Vim to delete the white space at the start of the line, a line break and the
-character before where Insert mode started.
->
-
-	set autoindent
-
-This makes Vim use the indent of the previous line for a newly created line.
-Thus there is the same amount of white space before the new line.  For example
-when pressing <Enter> in Insert mode, and when using the "o" command to open a
-new line.
->
+character before where Insert mode started.  See 'backspace'.
 
-	if has("vms")
-	  set nobackup
-	else
-	  set backup
-	endif
+>
+	set history=200
 
-This tells Vim to keep a backup copy of a file when overwriting it.  But not
-on the VMS system, since it keeps old versions of files already.  The backup
-file will have the same name as the original file with "~" added.  See |07.4|
->
-
-	set history=50
-
-Keep 50 commands and 50 search patterns in the history.  Use another number if
-you want to remember fewer or more lines.
+Keep 200 commands and 200 search patterns in the history.  Use another number
+if you want to remember fewer or more lines.  See 'history'.
 >
 
 	set ruler
 
 Always display the current cursor position in the lower right corner of the
-Vim window.
+Vim window.  See 'ruler'.
 
 >
 	set showcmd
@@ -144,10 +215,37 @@ the "2fw" command is executed and the di
 	 ^^^^^^^^^^^		      ^^^^^^^^ ^^^^^^^^^^
 	  'showmode'		     'showcmd'	'ruler'
 
+
+>
+	set wildmenu
+
+Display completion matches in a status line.  That is when you type <Tab> and
+there is more than one match.  See 'wildmenu'.
+
+>
+	set ttimeout
+	set ttimeoutlen=100
+
+This makes typing Esc take effect more quickly.  Normally Vim waits a second
+to see if the Esc is the start of an escape sequence.  If you have a very slow
+remote connection, increase the number.  See 'ttimeout'.
+
+>
+	set display=truncate
+
+Show @@@ in the last line if it is truncated, instead of hiding the whole
+like.  See 'display'.
+
 >
 	set incsearch
 
-Display the match for a search pattern when halfway typing it.
+Display the match for a search pattern when halfway typing it.  See
+'incsearch'.
+
+>
+	set nrformats-=octal
+
+Do not recognize numbers starting with a zero as octal.  See 'nrformats'.
 
 >
 	map Q gq
@@ -158,23 +256,30 @@ it worked before Vim 5.0.  Otherwise the
 will not need it.
 
 >
+	inoremap <C-U> <C-G>u<C-U>
+>
+CTRL-U in insert mode deletes all entered text in the current line.  Use
+CTRL-G u to first break undo, so that you can undo CTRL-U after inserting a
+line break.  Revert with ":iunmap <C-U>".
+
+>
+	if has('mouse')
+	  set mouse=a
+	endif
+
+Enable using the mouse if available.  See 'mouse'.
+
+>
 	vnoremap _g y:exe "grep /" . escape(@", '\\/') . "/ *.c *.h"<CR>
 
 This mapping yanks the visually selected text and searches for it in C files.
-This is a complicated mapping.  You can see that mappings can be used to do
-quite complicated things.  Still, it is just a sequence of commands that are
-executed like you typed them.
+You can see that a mapping can be used to do quite complicated things.  Still,
+it is just a sequence of commands that are executed like you typed them.
 
 >
-	if &t_Co > 2 || has("gui_running")
-	  syntax on
-	  set hlsearch
-	endif
+	syntax on
 
-This switches on syntax highlighting, but only if colors are available.  And
-the 'hlsearch' option tells Vim to highlight matches with the last used search
-pattern.  The "if" command is very useful to set options only when some
-condition is met.  More about that in |usr_41.txt|.
+Enable highlighting files in color.  See |syntax|.
 
 							*vimrc-filetype*  >
 	filetype plugin indent on
@@ -201,21 +306,12 @@ 3. Using indent files
    automatically.  Vim comes with these indent rules for a number of
    filetypes.  See |:filetype-indent-on| and 'indentexpr'.
 
->
-	autocmd FileType text setlocal textwidth=78
 
-This makes Vim break text to avoid lines getting longer than 78 characters.
-But only for files that have been detected to be plain text.  There are
-actually two parts here.  "autocmd FileType text" is an autocommand.  This
-defines that when the file type is set to "text" the following command is
-automatically executed.  "setlocal textwidth=78" sets the 'textwidth' option
-to 78, but only locally in one file.
-
-							*restore-cursor*  >
-	autocmd BufReadPost *
-	    \ if line("'\"") > 1 && line("'\"") <= line("$") |
-	    \   exe "normal! g`\"" |
-	    \ endif
+				*restore-cursor* *last-position-jump*  >
+    autocmd BufReadPost *
+      \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit'
+      \ |   exe "normal! g`\""
+      \ | endif
 
 Another autocommand.  This time it is used after reading any file.  The
 complicated stuff after it checks if the '" mark is defined, and jumps to it
@@ -224,8 +320,22 @@ from the previous line.  That avoids a l
 See |line-continuation|.  This only works in a Vim script file, not when
 typing commands at the command-line.
 
+>
+	command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
+		  \ | wincmd p | diffthis
+
+This adds the ":DiffOrig" command.  Use this in a modified buffer to see the
+differences with the file it was loaded from.  See |diff|.
+
+>
+	set nolangremap
+
+Prevent that the langmap option applies to characters that result from a
+mapping.  If set (default), this may break plugins (but it's backward
+compatible).  See 'langremap'.
+
 ==============================================================================
-*05.3*	Simple mappings
+*05.4*	Simple mappings
 
 A mapping enables you to bind a set of Vim commands to a single key.  Suppose,
 for example, that you need to surround certain words with curly braces.  In
@@ -272,7 +382,7 @@ The ":map" command (with no arguments) l
 least the ones for Normal mode.  More about mappings in section |40.1|.
 
 ==============================================================================
-*05.4*	Adding a package			*add-package* *matchit-install*
+*05.5*	Adding a package			*add-package* *matchit-install*
 
 A package is a set of files that you can add to Vim.  There are two kinds of
 packages: optional and automatically loaded on startup.
@@ -310,7 +420,7 @@ an archive or as a repository.  For an a
 More information about packages can be found here: |packages|.
 
 ==============================================================================
-*05.5*	Adding a plugin					*add-plugin* *plugin*
+*05.6*	Adding a plugin					*add-plugin* *plugin*
 
 Vim's functionality can be extended by adding plugins.  A plugin is nothing
 more than a Vim script file that is loaded automatically when Vim starts.  You
@@ -462,7 +572,7 @@ Further reading:
 |new-filetype|		How to detect a new file type.
 
 ==============================================================================
-*05.6*	Adding a help file				*add-local-help*
+*05.7*	Adding a help file				*add-local-help*
 
 If you are lucky, the plugin you installed also comes with a help file.  We
 will explain how to install the help file, so that you can easily find help
@@ -507,7 +617,7 @@ them through the tag.
 For writing a local help file, see |write-local-help|.
 
 ==============================================================================
-*05.7*	The option window
+*05.8*	The option window
 
 If you are looking for an option that does what you want, you can search in
 the help files here: |options|.  Another way is by using this command: >
@@ -546,7 +656,7 @@ border.  This is what the 'scrolloff' op
 from the window border where scrolling starts.
 
 ==============================================================================
-*05.8*	Often used options
+*05.9*	Often used options
 
 There are an awful lot of options.  Most of them you will hardly ever use.
 Some of the more useful ones will be mentioned here.  Don't forget you can
--- a/runtime/doc/usr_11.txt
+++ b/runtime/doc/usr_11.txt
@@ -1,4 +1,4 @@
-*usr_11.txt*	For Vim version 8.1.  Last change: 2018 Apr 13
+*usr_11.txt*	For Vim version 8.1.  Last change: 2019 Jan 30
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -120,7 +120,7 @@ the resulting files if they are what you
 USING A SPECIFIC SWAP FILE
 
 If you know which swap file needs to be used, you can recover by giving the
-swap file name.  Vim will then finds out the name of the original file from
+swap file name.  Vim will then find out the name of the original file from
 the swap file.
 
 Example: >
@@ -284,7 +284,6 @@ If you really don't want to see this mes
 'shortmess' option.  But it's very unusual that you need this.
 
 For remarks about encryption and the swap file, see |:recover-crypt|.
-For programatic access to the swap file, see |swapinfo()|.
 
 ==============================================================================
 *11.4*	Further reading
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -1,4 +1,4 @@
-*usr_41.txt*	For Vim version 8.1.  Last change: 2019 Jan 12
+*usr_41.txt*	For Vim version 8.1.  Last change: 2019 Jan 29
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -771,7 +771,7 @@ System functions and manipulation of fil
 	systemlist()		get the result of a shell command as a list
 	hostname()		name of the system
 	readfile()		read a file into a List of lines
-	writefile()		write a List of lines into a file
+	writefile()		write a List of lines or Blob into a file
 
 Date and Time:				*date-functions* *time-functions*
 	getftime()		get last modification time of a file
@@ -941,6 +941,7 @@ Testing:				    *test-functions*
 	test_override()		test with Vim internal overrides
 	test_garbagecollect_now()   free memory right now
 	test_ignore_error()	ignore a specific error message
+	test_null_blob()	return a null Blob
 	test_null_channel()	return a null Channel
 	test_null_dict()	return a null Dict
 	test_null_job()		return a null Job
--- a/runtime/evim.vim
+++ b/runtime/evim.vim
@@ -1,6 +1,6 @@
 " Vim script for Evim key bindings
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2017 Sep 20
+" Last Change:	2019 Jan 27
 
 " Don't use Vi-compatible mode.
 set nocompatible
@@ -49,19 +49,14 @@ if &t_Co > 2 || has("gui_running")
   nohlsearch
 endif
 
-" Only do this part when compiled with support for autocommands.
-if has("autocmd")
+" Enable file type detection.
+" Use the default filetype settings, so that mail gets 'tw' set to 72,
+" 'cindent' is on in C files, etc.
+" Also load indent files, to automatically do language-dependent indenting.
+filetype plugin indent on
 
-  " Enable file type detection.
-  " Use the default filetype settings, so that mail gets 'tw' set to 72,
-  " 'cindent' is on in C files, etc.
-  " Also load indent files, to automatically do language-dependent indenting.
-  filetype plugin indent on
-
-  " For all text files set 'textwidth' to 78 characters.
-  au FileType text setlocal tw=78
-
-endif " has("autocmd")
+" For all text files set 'textwidth' to 78 characters.
+au FileType text setlocal tw=78
 
 " Add optional packages.
 "
--- 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:	2019 Jan 18
+" Last Change:	2019 Jan 28
 
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
@@ -97,6 +97,7 @@ au BufNewFile,BufRead proftpd.conf*		cal
 
 " Apache config file
 au BufNewFile,BufRead .htaccess,*/etc/httpd/*.conf		setf apache
+au BufNewFile,BufRead */etc/apache2/sites-*/*.com		setf apache
 
 " XA65 MOS6510 cross assembler
 au BufNewFile,BufRead *.a65			setf a65
--- a/runtime/indent/sh.vim
+++ b/runtime/indent/sh.vim
@@ -3,10 +3,11 @@
 " Maintainer:          Christian Brabandt <cb@256bit.org>
 " Original Author:     Nikolai Weibull <now@bitwi.se>
 " Previous Maintainer: Peter Aronoff <telemachus@arpinum.org>
-" Latest Revision:     2018-03-26
+" Latest Revision:     2019-02-02
 " License:             Vim (see :h license)
 " Repository:          https://github.com/chrisbra/vim-sh-indent
 " Changelog:
+"          20190201  - Better check for closing if sections
 "          20180724  - make check for zsh syntax more rigid (needs word-boundaries)
 "          20180326  - better support for line continuation
 "          20180325  - better detection of function definitions
@@ -59,6 +60,7 @@ function! s:indent_value(option)
 endfunction
 
 function! GetShIndent()
+  let curline = getline(v:lnum)
   let lnum = prevnonblank(v:lnum - 1)
   if lnum == 0
     return 0
@@ -72,7 +74,7 @@ function! GetShIndent()
   " Check contents of previous lines
   if line =~ '^\s*\%(if\|then\|do\|else\|elif\|case\|while\|until\|for\|select\|foreach\)\>' ||
         \  (&ft is# 'zsh' && line =~ '\<\%(if\|then\|do\|else\|elif\|case\|while\|until\|for\|select\|foreach\)\>')
-    if line !~ '\<\%(fi\|esac\|done\|end\)\>\s*\%(#.*\)\=$'
+    if !s:is_end_expression(line)
       let ind += s:indent_value('default')
     endif
   elseif s:is_case_label(line, pnum)
@@ -90,7 +92,10 @@ function! GetShIndent()
     endif
   elseif s:end_block(line) && !s:start_block(line)
     let ind -= s:indent_value('default')
-  elseif pnum != 0 && s:is_continuation_line(pline) && !s:end_block(getline(v:lnum))
+  elseif pnum != 0 &&
+        \ s:is_continuation_line(pline) &&
+        \ !s:end_block(curline) &&
+        \ !s:is_end_expression(curline)
     " only add indent, if line and pline is in the same block
     let i = v:lnum
     let ind2 = indent(s:find_continued_lnum(pnum))
@@ -106,8 +111,15 @@ function! GetShIndent()
 
   let pine = line
   " Check content of current line
-  let line = getline(v:lnum)
-  if line =~ '^\s*\%(then\|do\|else\|elif\|fi\|done\|end\)\>' || s:end_block(line)
+  let line = curline
+  " Current line is a endif line, so get indent from start of "if condition" line
+  " TODO: should we do the same for other "end" lines?
+  if curline =~ '^\s*\%(fi\)\s*\%(#.*\)\=$'
+    let previous_line = search('if.\{-\};\s*then\s*\%(#.*\)\=$', 'bnW')
+    if previous_line > 0
+      let ind = indent(previous_line)
+    endif
+  elseif line =~ '^\s*\%(then\|do\|else\|elif\|done\|end\)\>' || s:end_block(line)
     let ind -= s:indent_value('default')
   elseif line =~ '^\s*esac\>' && s:is_case_empty(getline(v:lnum - 1))
     let ind -= s:indent_value('default')
@@ -210,8 +222,8 @@ endfunction
 
 function! s:is_here_doc(line)
     if a:line =~ '^\w\+$'
-	let here_pat = '<<-\?'. s:escape(a:line). '\$'
-	return search(here_pat, 'bnW') > 0
+      let here_pat = '<<-\?'. s:escape(a:line). '\$'
+      return search(here_pat, 'bnW') > 0
     endif
     return 0
 endfunction
@@ -256,5 +268,9 @@ function! s:is_comment(line)
   return a:line =~ '^\s*#'
 endfunction
 
+function! s:is_end_expression(line)
+  return a:line =~ '\<\%(fi\|esac\|done\|end\)\>\s*\%(#.*\)\=$'
+endfunction
+
 let &cpo = s:cpo_save
 unlet s:cpo_save
--- a/runtime/indent/xml.vim
+++ b/runtime/indent/xml.vim
@@ -1,9 +1,11 @@
 "     Language: xml
 "   Repository: https://github.com/chrisbra/vim-xml-ftplugin
-" Last Changed: Dec 07th, 2018
+" Last Changed: Jan 28, 2019
 "   Maintainer: Christian Brabandt <cb@256bit.org>
 " Previous Maintainer:  Johannes Zellner <johannes@zellner.org>
 " Last Change:
+" 20190128 - Make sure to find previous tag
+"            https://github.com/chrisbra/vim-xml-ftplugin/issues/4
 " 20181116 - Fix indentation when tags start with a colon or an underscore
 "            https://github.com/vim/vim/pull/926
 " 20181022 - Do not overwrite indentkeys setting
@@ -88,15 +90,16 @@ endfun
 fun! XmlIndentGet(lnum, use_syntax_check)
     " Find a non-empty line above the current line.
     let plnum = prevnonblank(a:lnum - 1)
-    " Find previous line with a tag (regardless whether open or closed)
-    let ptag = search('.\{-}<[/:A-Z_a-z]', 'bnw')
-
     " Hit the start of the file, use zero indent.
     if plnum == 0
         return 0
     endif
+    " Find previous line with a tag (regardless whether open or closed,
+    " but always start restrict the match to a line before the current one
+    let ptag_pattern = '\%(.\{-}<[/:A-Z_a-z]\)'. '\%(\&\%<'. line('.').'l\)'
+    let ptag = search(ptag_pattern, 'bnw')
+
     let syn_name = ''
-
     if a:use_syntax_check
         let check_lnum = <SID>XmlIndentSynCheck(plnum)
         let check_alnum = <SID>XmlIndentSynCheck(a:lnum)
--- a/runtime/menu.vim
+++ b/runtime/menu.vim
@@ -2,7 +2,7 @@
 " You can also use this as a start for your own set of menus.
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2018 May 17
+" Last Change:	2019 Jan 27
 
 " Note that ":an" (short for ":anoremenu") is often used to make a menu work
 " in all modes and avoid side effects from mappings defined by the user.
@@ -856,17 +856,15 @@ an 70.300 &Window.&New<Tab>^Wn			<C-W>n
 an 70.310 &Window.S&plit<Tab>^Ws		<C-W>s
 an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^	<C-W><C-^>
 an 70.330 &Window.Split\ &Vertically<Tab>^Wv	<C-W>v
-if has("vertsplit")
-  an <silent> 70.332 &Window.Split\ File\ E&xplorer	:call MenuExplOpen()<CR>
-  if !exists("*MenuExplOpen")
-    fun MenuExplOpen()
-      if @% == ""
-	20vsp .
-      else
-	exe "20vsp " . s:FnameEscape(expand("%:p:h"))
-      endif
-    endfun
-  endif
+an <silent> 70.332 &Window.Split\ File\ E&xplorer	:call MenuExplOpen()<CR>
+if !exists("*MenuExplOpen")
+  fun MenuExplOpen()
+    if @% == ""
+      20vsp .
+    else
+      exe "20vsp " . s:FnameEscape(expand("%:p:h"))
+    endif
+  endfun
 endif
 an 70.335 &Window.-SEP1-				<Nop>
 an 70.340 &Window.&Close<Tab>^Wc			:confirm close<CR>
--- a/runtime/optwin.vim
+++ b/runtime/optwin.vim
@@ -1,7 +1,7 @@
 " These commands create the option window.
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2018 May 15
+" Last Change:	2019 Jan 27
 
 " If there already is an option window, jump to that one.
 let buf = bufnr('option-window')
@@ -395,11 +395,9 @@ endif
 call <SID>Header("syntax, highlighting and spelling")
 call append("$", "background\t\"dark\" or \"light\"; the background color brightness")
 call <SID>OptionG("bg", &bg)
-if has("autocmd")
-  call append("$", "filetype\ttype of file; triggers the FileType event when set")
-  call append("$", "\t(local to buffer)")
-  call <SID>OptionL("ft")
-endif
+call append("$", "filetype\ttype of file; triggers the FileType event when set")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("ft")
 if has("syntax")
   call append("$", "syntax\tname of syntax highlighting used")
   call append("$", "\t(local to buffer)")
@@ -454,10 +452,8 @@ if has("statusline")
 endif
 call append("$", "equalalways\tmake all windows the same size when adding/removing windows")
 call <SID>BinOptionG("ea", &ea)
-if has("vertsplit")
-  call append("$", "eadirection\tin which direction 'equalalways' works: \"ver\", \"hor\" or \"both\"")
-  call <SID>OptionG("ead", &ead)
-endif
+call append("$", "eadirection\tin which direction 'equalalways' works: \"ver\", \"hor\" or \"both\"")
+call <SID>OptionG("ead", &ead)
 call append("$", "winheight\tminimal number of lines used for the current window")
 call append("$", " \tset wh=" . &wh)
 call append("$", "winminheight\tminimal number of lines used for any window")
@@ -465,15 +461,13 @@ call append("$", " \tset wmh=" . &wmh)
 call append("$", "winfixheight\tkeep the height of the window")
 call append("$", "\t(local to window)")
 call <SID>BinOptionL("wfh")
-if has("vertsplit")
 call append("$", "winfixwidth\tkeep the width of the window")
 call append("$", "\t(local to window)")
 call <SID>BinOptionL("wfw")
-  call append("$", "winwidth\tminimal number of columns used for the current window")
-  call append("$", " \tset wiw=" . &wiw)
-  call append("$", "winminwidth\tminimal number of columns used for any window")
-  call append("$", " \tset wmw=" . &wmw)
-endif
+call append("$", "winwidth\tminimal number of columns used for the current window")
+call append("$", " \tset wiw=" . &wiw)
+call append("$", "winminwidth\tminimal number of columns used for any window")
+call append("$", " \tset wmw=" . &wmw)
 call append("$", "helpheight\tinitial height of the help window")
 call append("$", " \tset hh=" . &hh)
 if has("quickfix")
@@ -490,22 +484,16 @@ call append("$", "\tto a buffer")
 call <SID>OptionG("swb", &swb)
 call append("$", "splitbelow\ta new window is put below the current one")
 call <SID>BinOptionG("sb", &sb)
-if has("vertsplit")
-  call append("$", "splitright\ta new window is put right of the current one")
-  call <SID>BinOptionG("spr", &spr)
-endif
-if has("scrollbind")
-  call append("$", "scrollbind\tthis window scrolls together with other bound windows")
-  call append("$", "\t(local to window)")
-  call <SID>BinOptionL("scb")
-  call append("$", "scrollopt\t\"ver\", \"hor\" and/or \"jump\"; list of options for 'scrollbind'")
-  call <SID>OptionG("sbo", &sbo)
-endif
-if has("cursorbind")
-  call append("$", "cursorbind\tthis window's cursor moves together with other bound windows")
-  call append("$", "\t(local to window)")
-  call <SID>BinOptionL("crb")
-endif
+call append("$", "splitright\ta new window is put right of the current one")
+call <SID>BinOptionG("spr", &spr)
+call append("$", "scrollbind\tthis window scrolls together with other bound windows")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("scb")
+call append("$", "scrollopt\t\"ver\", \"hor\" and/or \"jump\"; list of options for 'scrollbind'")
+call <SID>OptionG("sbo", &sbo)
+call append("$", "cursorbind\tthis window's cursor moves together with other bound windows")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("crb")
 if has("terminal")
   call append("$", "termwinsize\tsize of a terminal window")
   call append("$", "\t(local to window)")
@@ -1105,12 +1093,10 @@ if has("wildmenu")
   call append("$", "wildmenu\tcommand-line completion shows a list of matches")
   call <SID>BinOptionG("wmnu", &wmnu)
 endif
-if has("vertsplit")
-  call append("$", "cedit\tkey used to open the command-line window")
-  call <SID>OptionG("cedit", &cedit)
-  call append("$", "cmdwinheight\theight of the command-line window")
-  call <SID>OptionG("cwh", &cwh)
-endif
+call append("$", "cedit\tkey used to open the command-line window")
+call <SID>OptionG("cedit", &cedit)
+call append("$", "cmdwinheight\theight of the command-line window")
+call <SID>OptionG("cwh", &cwh)
 
 
 call <SID>Header("executing external commands")
@@ -1292,14 +1278,10 @@ endif
 
 
 call <SID>Header("various")
-if has("virtualedit")
-  call append("$", "virtualedit\twhen to use virtual editing: \"block\", \"insert\" and/or \"all\"")
-  call <SID>OptionG("ve", &ve)
-endif
-if has("autocmd")
-  call append("$", "eventignore\tlist of autocommand events which are to be ignored")
-  call <SID>OptionG("ei", &ei)
-endif
+call append("$", "virtualedit\twhen to use virtual editing: \"block\", \"insert\" and/or \"all\"")
+call <SID>OptionG("ve", &ve)
+call append("$", "eventignore\tlist of autocommand events which are to be ignored")
+call <SID>OptionG("ei", &ei)
 call append("$", "loadplugins\tload plugin scripts when starting up")
 call <SID>BinOptionG("lpl", &lpl)
 call append("$", "exrc\tenable reading .vimrc/.exrc/.gvimrc in the current directory")
--- a/runtime/pack/dist/opt/matchit/doc/matchit.txt
+++ b/runtime/pack/dist/opt/matchit/doc/matchit.txt
@@ -1,13 +1,13 @@
 *matchit.txt*   Extended "%" matching
 
 For instructions on installing this file, type
-	:help matchit-install
+	`:help matchit-install`
 inside Vim.
 
-For Vim version 6.3.  Last change:  2018 Dec 31
+For Vim version 8.1.  Last change:  2019 Jan 28
 
 
-		  VIM REFERENCE MANUAL    by Benji Fisher
+		  VIM REFERENCE MANUAL    by Benji Fisher et al
 
 *matchit* *matchit.vim*
 
@@ -69,12 +69,8 @@ for how to specify matching patterns.
 
 MODES:			*matchit-modes* *matchit-v_%* *matchit-o_%*
 
-Mostly, % and related motions (|g%| and |[%| and |]%|) work just like built-in
-|motion| commands in |Operator-pending| and |Visual| modes.  However, you
-cannot make these motions |linewise| or |characterwise|, since the |:omap|s
-that define them start with "v" in order to make the default behavior
-inclusive.  (See |o_v|.)  In other words, "dV%" will not work.  The
-work-around is to go through Visual mode:  "V%d" will work.
+Mostly, % and related motions (|g%| and |[%| and |]%|) should just work like built-in
+|motion| commands in |Operator-pending| and |Visual| modes (as of 8.1.648)
 
 LANGUAGES:					*matchit-languages*
 
@@ -386,16 +382,10 @@ try to respond to reports of bugs that c
 cause serious problems, or if there is a work-around, a bug may sit there for
 a while.  Moral:  if a bug (known or not) bothers you, let me know.
 
-The various |:vmap|s defined in the script (%, |g%|, |[%|, |]%|, |a%|) may
-have undesired effects in Select mode |Select-mode-mapping|.  At least, if you
-want to replace the selection with any character in "ag%[]" there will be a
-pause of |'updatetime'| first. E.g., "yV%" would normally work linewise, but
-the plugin mapping makes it characterwise.
-
 It would be nice if "\0" were recognized as the entire pattern.  That is, it
 would be nice if "foo:\end\0" had the same effect as "\(foo\):\end\1".  I may
 try to implement this in a future version.  (This is not so easy to arrange as
 you might think!)
 
 ==============================================================================
-vim:tw=78:fo=tcq2:
+vim:tw=78:fo=tcq2:ft=help:
--- a/runtime/pack/dist/opt/matchit/plugin/matchit.vim
+++ b/runtime/pack/dist/opt/matchit/plugin/matchit.vim
@@ -1,13 +1,13 @@
 "  matchit.vim: (global plugin) Extended "%" matching
-"  Last Change: 2018 Dec 31
-"  Maintainer:  Benji Fisher PhD   <benji@member.AMS.org>
-"  Version:     1.13.3, for Vim 6.3+
-"		Fix from Fernando Torres included.
-"		Improvement from Ken Takata included.
-"  URL:		http://www.vim.org/script.php?script_id=39
+"  Maintainer:  Christian Brabandt
+"  Version:     1.15
+"  Last Change: 2019 Jan 28
+"  Repository:  https://github.com/chrisbra/matchit
+"  Previous URL:http://www.vim.org/script.php?script_id=39
+"  Previous Maintainer:  Benji Fisher PhD   <benji@member.AMS.org>
 
 " Documentation:
-"  The documentation is in a separate file, matchit.txt .
+"  The documentation is in a separate file: ../doc/matchit.txt .
 
 " Credits:
 "  Vim editor by Bram Moolenaar (Thanks, Bram!)
@@ -38,789 +38,55 @@
 "   work but extend it.
 
 " Allow user to prevent loading and prevent duplicate loading.
-if exists("loaded_matchit") || &cp
+if exists("g:loaded_matchit") || &cp
   finish
 endif
-let loaded_matchit = 1
-let s:last_mps = ""
-let s:last_words = ":"
-let s:patBR = ""
+let g:loaded_matchit = 1
 
 let s:save_cpo = &cpo
 set cpo&vim
 
-nnoremap <silent> %  :<C-U>call <SID>Match_wrapper('',1,'n') <CR>
-nnoremap <silent> g% :<C-U>call <SID>Match_wrapper('',0,'n') <CR>
-vnoremap <silent> %  :<C-U>call <SID>Match_wrapper('',1,'v') <CR>m'gv``
-vnoremap <silent> g% :<C-U>call <SID>Match_wrapper('',0,'v') <CR>m'gv``
-onoremap <silent> %  v:<C-U>call <SID>Match_wrapper('',1,'o') <CR>
-onoremap <silent> g% v:<C-U>call <SID>Match_wrapper('',0,'o') <CR>
+nnoremap <silent> <Plug>(MatchitNormalForward)     :<C-U>call matchit#Match_wrapper('',1,'n')<CR>
+nnoremap <silent> <Plug>(MatchitNormalBackward)    :<C-U>call matchit#Match_wrapper('',0,'n')<CR>
+vnoremap <silent> <Plug>(MatchitVisualForward)     :<C-U>call matchit#Match_wrapper('',1,'v')<CR>m'gv``
+vnoremap <silent> <Plug>(MatchitVisualBackward)    :<C-U>call matchit#Match_wrapper('',0,'v')<CR>m'gv``
+onoremap <silent> <Plug>(MatchitOperationForward)  :<C-U>call matchit#Match_wrapper('',1,'o')<CR>
+onoremap <silent> <Plug>(MatchitOperationBackward) :<C-U>call matchit#Match_wrapper('',0,'o')<CR>
+
+nmap <silent> %  <Plug>(MatchitNormalForward)
+nmap <silent> g% <Plug>(MatchitNormalBackward)
+xmap <silent> %  <Plug>(MatchitVisualForward)
+xmap <silent> g% <Plug>(MatchitVisualBackward)
+omap <silent> %  <Plug>(MatchitOperationForward)
+omap <silent> g% <Plug>(MatchitOperationBackward)
 
 " Analogues of [{ and ]} using matching patterns:
-nnoremap <silent> [% :<C-U>call <SID>MultiMatch("bW", "n") <CR>
-nnoremap <silent> ]% :<C-U>call <SID>MultiMatch("W",  "n") <CR>
-vmap [% <Esc>[%m'gv``
-vmap ]% <Esc>]%m'gv``
-" vnoremap <silent> [% :<C-U>call <SID>MultiMatch("bW", "v") <CR>m'gv``
-" vnoremap <silent> ]% :<C-U>call <SID>MultiMatch("W",  "v") <CR>m'gv``
-onoremap <silent> [% v:<C-U>call <SID>MultiMatch("bW", "o") <CR>
-onoremap <silent> ]% v:<C-U>call <SID>MultiMatch("W",  "o") <CR>
+nnoremap <silent> <Plug>(MatchitNormalMultiBackward)    :<C-U>call matchit#MultiMatch("bW", "n")<CR>
+nnoremap <silent> <Plug>(MatchitNormalMultiForward)     :<C-U>call matchit#MultiMatch("W",  "n")<CR>
+vnoremap <silent> <Plug>(MatchitVisualMultiBackward)    :<C-U>call matchit#MultiMatch("bW", "n")<CR>m'gv``
+vnoremap <silent> <Plug>(MatchitVisualMultiForward)     :<C-U>call matchit#MultiMatch("W",  "n")<CR>m'gv``
+onoremap <silent> <Plug>(MatchitOperationMultiBackward) :<C-U>call matchit#MultiMatch("bW", "o")<CR>
+onoremap <silent> <Plug>(MatchitOperationMultiForward)  :<C-U>call matchit#MultiMatch("W",  "o")<CR>
+
+nmap <silent> [% <Plug>(MatchitNormalMultiBackward)
+nmap <silent> ]% <Plug>(MatchitNormalMultiForward)
+xmap <silent> [% <Plug>(MatchitVisualMultiBackward)
+xmap <silent> ]% <Plug>(MatchitVisualMultiForward)
+omap <silent> [% <Plug>(MatchitOperationMultiBackward)
+omap <silent> ]% <Plug>(MatchitOperationMultiForward)
 
 " text object:
-vmap a% <Esc>[%v]%
-
-" Auto-complete mappings:  (not yet "ready for prime time")
-" TODO Read :help write-plugin for the "right" way to let the user
-" specify a key binding.
-"   let g:match_auto = '<C-]>'
-"   let g:match_autoCR = '<C-CR>'
-" if exists("g:match_auto")
-"   execute "inoremap " . g:match_auto . ' x<Esc>"=<SID>Autocomplete()<CR>Pls'
-" endif
-" if exists("g:match_autoCR")
-"   execute "inoremap " . g:match_autoCR . ' <CR><C-R>=<SID>Autocomplete()<CR>'
-" endif
-" if exists("g:match_gthhoh")
-"   execute "inoremap " . g:match_gthhoh . ' <C-O>:call <SID>Gthhoh()<CR>'
-" endif " gthhoh = "Get the heck out of here!"
-
-let s:notslash = '\\\@<!\%(\\\\\)*'
-
-function! s:Match_wrapper(word, forward, mode) range
-  " In s:CleanUp(), :execute "set" restore_options .
-  let restore_options = ""
-  if exists("b:match_ignorecase") && b:match_ignorecase != &ic
-    let restore_options .= (&ic ? " " : " no") . "ignorecase"
-    let &ignorecase = b:match_ignorecase
-  endif
-  if &ve != ''
-    let restore_options = " ve=" . &ve . restore_options
-    set ve=
-  endif
-  " If this function was called from Visual mode, make sure that the cursor
-  " is at the correct end of the Visual range:
-  if a:mode == "v"
-    execute "normal! gv\<Esc>"
-  endif
-  " In s:CleanUp(), we may need to check whether the cursor moved forward.
-  let startline = line(".")
-  let startcol = col(".")
-  " Use default behavior if called with a count.
-  if v:count
-    exe "normal! " . v:count . "%"
-    return s:CleanUp(restore_options, a:mode, startline, startcol)
-  end
-
-  " First step:  if not already done, set the script variables
-  "   s:do_BR	flag for whether there are backrefs
-  "   s:pat	parsed version of b:match_words
-  "   s:all	regexp based on s:pat and the default groups
-  "
-  if !exists("b:match_words") || b:match_words == ""
-    let match_words = ""
-    " Allow b:match_words = "GetVimMatchWords()" .
-  elseif b:match_words =~ ":"
-    let match_words = b:match_words
-  else
-    execute "let match_words =" b:match_words
-  endif
-" Thanks to Preben "Peppe" Guldberg and Bram Moolenaar for this suggestion!
-  if (match_words != s:last_words) || (&mps != s:last_mps)
-      \ || exists("b:match_debug")
-    let s:last_mps = &mps
-    " The next several lines were here before
-    " BF started messing with this script.
-    " quote the special chars in 'matchpairs', replace [,:] with \| and then
-    " append the builtin pairs (/*, */, #if, #ifdef, #else, #elif, #endif)
-    " let default = substitute(escape(&mps, '[$^.*~\\/?]'), '[,:]\+',
-    "  \ '\\|', 'g').'\|\/\*\|\*\/\|#if\>\|#ifdef\>\|#else\>\|#elif\>\|#endif\>'
-    let default = escape(&mps, '[$^.*~\\/?]') . (strlen(&mps) ? "," : "") .
-      \ '\/\*:\*\/,#\s*if\%(def\)\=:#\s*else\>:#\s*elif\>:#\s*endif\>'
-    " s:all = pattern with all the keywords
-    let match_words = match_words . (strlen(match_words) ? "," : "") . default
-    let s:last_words = match_words
-    if match_words !~ s:notslash . '\\\d'
-      let s:do_BR = 0
-      let s:pat = match_words
-    else
-      let s:do_BR = 1
-      let s:pat = s:ParseWords(match_words)
-    endif
-    let s:all = substitute(s:pat, s:notslash . '\zs[,:]\+', '\\|', 'g')
-    let s:all = '\%(' . s:all . '\)'
-    " let s:all = '\%(' . substitute(s:all, '\\\ze[,:]', '', 'g') . '\)'
-    if exists("b:match_debug")
-      let b:match_pat = s:pat
-    endif
-    " Reconstruct the version with unresolved backrefs.
-    let s:patBR = substitute(match_words.',',
-      \ s:notslash.'\zs[,:]*,[,:]*', ',', 'g')
-    let s:patBR = substitute(s:patBR, s:notslash.'\zs:\{2,}', ':', 'g')
-  endif
-
-  " Second step:  set the following local variables:
-  "     matchline = line on which the cursor started
-  "     curcol    = number of characters before match
-  "     prefix    = regexp for start of line to start of match
-  "     suffix    = regexp for end of match to end of line
-  " Require match to end on or after the cursor and prefer it to
-  " start on or before the cursor.
-  let matchline = getline(startline)
-  if a:word != ''
-    " word given
-    if a:word !~ s:all
-      echohl WarningMsg|echo 'Missing rule for word:"'.a:word.'"'|echohl NONE
-      return s:CleanUp(restore_options, a:mode, startline, startcol)
-    endif
-    let matchline = a:word
-    let curcol = 0
-    let prefix = '^\%('
-    let suffix = '\)$'
-  " Now the case when "word" is not given
-  else	" Find the match that ends on or after the cursor and set curcol.
-    let regexp = s:Wholematch(matchline, s:all, startcol-1)
-    let curcol = match(matchline, regexp)
-    " If there is no match, give up.
-    if curcol == -1
-      return s:CleanUp(restore_options, a:mode, startline, startcol)
-    endif
-    let endcol = matchend(matchline, regexp)
-    let suf = strlen(matchline) - endcol
-    let prefix = (curcol ? '^.*\%'  . (curcol + 1) . 'c\%(' : '^\%(')
-    let suffix = (suf ? '\)\%' . (endcol + 1) . 'c.*$'  : '\)$')
-  endif
-  if exists("b:match_debug")
-    let b:match_match = matchstr(matchline, regexp)
-    let b:match_col = curcol+1
-  endif
-
-  " Third step:  Find the group and single word that match, and the original
-  " (backref) versions of these.  Then, resolve the backrefs.
-  " Set the following local variable:
-  " group = colon-separated list of patterns, one of which matches
-  "       = ini:mid:fin or ini:fin
-  "
-  " Now, set group and groupBR to the matching group: 'if:endif' or
-  " 'while:endwhile' or whatever.  A bit of a kluge:  s:Choose() returns
-  " group . "," . groupBR, and we pick it apart.
-  let group = s:Choose(s:pat, matchline, ",", ":", prefix, suffix, s:patBR)
-  let i = matchend(group, s:notslash . ",")
-  let groupBR = strpart(group, i)
-  let group = strpart(group, 0, i-1)
-  " Now, matchline =~ prefix . substitute(group,':','\|','g') . suffix
-  if s:do_BR " Do the hard part:  resolve those backrefs!
-    let group = s:InsertRefs(groupBR, prefix, group, suffix, matchline)
-  endif
-  if exists("b:match_debug")
-    let b:match_wholeBR = groupBR
-    let i = matchend(groupBR, s:notslash . ":")
-    let b:match_iniBR = strpart(groupBR, 0, i-1)
-  endif
-
-  " Fourth step:  Set the arguments for searchpair().
-  let i = matchend(group, s:notslash . ":")
-  let j = matchend(group, '.*' . s:notslash . ":")
-  let ini = strpart(group, 0, i-1)
-  let mid = substitute(strpart(group, i,j-i-1), s:notslash.'\zs:', '\\|', 'g')
-  let fin = strpart(group, j)
-  "Un-escape the remaining , and : characters.
-  let ini = substitute(ini, s:notslash . '\zs\\\(:\|,\)', '\1', 'g')
-  let mid = substitute(mid, s:notslash . '\zs\\\(:\|,\)', '\1', 'g')
-  let fin = substitute(fin, s:notslash . '\zs\\\(:\|,\)', '\1', 'g')
-  " searchpair() requires that these patterns avoid \(\) groups.
-  let ini = substitute(ini, s:notslash . '\zs\\(', '\\%(', 'g')
-  let mid = substitute(mid, s:notslash . '\zs\\(', '\\%(', 'g')
-  let fin = substitute(fin, s:notslash . '\zs\\(', '\\%(', 'g')
-  " Set mid.  This is optimized for readability, not micro-efficiency!
-  if a:forward && matchline =~ prefix . fin . suffix
-    \ || !a:forward && matchline =~ prefix . ini . suffix
-    let mid = ""
-  endif
-  " Set flag.  This is optimized for readability, not micro-efficiency!
-  if a:forward && matchline =~ prefix . fin . suffix
-    \ || !a:forward && matchline !~ prefix . ini . suffix
-    let flag = "bW"
-  else
-    let flag = "W"
-  endif
-  " Set skip.
-  if exists("b:match_skip")
-    let skip = b:match_skip
-  elseif exists("b:match_comment") " backwards compatibility and testing!
-    let skip = "r:" . b:match_comment
-  else
-    let skip = 's:comment\|string'
-  endif
-  let skip = s:ParseSkip(skip)
-  if exists("b:match_debug")
-    let b:match_ini = ini
-    let b:match_tail = (strlen(mid) ? mid.'\|' : '') . fin
-  endif
-
-  " Fifth step:  actually start moving the cursor and call searchpair().
-  " Later, :execute restore_cursor to get to the original screen.
-  let restore_cursor = virtcol(".") . "|"
-  normal! g0
-  let restore_cursor = line(".") . "G" .  virtcol(".") . "|zs" . restore_cursor
-  normal! H
-  let restore_cursor = "normal!" . line(".") . "Gzt" . restore_cursor
-  execute restore_cursor
-  call cursor(0, curcol + 1)
-  " normal! 0
-  " if curcol
-  "   execute "normal!" . curcol . "l"
-  " endif
-  if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on"))
-    let skip = '0'
-  else
-    execute "if " . skip . "| let skip = '0' | endif"
-  endif
-  let sp_return = searchpair(ini, mid, fin, flag, skip)
-  let final_position = "call cursor(" . line(".") . "," . col(".") . ")"
-  " Restore cursor position and original screen.
-  execute restore_cursor
-  normal! m'
-  if sp_return > 0
-    execute final_position
-  endif
-  return s:CleanUp(restore_options, a:mode, startline, startcol, mid.'\|'.fin)
-endfun
-
-" Restore options and do some special handling for Operator-pending mode.
-" The optional argument is the tail of the matching group.
-fun! s:CleanUp(options, mode, startline, startcol, ...)
-  if strlen(a:options)
-    execute "set" a:options
-  endif
-  " Open folds, if appropriate.
-  if a:mode != "o"
-    if &foldopen =~ "percent"
-      normal! zv
-    endif
-    " In Operator-pending mode, we want to include the whole match
-    " (for example, d%).
-    " This is only a problem if we end up moving in the forward direction.
-  elseif (a:startline < line(".")) ||
-	\ (a:startline == line(".") && a:startcol < col("."))
-    if a:0
-      " Check whether the match is a single character.  If not, move to the
-      " end of the match.
-      let matchline = getline(".")
-      let currcol = col(".")
-      let regexp = s:Wholematch(matchline, a:1, currcol-1)
-      let endcol = matchend(matchline, regexp)
-      if endcol > currcol  " This is NOT off by one!
-	call cursor(0, endcol)
-      endif
-    endif " a:0
-  endif " a:mode != "o" && etc.
-  return 0
-endfun
-
-" Example (simplified HTML patterns):  if
-"   a:groupBR	= '<\(\k\+\)>:</\1>'
-"   a:prefix	= '^.\{3}\('
-"   a:group	= '<\(\k\+\)>:</\(\k\+\)>'
-"   a:suffix	= '\).\{2}$'
-"   a:matchline	=  "123<tag>12" or "123</tag>12"
-" then extract "tag" from a:matchline and return "<tag>:</tag>" .
-fun! s:InsertRefs(groupBR, prefix, group, suffix, matchline)
-  if a:matchline !~ a:prefix .
-    \ substitute(a:group, s:notslash . '\zs:', '\\|', 'g') . a:suffix
-    return a:group
-  endif
-  let i = matchend(a:groupBR, s:notslash . ':')
-  let ini = strpart(a:groupBR, 0, i-1)
-  let tailBR = strpart(a:groupBR, i)
-  let word = s:Choose(a:group, a:matchline, ":", "", a:prefix, a:suffix,
-    \ a:groupBR)
-  let i = matchend(word, s:notslash . ":")
-  let wordBR = strpart(word, i)
-  let word = strpart(word, 0, i-1)
-  " Now, a:matchline =~ a:prefix . word . a:suffix
-  if wordBR != ini
-    let table = s:Resolve(ini, wordBR, "table")
-  else
-    " let table = "----------"
-    let table = ""
-    let d = 0
-    while d < 10
-      if tailBR =~ s:notslash . '\\' . d
-	" let table[d] = d
-	let table = table . d
-      else
-	let table = table . "-"
-      endif
-      let d = d + 1
-    endwhile
-  endif
-  let d = 9
-  while d
-    if table[d] != "-"
-      let backref = substitute(a:matchline, a:prefix.word.a:suffix,
-	\ '\'.table[d], "")
-	" Are there any other characters that should be escaped?
-      let backref = escape(backref, '*,:')
-      execute s:Ref(ini, d, "start", "len")
-      let ini = strpart(ini, 0, start) . backref . strpart(ini, start+len)
-      let tailBR = substitute(tailBR, s:notslash . '\zs\\' . d,
-	\ escape(backref, '\\&'), 'g')
-    endif
-    let d = d-1
-  endwhile
-  if exists("b:match_debug")
-    if s:do_BR
-      let b:match_table = table
-      let b:match_word = word
-    else
-      let b:match_table = ""
-      let b:match_word = ""
-    endif
-  endif
-  return ini . ":" . tailBR
-endfun
-
-" Input a comma-separated list of groups with backrefs, such as
-"   a:groups = '\(foo\):end\1,\(bar\):end\1'
-" and return a comma-separated list of groups with backrefs replaced:
-"   return '\(foo\):end\(foo\),\(bar\):end\(bar\)'
-fun! s:ParseWords(groups)
-  let groups = substitute(a:groups.",", s:notslash.'\zs[,:]*,[,:]*', ',', 'g')
-  let groups = substitute(groups, s:notslash . '\zs:\{2,}', ':', 'g')
-  let parsed = ""
-  while groups =~ '[^,:]'
-    let i = matchend(groups, s:notslash . ':')
-    let j = matchend(groups, s:notslash . ',')
-    let ini = strpart(groups, 0, i-1)
-    let tail = strpart(groups, i, j-i-1) . ":"
-    let groups = strpart(groups, j)
-    let parsed = parsed . ini
-    let i = matchend(tail, s:notslash . ':')
-    while i != -1
-      " In 'if:else:endif', ini='if' and word='else' and then word='endif'.
-      let word = strpart(tail, 0, i-1)
-      let tail = strpart(tail, i)
-      let i = matchend(tail, s:notslash . ':')
-      let parsed = parsed . ":" . s:Resolve(ini, word, "word")
-    endwhile " Now, tail has been used up.
-    let parsed = parsed . ","
-  endwhile " groups =~ '[^,:]'
-  let parsed = substitute(parsed, ',$', '', '')
-  return parsed
-endfun
-
-" TODO I think this can be simplified and/or made more efficient.
-" TODO What should I do if a:start is out of range?
-" Return a regexp that matches all of a:string, such that
-" matchstr(a:string, regexp) represents the match for a:pat that starts
-" as close to a:start as possible, before being preferred to after, and
-" ends after a:start .
-" Usage:
-" let regexp = s:Wholematch(getline("."), 'foo\|bar', col(".")-1)
-" let i      = match(getline("."), regexp)
-" let j      = matchend(getline("."), regexp)
-" let match  = matchstr(getline("."), regexp)
-fun! s:Wholematch(string, pat, start)
-  let group = '\%(' . a:pat . '\)'
-  let prefix = (a:start ? '\(^.*\%<' . (a:start + 2) . 'c\)\zs' : '^')
-  let len = strlen(a:string)
-  let suffix = (a:start+1 < len ? '\(\%>'.(a:start+1).'c.*$\)\@=' : '$')
-  if a:string !~ prefix . group . suffix
-    let prefix = ''
-  endif
-  return prefix . group . suffix
-endfun
-
-" No extra arguments:  s:Ref(string, d) will
-" find the d'th occurrence of '\(' and return it, along with everything up
-" to and including the matching '\)'.
-" One argument:  s:Ref(string, d, "start") returns the index of the start
-" of the d'th '\(' and any other argument returns the length of the group.
-" Two arguments:  s:Ref(string, d, "foo", "bar") returns a string to be
-" executed, having the effect of
-"   :let foo = s:Ref(string, d, "start")
-"   :let bar = s:Ref(string, d, "len")
-fun! s:Ref(string, d, ...)
-  let len = strlen(a:string)
-  if a:d == 0
-    let start = 0
-  else
-    let cnt = a:d
-    let match = a:string
-    while cnt
-      let cnt = cnt - 1
-      let index = matchend(match, s:notslash . '\\(')
-      if index == -1
-	return ""
-      endif
-      let match = strpart(match, index)
-    endwhile
-    let start = len - strlen(match)
-    if a:0 == 1 && a:1 == "start"
-      return start - 2
-    endif
-    let cnt = 1
-    while cnt
-      let index = matchend(match, s:notslash . '\\(\|\\)') - 1
-      if index == -2
-	return ""
-      endif
-      " Increment if an open, decrement if a ')':
-      let cnt = cnt + (match[index]=="(" ? 1 : -1)  " ')'
-      " let cnt = stridx('0(', match[index]) + cnt
-      let match = strpart(match, index+1)
-    endwhile
-    let start = start - 2
-    let len = len - start - strlen(match)
-  endif
-  if a:0 == 1
-    return len
-  elseif a:0 == 2
-    return "let " . a:1 . "=" . start . "| let " . a:2 . "=" . len
-  else
-    return strpart(a:string, start, len)
-  endif
-endfun
-
-" Count the number of disjoint copies of pattern in string.
-" If the pattern is a literal string and contains no '0' or '1' characters
-" then s:Count(string, pattern, '0', '1') should be faster than
-" s:Count(string, pattern).
-fun! s:Count(string, pattern, ...)
-  let pat = escape(a:pattern, '\\')
-  if a:0 > 1
-    let foo = substitute(a:string, '[^'.a:pattern.']', "a:1", "g")
-    let foo = substitute(a:string, pat, a:2, "g")
-    let foo = substitute(foo, '[^' . a:2 . ']', "", "g")
-    return strlen(foo)
-  endif
-  let result = 0
-  let foo = a:string
-  let index = matchend(foo, pat)
-  while index != -1
-    let result = result + 1
-    let foo = strpart(foo, index)
-    let index = matchend(foo, pat)
-  endwhile
-  return result
-endfun
-
-" s:Resolve('\(a\)\(b\)', '\(c\)\2\1\1\2') should return table.word, where
-" word = '\(c\)\(b\)\(a\)\3\2' and table = '-32-------'.  That is, the first
-" '\1' in target is replaced by '\(a\)' in word, table[1] = 3, and this
-" indicates that all other instances of '\1' in target are to be replaced
-" by '\3'.  The hard part is dealing with nesting...
-" Note that ":" is an illegal character for source and target,
-" unless it is preceded by "\".
-fun! s:Resolve(source, target, output)
-  let word = a:target
-  let i = matchend(word, s:notslash . '\\\d') - 1
-  let table = "----------"
-  while i != -2 " There are back references to be replaced.
-    let d = word[i]
-    let backref = s:Ref(a:source, d)
-    " The idea is to replace '\d' with backref.  Before we do this,
-    " replace any \(\) groups in backref with :1, :2, ... if they
-    " correspond to the first, second, ... group already inserted
-    " into backref.  Later, replace :1 with \1 and so on.  The group
-    " number w+b within backref corresponds to the group number
-    " s within a:source.
-    " w = number of '\(' in word before the current one
-    let w = s:Count(
-    \ substitute(strpart(word, 0, i-1), '\\\\', '', 'g'), '\(', '1')
-    let b = 1 " number of the current '\(' in backref
-    let s = d " number of the current '\(' in a:source
-    while b <= s:Count(substitute(backref, '\\\\', '', 'g'), '\(', '1')
-    \ && s < 10
-      if table[s] == "-"
-	if w + b < 10
-	  " let table[s] = w + b
-	  let table = strpart(table, 0, s) . (w+b) . strpart(table, s+1)
-	endif
-	let b = b + 1
-	let s = s + 1
-      else
-	execute s:Ref(backref, b, "start", "len")
-	let ref = strpart(backref, start, len)
-	let backref = strpart(backref, 0, start) . ":". table[s]
-	\ . strpart(backref, start+len)
-	let s = s + s:Count(substitute(ref, '\\\\', '', 'g'), '\(', '1')
-      endif
-    endwhile
-    let word = strpart(word, 0, i-1) . backref . strpart(word, i+1)
-    let i = matchend(word, s:notslash . '\\\d') - 1
-  endwhile
-  let word = substitute(word, s:notslash . '\zs:', '\\', 'g')
-  if a:output == "table"
-    return table
-  elseif a:output == "word"
-    return word
-  else
-    return table . word
-  endif
-endfun
-
-" Assume a:comma = ",".  Then the format for a:patterns and a:1 is
-"   a:patterns = "<pat1>,<pat2>,..."
-"   a:1 = "<alt1>,<alt2>,..."
-" If <patn> is the first pattern that matches a:string then return <patn>
-" if no optional arguments are given; return <patn>,<altn> if a:1 is given.
-fun! s:Choose(patterns, string, comma, branch, prefix, suffix, ...)
-  let tail = (a:patterns =~ a:comma."$" ? a:patterns : a:patterns . a:comma)
-  let i = matchend(tail, s:notslash . a:comma)
-  if a:0
-    let alttail = (a:1 =~ a:comma."$" ? a:1 : a:1 . a:comma)
-    let j = matchend(alttail, s:notslash . a:comma)
-  endif
-  let current = strpart(tail, 0, i-1)
-  if a:branch == ""
-    let currpat = current
-  else
-    let currpat = substitute(current, s:notslash . a:branch, '\\|', 'g')
-  endif
-  while a:string !~ a:prefix . currpat . a:suffix
-    let tail = strpart(tail, i)
-    let i = matchend(tail, s:notslash . a:comma)
-    if i == -1
-      return -1
-    endif
-    let current = strpart(tail, 0, i-1)
-    if a:branch == ""
-      let currpat = current
-    else
-      let currpat = substitute(current, s:notslash . a:branch, '\\|', 'g')
-    endif
-    if a:0
-      let alttail = strpart(alttail, j)
-      let j = matchend(alttail, s:notslash . a:comma)
-    endif
-  endwhile
-  if a:0
-    let current = current . a:comma . strpart(alttail, 0, j-1)
-  endif
-  return current
-endfun
+vmap <silent> <Plug>(MatchitVisualTextObject) <Plug>(MatchitVisualMultiBackward)o<Plug>(MatchitVisualMultiForward)
+xmap a% <Plug>(MatchitVisualTextObject)
 
 " Call this function to turn on debugging information.  Every time the main
 " script is run, buffer variables will be saved.  These can be used directly
 " or viewed using the menu items below.
 if !exists(":MatchDebug")
-  command! -nargs=0 MatchDebug call s:Match_debug()
+  command! -nargs=0 MatchDebug call matchit#Match_debug()
 endif
 
-fun! s:Match_debug()
-  let b:match_debug = 1	" Save debugging information.
-  " pat = all of b:match_words with backrefs parsed
-  amenu &Matchit.&pat	:echo b:match_pat<CR>
-  " match = bit of text that is recognized as a match
-  amenu &Matchit.&match	:echo b:match_match<CR>
-  " curcol = cursor column of the start of the matching text
-  amenu &Matchit.&curcol	:echo b:match_col<CR>
-  " wholeBR = matching group, original version
-  amenu &Matchit.wh&oleBR	:echo b:match_wholeBR<CR>
-  " iniBR = 'if' piece, original version
-  amenu &Matchit.ini&BR	:echo b:match_iniBR<CR>
-  " ini = 'if' piece, with all backrefs resolved from match
-  amenu &Matchit.&ini	:echo b:match_ini<CR>
-  " tail = 'else\|endif' piece, with all backrefs resolved from match
-  amenu &Matchit.&tail	:echo b:match_tail<CR>
-  " fin = 'endif' piece, with all backrefs resolved from match
-  amenu &Matchit.&word	:echo b:match_word<CR>
-  " '\'.d in ini refers to the same thing as '\'.table[d] in word.
-  amenu &Matchit.t&able	:echo '0:' . b:match_table . ':9'<CR>
-endfun
-
-" Jump to the nearest unmatched "(" or "if" or "<tag>" if a:spflag == "bW"
-" or the nearest unmatched "</tag>" or "endif" or ")" if a:spflag == "W".
-" Return a "mark" for the original position, so that
-"   let m = MultiMatch("bW", "n") ... execute m
-" will return to the original position.  If there is a problem, do not
-" move the cursor and return "", unless a count is given, in which case
-" go up or down as many levels as possible and again return "".
-" TODO This relies on the same patterns as % matching.  It might be a good
-" idea to give it its own matching patterns.
-fun! s:MultiMatch(spflag, mode)
-  if !exists("b:match_words") || b:match_words == ""
-    return ""
-  end
-  let restore_options = ""
-  if exists("b:match_ignorecase") && b:match_ignorecase != &ic
-    let restore_options .= (&ic ? " " : " no") . "ignorecase"
-    let &ignorecase = b:match_ignorecase
-  endif
-  let startline = line(".")
-  let startcol = col(".")
-
-  " First step:  if not already done, set the script variables
-  "   s:do_BR	flag for whether there are backrefs
-  "   s:pat	parsed version of b:match_words
-  "   s:all	regexp based on s:pat and the default groups
-  " This part is copied and slightly modified from s:Match_wrapper().
-  let default = escape(&mps, '[$^.*~\\/?]') . (strlen(&mps) ? "," : "") .
-    \ '\/\*:\*\/,#\s*if\%(def\)\=:#\s*else\>:#\s*elif\>:#\s*endif\>'
-  " Allow b:match_words = "GetVimMatchWords()" .
-  if b:match_words =~ ":"
-    let match_words = b:match_words
-  else
-    execute "let match_words =" b:match_words
-  endif
-  if (match_words != s:last_words) || (&mps != s:last_mps) ||
-    \ exists("b:match_debug")
-    let s:last_words = match_words
-    let s:last_mps = &mps
-    let match_words = match_words . (strlen(match_words) ? "," : "") . default
-    if match_words !~ s:notslash . '\\\d'
-      let s:do_BR = 0
-      let s:pat = match_words
-    else
-      let s:do_BR = 1
-      let s:pat = s:ParseWords(match_words)
-    endif
-    let s:all = '\%(' . substitute(s:pat . (strlen(s:pat) ? "," : "") . default,
-	\ '[,:]\+', '\\|', 'g') . '\)'
-    if exists("b:match_debug")
-      let b:match_pat = s:pat
-    endif
-  endif
-
-  " Second step:  figure out the patterns for searchpair()
-  " and save the screen, cursor position, and 'ignorecase'.
-  " - TODO:  A lot of this is copied from s:Match_wrapper().
-  " - maybe even more functionality should be split off
-  " - into separate functions!
-  let cdefault = (s:pat =~ '[^,]$' ? "," : "") . default
-  let open =  substitute(s:pat . cdefault,
-	\ s:notslash . '\zs:.\{-}' . s:notslash . ',', '\\),\\(', 'g')
-  let open =  '\(' . substitute(open, s:notslash . '\zs:.*$', '\\)', '')
-  let close = substitute(s:pat . cdefault,
-	\ s:notslash . '\zs,.\{-}' . s:notslash . ':', '\\),\\(', 'g')
-  let close = substitute(close, '^.\{-}' . s:notslash . ':', '\\(', '') . '\)'
-  if exists("b:match_skip")
-    let skip = b:match_skip
-  elseif exists("b:match_comment") " backwards compatibility and testing!
-    let skip = "r:" . b:match_comment
-  else
-    let skip = 's:comment\|string'
-  endif
-  let skip = s:ParseSkip(skip)
-  " save v:count1 variable, might be reset from the restore_cursor command
-  let level = v:count1
-  let restore_cursor = virtcol(".") . "|"
-  normal! g0
-  let restore_cursor = line(".") . "G" .  virtcol(".") . "|zs" . restore_cursor
-  normal! H
-  let restore_cursor = "normal!" . line(".") . "Gzt" . restore_cursor
-  execute restore_cursor
-
-  " Third step: call searchpair().
-  " Replace '\('--but not '\\('--with '\%(' and ',' with '\|'.
-  let openpat =  substitute(open, '\(\\\@<!\(\\\\\)*\)\@<=\\(', '\\%(', 'g')
-  let openpat = substitute(openpat, ',', '\\|', 'g')
-  let closepat = substitute(close, '\(\\\@<!\(\\\\\)*\)\@<=\\(', '\\%(', 'g')
-  let closepat = substitute(closepat, ',', '\\|', 'g')
-
-  if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on"))
-    let skip = '0'
-  else
-    try
-      execute "if " . skip . "| let skip = '0' | endif"
-    catch /^Vim\%((\a\+)\)\=:E363/
-      " We won't find anything, so skip searching, should keep Vim responsive.
-      return
-    endtry
-  endif
-  mark '
-  while level
-    if searchpair(openpat, '', closepat, a:spflag, skip) < 1
-      call s:CleanUp(restore_options, a:mode, startline, startcol)
-      return ""
-    endif
-    let level = level - 1
-  endwhile
-
-  " Restore options and return a string to restore the original position.
-  call s:CleanUp(restore_options, a:mode, startline, startcol)
-  return restore_cursor
-endfun
-
-" Search backwards for "if" or "while" or "<tag>" or ...
-" and return "endif" or "endwhile" or "</tag>" or ... .
-" For now, this uses b:match_words and the same script variables
-" as s:Match_wrapper() .  Later, it may get its own patterns,
-" either from a buffer variable or passed as arguments.
-" fun! s:Autocomplete()
-"   echo "autocomplete not yet implemented :-("
-"   if !exists("b:match_words") || b:match_words == ""
-"     return ""
-"   end
-"   let startpos = s:MultiMatch("bW")
-"
-"   if startpos == ""
-"     return ""
-"   endif
-"   " - TODO:  figure out whether 'if' or '<tag>' matched, and construct
-"   " - the appropriate closing.
-"   let matchline = getline(".")
-"   let curcol = col(".") - 1
-"   " - TODO:  Change the s:all argument if there is a new set of match pats.
-"   let regexp = s:Wholematch(matchline, s:all, curcol)
-"   let suf = strlen(matchline) - matchend(matchline, regexp)
-"   let prefix = (curcol ? '^.\{'  . curcol . '}\%(' : '^\%(')
-"   let suffix = (suf ? '\).\{' . suf . '}$'  : '\)$')
-"   " Reconstruct the version with unresolved backrefs.
-"   let patBR = substitute(b:match_words.',', '[,:]*,[,:]*', ',', 'g')
-"   let patBR = substitute(patBR, ':\{2,}', ':', "g")
-"   " Now, set group and groupBR to the matching group: 'if:endif' or
-"   " 'while:endwhile' or whatever.
-"   let group = s:Choose(s:pat, matchline, ",", ":", prefix, suffix, patBR)
-"   let i = matchend(group, s:notslash . ",")
-"   let groupBR = strpart(group, i)
-"   let group = strpart(group, 0, i-1)
-"   " Now, matchline =~ prefix . substitute(group,':','\|','g') . suffix
-"   if s:do_BR
-"     let group = s:InsertRefs(groupBR, prefix, group, suffix, matchline)
-"   endif
-" " let g:group = group
-"
-"   " - TODO:  Construct the closing from group.
-"   let fake = "end" . expand("<cword>")
-"   execute startpos
-"   return fake
-" endfun
-
-" Close all open structures.  "Get the heck out of here!"
-" fun! s:Gthhoh()
-"   let close = s:Autocomplete()
-"   while strlen(close)
-"     put=close
-"     let close = s:Autocomplete()
-"   endwhile
-" endfun
-
-" Parse special strings as typical skip arguments for searchpair():
-"   s:foo becomes (current syntax item) =~ foo
-"   S:foo becomes (current syntax item) !~ foo
-"   r:foo becomes (line before cursor) =~ foo
-"   R:foo becomes (line before cursor) !~ foo
-fun! s:ParseSkip(str)
-  let skip = a:str
-  if skip[1] == ":"
-    if skip[0] == "s"
-      let skip = "synIDattr(synID(line('.'),col('.'),1),'name') =~? '" .
-	\ strpart(skip,2) . "'"
-    elseif skip[0] == "S"
-      let skip = "synIDattr(synID(line('.'),col('.'),1),'name') !~? '" .
-	\ strpart(skip,2) . "'"
-    elseif skip[0] == "r"
-      let skip = "strpart(getline('.'),0,col('.'))=~'" . strpart(skip,2). "'"
-    elseif skip[0] == "R"
-      let skip = "strpart(getline('.'),0,col('.'))!~'" . strpart(skip,2). "'"
-    endif
-  endif
-  return skip
-endfun
-
 let &cpo = s:save_cpo
 unlet s:save_cpo
 
-" vim:sts=2:sw=2:
+" vim:sts=2:sw=2:et:
--- a/runtime/syntax/debchangelog.vim
+++ b/runtime/syntax/debchangelog.vim
@@ -3,7 +3,7 @@
 " Maintainer:  Debian Vim Maintainers
 " Former Maintainers: Gerfried Fuchs <alfie@ist.org>
 "                     Wichert Akkerman <wakkerma@debian.org>
-" Last Change: 2018 Oct 30
+" Last Change: 2019 Jan 26
 " URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debchangelog.vim
 
 " Standard syntax initialization
@@ -14,7 +14,7 @@ endif
 " Case doesn't matter for us
 syn case ignore
 
-let s:urgency='urgency=\(low\|medium\|high\|critical\)\( [^[:space:],][^,]*\)\='
+let s:urgency='urgency=\(low\|medium\|high\|emergency\|critical\)\( [^[:space:],][^,]*\)\='
 let s:binNMU='binary-only=yes'
 
 " Define some common expressions we can use later on
--- a/runtime/vimrc_example.vim
+++ b/runtime/vimrc_example.vim
@@ -1,7 +1,7 @@
 " An example for a vimrc file.
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last change:	2017 Sep 20
+" Last change:	2019 Jan 26
 "
 " To use it, copy it to
 "     for Unix and OS/2:  ~/.vimrc
@@ -9,7 +9,8 @@
 "  for MS-DOS and Win32:  $VIM\_vimrc
 "	    for OpenVMS:  sys$login:.vimrc
 
-" When started as "evim", evim.vim will already have done these settings.
+" When started as "evim", evim.vim will already have done these settings, bail
+" out.
 if v:progname =~? "evim"
   finish
 endif
@@ -31,23 +32,13 @@ if &t_Co > 2 || has("gui_running")
   set hlsearch
 endif
 
-" Only do this part when compiled with support for autocommands.
-if has("autocmd")
-
-  " Put these in an autocmd group, so that we can delete them easily.
-  augroup vimrcEx
+" Put these in an autocmd group, so that we can delete them easily.
+augroup vimrcEx
   au!
 
   " For all text files set 'textwidth' to 78 characters.
   autocmd FileType text setlocal textwidth=78
-
-  augroup END
-
-else
-
-  set autoindent		" always set autoindenting on
-
-endif " has("autocmd")
+augroup END
 
 " Add optional packages.
 "
--- a/src/po/de.po
+++ b/src/po/de.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Vim\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-12-12 15:34+0100\n"
+"POT-Creation-Date: 2019-01-28 19:23+0100\n"
 "PO-Revision-Date: 2008-05-24 17:26+0200\n"
 "Last-Translator: Christian Brabandt <cb@256bit.org>\n"
 "Language-Team: German\n"
@@ -21,6 +21,67 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
+msgid "--Deleted--"
+msgstr "--gelöscht--"
+
+#, c-format
+msgid "auto-removing autocommand: %s <buffer=%d>"
+msgstr "Entferne Autokommando: %s <buffer=%d>"
+
+#, c-format
+msgid "E367: No such group: \"%s\""
+msgstr "E367: Keine solche Gruppe: \"%s\""
+
+msgid "E936: Cannot delete the current group"
+msgstr "E936: Kann die aktuelle Gruppe nicht löschen."
+
+msgid "W19: Deleting augroup that is still in use"
+msgstr "W19: Lösche Autogruppe, die noch in Benutzung ist."
+
+#, c-format
+msgid "E215: Illegal character after *: %s"
+msgstr "E215: Unzulässiges Zeichen nach *: %s"
+
+#, c-format
+msgid "E216: No such event: %s"
+msgstr "E216: Kein derartiges Ereignis: %s"
+
+#, c-format
+msgid "E216: No such group or event: %s"
+msgstr "E216: Keine solche Gruppe oder Ereignis: %s"
+
+msgid ""
+"\n"
+"--- Autocommands ---"
+msgstr ""
+"\n"
+"--- Autokommandos ---"
+
+#, c-format
+msgid "E680: <buffer=%d>: invalid buffer number "
+msgstr "E680: <buffer=%d>: Ungültige Puffer Nummer "
+
+msgid "E217: Can't execute autocommands for ALL events"
+msgstr "E217: Autokommandos können nicht für ALL Ereignisse ausgeführt werden"
+
+msgid "No matching autocommands"
+msgstr "Keine passenden Autokommandos"
+
+msgid "E218: autocommand nesting too deep"
+msgstr "E218: Autokommando-Schachtelung zu tief"
+
+#, c-format
+msgid "%s Autocommands for \"%s\""
+msgstr "%s Autokommandos für \"%s\""
+
+#, c-format
+msgid "Executing %s"
+msgstr "Ausführung von %s"
+
+#, c-format
+msgid "autocommand %s"
+msgstr "Autokommando %s"
+
 msgid "E831: bf_key_init() called with empty password"
 msgstr "E831: bf_key_init() mit leerem Passwort aufgerufen."
 
@@ -100,9 +161,9 @@ msgid "E88: Cannot go before first buffe
 msgstr "E88: Kann nicht vor den ersten Puffer gehen."
 
 #, c-format
-msgid "E89: No write since last change for buffer %ld (add ! to override)"
-msgstr ""
-"E89: Puffer %ld seit der letzten Änderung nicht gesichert (erzwinge mit !)"
+msgid "E89: No write since last change for buffer %d (add ! to override)"
+msgstr ""
+"E89: Puffer %d seit der letzten Änderung nicht gesichert (erzwinge mit !)"
 
 msgid "E948: Job still running (add ! to end the job)"
 msgstr "E948: Job läuft noch (Beenden mit !)"
@@ -120,8 +181,8 @@ msgid "W14: Warning: List of file names 
 msgstr "W14: Achtung: Überlauf der Dateinamensliste."
 
 #, c-format
-msgid "E92: Buffer %ld not found"
-msgstr "E92: Puffer %ld nicht gefunden."
+msgid "E92: Buffer %d not found"
+msgstr "E92: Puffer %d nicht gefunden."
 
 #, c-format
 msgid "E93: More than one match for %s"
@@ -203,21 +264,6 @@ msgstr "[Prompt]"
 msgid "[Scratch]"
 msgstr "[Scratch]"
 
-msgid ""
-"\n"
-"--- Signs ---"
-msgstr ""
-"\n"
-"--- Zeichen ---"
-
-#, c-format
-msgid "Signs for %s:"
-msgstr "Zeichen für %s:"
-
-#, c-format
-msgid "    line=%ld  id=%d  name=%s"
-msgstr "    Zeile=%ld  id=%d  Name=%s"
-
 msgid "E902: Cannot connect to port"
 msgstr "E902: Kann keine Verbindung zu Port herstellen."
 
@@ -312,8 +358,8 @@ msgid "E737: Key already exists: %s"
 msgstr "E737: Schlüssel existiert bereits: %s"
 
 #, c-format
-msgid "E96: Cannot diff more than %ld buffers"
-msgstr "E96: Kann Diff für mehr als %ld Puffer nicht erstellen."
+msgid "E96: Cannot diff more than %d buffers"
+msgstr "E96: Kann Diff für mehr als %d Puffer nicht erstellen."
 
 #, c-format
 msgid "Not enough memory to use internal diff for buffer \"%s\""
@@ -368,6 +414,81 @@ msgstr "E787: Puffer änderte sich unerwartet."
 msgid "E104: Escape not allowed in digraph"
 msgstr "E104: <Escape> ist in einem Digraphen nicht erlaubt."
 
+msgid "Custom"
+msgstr "Benutzerdefinierte Digraphs"
+
+msgid "Latin supplement"
+msgstr "Lateinisch Ergänzung"
+
+msgid "Greek and Coptic"
+msgstr "Griechisch und Koptisch"
+
+msgid "Cyrillic"
+msgstr "Kyrillisch"
+
+msgid "Hebrew"
+msgstr "Hebräisch"
+
+msgid "Arabic"
+msgstr "Arabisch"
+
+msgid "Latin extended"
+msgstr "Lateinisch Zusatz"
+
+msgid "Greek extended"
+msgstr "Griechisch Zusatz"
+
+msgid "Punctuation"
+msgstr "Interpunktion"
+
+msgid "Super- and subscripts"
+msgstr "Hoch- und tiefgestellte Zeichen"
+
+msgid "Currency"
+msgstr "Währungszeichen"
+
+msgid "Other"
+msgstr "Andere Zeichen"
+
+msgid "Roman numbers"
+msgstr "Römische Ziffern"
+
+msgid "Arrows"
+msgstr "Pfeile"
+
+msgid "Mathematical operators"
+msgstr "Mathematische Operatoren"
+
+msgid "Technical"
+msgstr "Technische Zeichen"
+
+msgid "Box drawing"
+msgstr "Rahmenzeichen"
+
+msgid "Block elements"
+msgstr "Blockelemente"
+
+msgid "Geometric shapes"
+msgstr "Geometrische Formen"
+
+msgid "Symbols"
+msgstr "Verschiedene Symbole"
+
+msgid "Dingbats"
+msgstr "Dingbats"
+
+msgid "CJK symbols and punctuation"
+msgstr "CJK Symbole und Interpunktion"
+
+msgid "Hiragana"
+msgstr "Hiragana"
+
+msgid "Katakana"
+msgstr "Katakana"
+
+msgid "Bopomofo"
+msgstr "Bopomofo"
+
 msgid "E544: Keymap file not found"
 msgstr "E544: Keymap-Datei für die Tastaturbelegung nicht gefunden."
 
@@ -514,14 +635,17 @@ msgstr "Doppeltes ; in der Liste von Var
 msgid "E738: Can't list variables for %s"
 msgstr "E738: Kann Variablen nicht auflisten: %s"
 
-msgid "E689: Can only index a List or Dictionary"
-msgstr "E689: Kann nur Listen und Dictionary indizieren"
+msgid "E689: Can only index a List, Dictionary or Blob"
+msgstr "E689: Kann nur Listen, Dictionary oder Blob indizieren"
 
 msgid "E708: [:] must come last"
 msgstr "E708: [:] muss am Schluss kommen."
 
-msgid "E709: [:] requires a List value"
-msgstr "E709: [:] benötigt einen Listenwert"
+msgid "E709: [:] requires a List or Blob value"
+msgstr "E709: [:] benötigt einen Listen- oder Blobwert"
+
+msgid "E972: Blob value does not have the right number of bytes"
+msgstr "E972: Blobwert hat nicht die richtige Anzahl an Bytes"
 
 msgid "E710: List value has more items than target"
 msgstr "E710: Listenwert hat mehr Einträge als das Ziel."
@@ -549,6 +673,9 @@ msgstr "E109: Fehlender ':' nach '?'"
 msgid "E804: Cannot use '%' with Float"
 msgstr "E804: Kann '%' mit Floats benutzen."
 
+msgid "E973: Blob literal should have an even number of hex characters"
+msgstr "E973: Blob-Literal sollte eine gerade Anzahl von Hex-Zeichen haben"
+
 msgid "E110: Missing ')'"
 msgstr "E110: Fehlendes ')'"
 
@@ -600,6 +727,9 @@ msgstr "E910: Job als Zahl verwendet."
 msgid "E913: Using a Channel as a Number"
 msgstr "E913: Channel als Zahl verwendet."
 
+msgid "E974: Using a Blob as a Number"
+msgstr "E974: Blob als Zahl verwendet."
+
 msgid "E891: Using a Funcref as a Float"
 msgstr "E891: Funktionsreferenz als Float verwendet."
 
@@ -616,10 +746,13 @@ msgid "E907: Using a special value as a 
 msgstr "E907: Benutze Spezialvariable als Float."
 
 msgid "E911: Using a Job as a Float"
-msgstr "E911: Benutzte Job als Float."
+msgstr "E911: Job als Float verwendet"
 
 msgid "E914: Using a Channel as a Float"
-msgstr "E914: Channel als Float verwendet."
+msgstr "E914: Channel als Float verwendet"
+
+msgid "E975: Using a Blob as a Float"
+msgstr "E975: Blob als Float verwendet"
 
 msgid "E729: using Funcref as a String"
 msgstr "E729: Funktionsreferenz als String verwendet"
@@ -630,6 +763,9 @@ msgstr "E730: Liste als String verwendet
 msgid "E731: using Dictionary as a String"
 msgstr "E731: Dictionary als String verwendet"
 
+msgid "E976: using Blob as a String"
+msgstr "E976: Blob als String verwendet"
+
 msgid "E908: using an invalid value as a String"
 msgstr "E908: Ungültiger Wert als String verwendet."
 
@@ -681,8 +817,11 @@ msgstr ""
 msgid " line "
 msgstr " Zeile "
 
+msgid "E977: Can only compare Blob with Blob"
+msgstr "E977: Kann nur einen Blob mit einem Blob vergleichen"
+
 msgid "E691: Can only compare List with List"
-msgstr "E691: Kann nur eine Liste mit einer Liste vergleichen."
+msgstr "E691: Kann nur eine Liste mit einer Liste vergleichen"
 
 msgid "E692: Invalid operation for List"
 msgstr "E692: Unzulässige Operation für Listen"
@@ -706,6 +845,10 @@ msgstr "filter() Argument"
 msgid "E686: Argument of %s must be a List"
 msgstr "E686: Argument von %s muss eine Liste sein."
 
+#, c-format
+msgid "E899: Argument of %s must be a List or Blob"
+msgstr "E899: Argument von %s muss eine Liste oder ein Blob sein."
+
 msgid "E928: String required"
 msgstr "E928: String wird benötigt."
 
@@ -715,12 +858,19 @@ msgstr "E808: Zahl oder Float benötigt."
 msgid "add() argument"
 msgstr "add() Argument"
 
+#, c-format
+msgid "E158: Invalid buffer name: %s"
+msgstr "E158: ungültige Puffernummer: %s"
+
 msgid "E785: complete() can only be used in Insert mode"
 msgstr "E785: complete() kann nur im Einfüge-Modus verwendet werden."
 
 msgid "&Ok"
 msgstr "&Ok"
 
+msgid "E980: lowlevel input not supported"
+msgstr "E980: Low-Level Eingabe wird nicht unterstützt"
+
 #, c-format
 msgid "+-%s%3ld line: "
 msgid_plural "+-%s%3ld lines: "
@@ -765,8 +915,8 @@ msgid "E957: Invalid window number"
 msgstr "E957: Ungültige Fensternummer"
 
 #, c-format
-msgid "E798: ID is reserved for \":match\": %ld"
-msgstr "E798: ID ist für \":match\" reserviert: %ld"
+msgid "E798: ID is reserved for \":match\": %d"
+msgstr "E798: ID ist für \":match\" reserviert: %d"
 
 msgid "E726: Stride is zero"
 msgstr "E726: Stride ist Null"
@@ -1111,51 +1261,6 @@ msgstr "E154: Doppelter Tag \"%s\" in de
 msgid "E150: Not a directory: %s"
 msgstr "E150: Kein Verzeichnis: %s"
 
-#, c-format
-msgid "E160: Unknown sign command: %s"
-msgstr "E160: Unbekannter \"sign\"-Befehl: %s"
-
-msgid "E156: Missing sign name"
-msgstr "E156: Name des Zeichens fehlt"
-
-msgid "E612: Too many signs defined"
-msgstr "E612: Zu viele Zeichen definiert"
-
-#, c-format
-msgid "E239: Invalid sign text: %s"
-msgstr "E239: Ungültiger Text für ein Zeichen: %s"
-
-#, c-format
-msgid "E155: Unknown sign: %s"
-msgstr "E155: Unbekanntes Zeichen: %s"
-
-msgid "E159: Missing sign number"
-msgstr "E159: Fehlende Zeichennummer"
-
-#, c-format
-msgid "E158: Invalid buffer name: %s"
-msgstr "E158: ungültige Puffernummer: %s"
-
-msgid "E934: Cannot jump to a buffer that does not have a name"
-msgstr "E934: Kann nicht zu einem Puffer ohne Namen springen."
-
-#, c-format
-msgid "E157: Invalid sign ID: %ld"
-msgstr "E157: Ungültige Zeichen-ID: %ld"
-
-#, c-format
-msgid "E885: Not possible to change sign %s"
-msgstr "E885: Nicht möglich Zeichen %s zu ändern."
-
-msgid " (NOT FOUND)"
-msgstr " (NICHT GEFUNDEN)"
-
-msgid " (not supported)"
-msgstr " (nicht unterstützt)"
-
-msgid "[Deleted]"
-msgstr "[Gelöscht]"
-
 msgid "No old files"
 msgstr "Keine Alt-Dateien"
 
@@ -1371,10 +1476,10 @@ msgstr[0] "%d weitere Datei zum Editiere
 msgstr[1] "%d weitere Dateien zum Editieren. Trotzdem beenden?"
 
 #, c-format
-msgid "E173: %ld more file to edit"
-msgid_plural "E173: %ld more files to edit"
-msgstr[0] "E173: %ld weitere Datei zum Editieren"
-msgstr[1] "E173: %ld weitere Dateien zum Editieren"
+msgid "E173: %d more file to edit"
+msgid_plural "E173: %d more files to edit"
+msgstr[0] "E173: %d weitere Datei zum Editieren"
+msgstr[1] "E173: %d weitere Dateien zum Editieren"
 
 #, c-format
 msgid "E174: Command already exists: add ! to replace it: %s"
@@ -2042,67 +2147,6 @@ msgstr "E462: Konnte das Neuladen von \"
 msgid "E321: Could not reload \"%s\""
 msgstr "E321: \"%s\" konnte nicht neu geladen werden"
 
-msgid "--Deleted--"
-msgstr "--gelöscht--"
-
-#, c-format
-msgid "auto-removing autocommand: %s <buffer=%d>"
-msgstr "Entferne Autokommando: %s <buffer=%d>"
-
-#, c-format
-msgid "E367: No such group: \"%s\""
-msgstr "E367: Keine solche Gruppe: \"%s\""
-
-msgid "E936: Cannot delete the current group"
-msgstr "E936: Kann die aktuelle Gruppe nicht löschen."
-
-msgid "W19: Deleting augroup that is still in use"
-msgstr "W19: Lösche Autogruppe, die noch in Benutzung ist."
-
-#, c-format
-msgid "E215: Illegal character after *: %s"
-msgstr "E215: Unzulässiges Zeichen nach *: %s"
-
-#, c-format
-msgid "E216: No such event: %s"
-msgstr "E216: Kein derartiges Ereignis: %s"
-
-#, c-format
-msgid "E216: No such group or event: %s"
-msgstr "E216: Keine solche Gruppe oder Ereignis: %s"
-
-msgid ""
-"\n"
-"--- Autocommands ---"
-msgstr ""
-"\n"
-"--- Autokommandos ---"
-
-#, c-format
-msgid "E680: <buffer=%d>: invalid buffer number "
-msgstr "E680: <buffer=%d>: Ungültige Puffer Nummer "
-
-msgid "E217: Can't execute autocommands for ALL events"
-msgstr "E217: Autokommandos können nicht für ALL Ereignisse ausgeführt werden"
-
-msgid "No matching autocommands"
-msgstr "Keine passenden Autokommandos"
-
-msgid "E218: autocommand nesting too deep"
-msgstr "E218: Autokommando-Schachtelung zu tief"
-
-#, c-format
-msgid "%s Autocommands for \"%s\""
-msgstr "%s Autokommandos für \"%s\""
-
-#, c-format
-msgid "Executing %s"
-msgstr "Ausführung von %s"
-
-#, c-format
-msgid "autocommand %s"
-msgstr "Autokommando %s"
-
 msgid "E219: Missing {."
 msgstr "E219: Es fehlt ein {."
 
@@ -2393,20 +2437,20 @@ msgid "Font0: %s"
 msgstr "Schriftart 0: %s"
 
 #, c-format
-msgid "Font1: %s"
-msgstr "Schriftart 1: %s"
-
-#, c-format
-msgid "Font%ld width is not twice that of font0"
-msgstr "Breite der Schriftart%ld ist nicht doppelt so breit wie Schriftart0"
-
-#, c-format
-msgid "Font0 width: %ld"
-msgstr "Schriftart 0 Breite: %ld"
-
-#, c-format
-msgid "Font1 width: %ld"
-msgstr "Schriftart 1 Breite: %ld"
+msgid "Font%d: %s"
+msgstr "Schriftart %d: %s"
+
+#, c-format
+msgid "Font%d width is not twice that of font0"
+msgstr "Breite der Schriftart%d ist nicht doppelt so breit wie Schriftart0"
+
+#, c-format
+msgid "Font0 width: %d"
+msgstr "Schriftart 0 Breite: %d"
+
+#, c-format
+msgid "Font%d width: %d"
+msgstr "Schriftart %d Breite: %d"
 
 msgid "Invalid font specification"
 msgstr "Ungültige Spezifikation der Schriftart"
@@ -2582,8 +2626,8 @@ msgid "Added cscope database %s"
 msgstr "csope Datenbank %s hinzugefügt"
 
 #, c-format
-msgid "E262: error reading cscope connection %ld"
-msgstr "E262: Fehler beim Lesen der cscope Verbindung %ld"
+msgid "E262: error reading cscope connection %d"
+msgstr "E262: Fehler beim Lesen der cscope Verbindung %d"
 
 msgid "E561: unknown cscope search type"
 msgstr "E561: Unbekannter cscope Suchtyp"
@@ -3921,9 +3965,6 @@ msgstr "E326: Zu viele Auslagerungsdatei
 msgid "E327: Part of menu-item path is not sub-menu"
 msgstr "E327: Teil des Menüpunkt-Pfades muss zum Untermenü führen"
 
-msgid "E328: Menu only exists in another mode"
-msgstr "E328: Menü existiert nur in anderen Modi"
-
 #, c-format
 msgid "E329: No menu \"%s\""
 msgstr "E329: Kein Menü \"%s\""
@@ -4158,8 +4199,8 @@ msgstr ""
 "\""
 
 #, c-format
-msgid "E658: NetBeans connection lost for buffer %ld"
-msgstr "E658: Verbindung zu NetBeans für Puffer %ld verloren"
+msgid "E658: NetBeans connection lost for buffer %d"
+msgstr "E658: Verbindung zu NetBeans für Puffer %d verloren"
 
 msgid "E838: netbeans is not supported with this GUI"
 msgstr "E838: netbeans wird nicht unterstützt mit dieser GUI."
@@ -5110,6 +5151,66 @@ msgstr ""
 "# Letztes %sSuchmuster:\n"
 "~"
 
+msgid "[Deleted]"
+msgstr "[Gelöscht]"
+
+msgid ""
+"\n"
+"--- Signs ---"
+msgstr ""
+"\n"
+"--- Zeichen ---"
+
+#, c-format
+msgid "Signs for %s:"
+msgstr "Zeichen für %s:"
+
+#, c-format
+msgid "  group=%s"
+msgstr " Gruppe=%s"
+
+#, c-format
+msgid "    line=%ld  id=%d%s  name=%s  priority=%d"
+msgstr "    Zeile=%ld  id=%d%s  Name=%s Priorität=%d"
+
+msgid "E612: Too many signs defined"
+msgstr "E612: Zu viele Zeichen definiert"
+
+#, c-format
+msgid "E239: Invalid sign text: %s"
+msgstr "E239: Ungültiger Text für ein Zeichen: %s"
+
+#, c-format
+msgid "E155: Unknown sign: %s"
+msgstr "E155: Unbekanntes Zeichen: %s"
+
+#, c-format
+msgid "E885: Not possible to change sign %s"
+msgstr "E885: Nicht möglich Zeichen %s zu ändern."
+
+msgid "E159: Missing sign number"
+msgstr "E159: Fehlende Zeichennummer"
+
+#, c-format
+msgid "E157: Invalid sign ID: %d"
+msgstr "E157: Ungültige Zeichen-ID: %d"
+
+msgid "E934: Cannot jump to a buffer that does not have a name"
+msgstr "E934: Kann nicht zu einem Puffer ohne Namen springen."
+
+#, c-format
+msgid "E160: Unknown sign command: %s"
+msgstr "E160: Unbekannter \"sign\"-Befehl: %s"
+
+msgid "E156: Missing sign name"
+msgstr "E156: Name des Zeichens fehlt"
+
+msgid " (NOT FOUND)"
+msgstr " (NICHT GEFUNDEN)"
+
+msgid " (not supported)"
+msgstr " (nicht unterstützt)"
+
 msgid "E756: Spell checking is not enabled"
 msgstr "E756: Rechtschreibprüfung ist nicht aktiviert"
 
@@ -5221,10 +5322,6 @@ msgid "Conversion in %s not supported: f
 msgstr "Umwandlung in %s nicht unterstützt: von %s nach %s"
 
 #, c-format
-msgid "Conversion in %s not supported"
-msgstr "Umwandlung in %s nicht unterstützt"
-
-#, c-format
 msgid "Invalid value for FLAG in %s line %d: %s"
 msgstr "Ungültiger Wert von FLAG in %s Zeile %d: %s"
 
@@ -5445,8 +5542,8 @@ msgid "E751: Output file name must not h
 msgstr "E751: Ausgabedatei darf keinen Regionsnamen haben"
 
 #, c-format
-msgid "E754: Only up to %ld regions supported"
-msgstr "E754: Maximal %ld Regionen unterstützt"
+msgid "E754: Only up to %d regions supported"
+msgstr "E754: Maximal %d Regionen unterstützt"
 
 #, c-format
 msgid "E755: Invalid region in %s"
@@ -5463,8 +5560,8 @@ msgid "Done!"
 msgstr "Fertig!"
 
 #, c-format
-msgid "E765: 'spellfile' does not have %ld entries"
-msgstr "E765: 'spellfile' hat keine %ld Einträge"
+msgid "E765: 'spellfile' does not have %d entries"
+msgstr "E765: 'spellfile' hat nicht %d Einträge"
 
 #, c-format
 msgid "Word '%.*s' removed from %s"
@@ -5871,6 +5968,35 @@ msgstr "E953: Datei existiert bereits: %
 msgid "E955: Not a terminal buffer"
 msgstr "E955: Kein Terminal Puffer"
 
+#, c-format
+msgid "E971: Property type %s does not exist"
+msgstr "E971: Der Eigenschaftstyp %s existiert nicht"
+
+#, c-format
+msgid "E964: Invalid column number: %ld"
+msgstr "E964: Ungültige Spaltennummer: %ld"
+
+#, c-format
+msgid "E966: Invalid line number: %ld"
+msgstr "E966: Ungültige Zeilennummer: %ld"
+
+msgid "E965: missing property type name"
+msgstr "E965: Fehlender Eigenschaften Typname"
+
+msgid "E967: text property info corrupted"
+msgstr "E967: Texteigenschaft-Info beschädigt"
+
+msgid "E968: Need at least one of 'id' or 'type'"
+msgstr "E968: Benötige entweder 'id' oder 'type'"
+
+#, c-format
+msgid "E969: Property type %s already defined"
+msgstr "E969: Eigenschaftentyp %s bereits definiert"
+
+#, c-format
+msgid "E970: Unknown highlight group name: '%s'"
+msgstr "E970: Unbekannter Highlighting-Gruppenname: '%s'"
+
 msgid "new shell started\n"
 msgstr "neue Shell gestartet\n"
 
@@ -6434,6 +6560,10 @@ msgstr "Menü   Hilfe->Sponsor/Register  für mehr Informationen    "
 msgid "Already only one window"
 msgstr "Bereits nur ein Fenster"
 
+#, c-format
+msgid "E92: Buffer %ld not found"
+msgstr "E92: Puffer %ld nicht gefunden."
+
 msgid "E441: There is no preview window"
 msgstr "E441: Es gibt kein Vorschaufenster"
 
@@ -6467,23 +6597,23 @@ msgid "E447: Can't find file \"%s\" in p
 msgstr "E447: Kann Datei \"%s\" nicht im Pfad finden"
 
 #, c-format
-msgid "E799: Invalid ID: %ld (must be greater than or equal to 1)"
-msgstr "E799: Ungültige ID: %ld (muss größer gleich 1 sein)"
-
-#, c-format
-msgid "E801: ID already taken: %ld"
-msgstr "E801: ID bereits benutzt: %ld"
+msgid "E799: Invalid ID: %d (must be greater than or equal to 1)"
+msgstr "E799: Ungültige ID: %d (muss größer gleich 1 sein)"
+
+#, c-format
+msgid "E801: ID already taken: %d"
+msgstr "E801: ID bereits benutzt: %d"
 
 msgid "List or number required"
 msgstr "Liste oder Nummer erforderlich"
 
 #, c-format
-msgid "E802: Invalid ID: %ld (must be greater than or equal to 1)"
-msgstr "E802: Ungültige ID: %ld (muss größer gleich 1 sein)"
-
-#, c-format
-msgid "E803: ID not found: %ld"
-msgstr "E803: ID nicht gefunden: %ld"
+msgid "E802: Invalid ID: %d (must be greater than or equal to 1)"
+msgstr "E802: Ungültige ID: %d (muss größer gleich 1 sein)"
+
+#, c-format
+msgid "E803: ID not found: %d"
+msgstr "E803: ID nicht gefunden: %d"
 
 #, c-format
 msgid "E370: Could not load library %s"
@@ -6796,7 +6926,14 @@ msgstr "E715: Dictionary benötigt"
 
 #, c-format
 msgid "E684: list index out of range: %ld"
-msgstr "E684: Index der Liste außerhalb des zulässigen Bereichs: %ld."
+msgstr "E684: Index der Liste außerhalb des zulässigen Bereichs: %ld"
+
+#, c-format
+msgid "E979: Blob index out of range: %ld"
+msgstr "E979: Blobindex außerhalb des Bereichs: %ld"
+
+msgid "E978: Invalid operation for Blob"
+msgstr "E978: Unzulässige Operation für Blob"
 
 #, c-format
 msgid "E118: Too many arguments for function: %s"
@@ -6809,9 +6946,16 @@ msgstr "E716: Schlüssel %s nicht im Dictionary vorhanden."
 msgid "E714: List required"
 msgstr "E714: Liste benötigt"
 
+msgid "E897: List or Blob required"
+msgstr "E897: Liste oder Blob benötigt"
+
 #, c-format
 msgid "E712: Argument of %s must be a List or Dictionary"
-msgstr "E712: Argument von %s muss eine Liste oder ein Wörterbuch sein."
+msgstr "E712: Argument von %s muss eine Liste oder ein Dictionary sein."
+
+#, c-format
+msgid "E896: Argument of %s must be a List, Dictionary or Blob"
+msgstr "E896: Argument von %s muss eine Liste, Dictionary oder ein Blob sein."
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47: Fehler während des Lesens der Fehlerdatei"
@@ -6915,6 +7059,9 @@ msgstr "E919: Verzeichnis nicht gefunden
 msgid "E952: Autocommand caused recursive behavior"
 msgstr "E952: Autokommando verursachten Rekursion"
 
+msgid "E328: Menu only exists in another mode"
+msgstr "E328: Menü existiert nur in anderen Modi"
+
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "Suche erreichte den ANFANG und wurde am ENDE fortgesetzt"