changeset 32984:75c283beb74f

re-sync with git
author Christian Brabandt <cb@256bit.org>
date Thu, 24 Aug 2023 07:58:05 +0200
parents 5cc3522384b1
children d37f43ba2120
files .github/CODEOWNERS runtime/doc/builtin.txt runtime/doc/terminal.txt runtime/doc/usr_41.txt runtime/ftplugin/bash.vim runtime/ftplugin/debchangelog.vim runtime/ftplugin/gpg.vim runtime/ftplugin/modconf.vim runtime/ftplugin/muttrc.vim runtime/ftplugin/readline.vim runtime/ftplugin/rst.vim runtime/ftplugin/sh.vim runtime/ftplugin/sql.vim runtime/ftplugin/sshconfig.vim runtime/ftplugin/sudoers.vim runtime/ftplugin/systemd.vim runtime/ftplugin/tidy.vim runtime/ftplugin/udevrules.vim runtime/ftplugin/zig.vim runtime/indent/bash.vim runtime/indent/html.vim runtime/indent/mail.vim runtime/indent/nsis.vim runtime/indent/php.vim runtime/indent/rapid.vim runtime/keymap/accents.vim runtime/lang/menu_it_it.latin1.vim runtime/lang/menu_nl_nl.latin1.vim runtime/menu.vim runtime/pack/dist/opt/editexisting/plugin/editexisting.vim runtime/pack/dist/opt/termdebug/plugin/termdebug.vim runtime/syntax/8th.vim runtime/syntax/a65.vim runtime/syntax/bash.vim runtime/syntax/bindzone.vim runtime/syntax/chaiscript.vim runtime/syntax/cmake.vim runtime/syntax/crontab.vim runtime/syntax/euphoria4.vim runtime/syntax/flexwiki.vim runtime/syntax/gdb.vim runtime/syntax/groovy.vim runtime/syntax/lite.vim runtime/syntax/logtalk.vim runtime/syntax/lss.vim runtime/syntax/model.vim runtime/syntax/pymanifest.vim runtime/syntax/rmd.vim runtime/syntax/sgml.vim runtime/syntax/shared/typescriptcommon.vim runtime/syntax/slrnrc.vim runtime/syntax/spec.vim runtime/syntax/sqlinformix.vim runtime/syntax/sqlj.vim runtime/syntax/squid.vim runtime/syntax/tasm.vim runtime/syntax/tf.vim runtime/syntax/tsalt.vim runtime/syntax/typescript.vim runtime/syntax/typescriptreact.vim runtime/syntax/zimbu.vim runtime/tutor/tutor.vim src/charset.c src/drawline.c src/edit.c src/errors.h src/evalfunc.c src/globals.h src/move.c src/po/it.po src/po/tr.po src/popupmenu.c src/proto/typval.pro src/proto/vim9class.pro src/structs.h src/testdir/dumps/Test_cursor_position_with_showbreak.dump src/testdir/dumps/Test_cursor_position_with_showbreak_1.dump src/testdir/dumps/Test_cursor_position_with_showbreak_2.dump src/testdir/dumps/Test_prop_inserts_text_showbreak_22.dump src/testdir/test_breakindent.vim src/testdir/test_listlbr.vim src/testdir/test_listlbr_utf8.vim src/testdir/test_options.vim src/testdir/test_textprop.vim src/testdir/test_vim9_builtin.vim src/testdir/test_vim9_class.vim src/typval.c src/version.c src/vim9class.c src/vim9type.c
diffstat 90 files changed, 1723 insertions(+), 798 deletions(-) [+]
line wrap: on
line diff
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -384,6 +384,7 @@ runtime/syntax/gitolite.vim		@sitaramc
 runtime/syntax/gitrebase.vim		@tpope
 runtime/syntax/go.vim			@bhcleek
 runtime/syntax/godoc.vim		@dbarnett
+runtime/syntax/gp.vim			@KBelabas
 runtime/syntax/gprof.vim		@dpelle
 runtime/syntax/groff.vim		@jmarshall
 runtime/syntax/gyp.vim			@ObserverOfTime
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -310,6 +310,7 @@ inputrestore()			Number	restore typeahea
 inputsave()			Number	save and clear typeahead
 inputsecret({prompt} [, {text}]) String	like input() but hiding the text
 insert({object}, {item} [, {idx}]) List	insert {item} in {object} [before {idx}]
+instanceof({object}, {class})	Number	|TRUE| if {object} is an instance of {class}
 interrupt()			none	interrupt script execution
 invert({expr})			Number	bitwise invert
 isabsolutepath({path})		Number	|TRUE| if {path} is an absolute path
@@ -5052,6 +5053,17 @@ insert({object}, {item} [, {idx}])			*in
 		Can also be used as a |method|: >
 			mylist->insert(item)
 
+instanceof({object}, {class})				*instanceof()*
+		The result is a Number, which is |TRUE| when the {object} argument is a
+		direct or indirect instance of a |Class| specified by {class}.
+		When {class} is a |List| the function returns |TRUE| when {object} is an
+		instance of any of the specified classes.
+		Example: >
+			instanceof(animal, [Dog, Cat])
+
+<		Can also be used as a |method|: >
+			myobj->instanceof(mytype)
+
 interrupt()						*interrupt()*
 		Interrupt script execution.  It works more or less like the
 		user typing CTRL-C, most commands won't execute and control
--- a/runtime/doc/terminal.txt
+++ b/runtime/doc/terminal.txt
@@ -1,4 +1,4 @@
-*terminal.txt*	For Vim version 9.0.  Last change: 2023 Jun 28
+*terminal.txt*	For Vim version 9.0.  Last change: 2023 Aug 23
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -38,6 +38,7 @@ 6. Debugging				|terminal-debug|
       Example session				|termdebug-example|
       Stepping through code			|termdebug-stepping|
       Inspecting variables			|termdebug-variables|
+      Navigating stack frames			|termdebug-frames|
       Other commands				|termdebug-commands|
       Events					|termdebug-events|
       Prompt mode				|termdebug-prompt|
@@ -1376,6 +1377,18 @@ This is similar to using "print" in the 
 You can usually shorten `:Evaluate` to `:Ev`.
 
 
+Navigating stack frames ~
+				*termdebug-frames* *:Frame* *:Up* *:Down*
+ `:Frame` [frame]	select frame [frame], which is a frame number,
+			address, or function name (default: current frame)
+ `:Up` [count]		go up [count] frames (default: 1; the frame that
+			called the current)
+ `+`			same (see |termdebug_map_plus| to disable)
+ `:Down` [count]	go down [count] frames (default: 1; the frame called
+			by the current)
+ `-`			same (see |termdebug_map_minus| to disable)
+
+
 Other commands ~
 							*termdebug-commands*
  *:Gdb*	     jump to the gdb window
@@ -1449,11 +1462,19 @@ If there is no g:termdebug_config you ca
 	let g:termdebug_use_prompt = 1
 <
 						*termdebug_map_K*
-The K key is normally mapped to :Evaluate. If you do not want this use: >
+The K key is normally mapped to |:Evaluate|. If you do not want this use: >
 	let g:termdebug_config['map_K'] = 0
 If there is no g:termdebug_config you can use: >
 	let g:termdebug_map_K = 0
 <
+						*termdebug_map_minus*
+The - key is normally mapped to |:Down|. If you do not want this use: >
+	let g:termdebug_config['map_minus'] = 0
+<
+						*termdebug_map_plus*
+The + key is normally mapped to |:Up|. If you do not want this use: >
+	let g:termdebug_config['map_plus'] = 0
+<
 						*termdebug_disasm_window*
 If you want the Asm window shown by default, set the "disasm_window" flag to
 1.  The "disasm_window_height" entry can be used to set the window height: >
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -877,6 +877,7 @@ Other computation:					*bitwise-function
 	srand()			initialize seed used by rand()
 
 Variables:						*var-functions*
+	instanceof()		check if a variable is an instance of a given class
 	type()			type of a variable as a number
 	typename()		type of a variable as text
 	islocked()		check if a variable is locked
--- a/runtime/ftplugin/bash.vim
+++ b/runtime/ftplugin/bash.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	bash
-" Maintainer:	Bram Moolenaar
-" Last Changed: 2019 Jan 12
+" Maintainer:	The Vim Project <https://github.com/vim/vim>
+" Last Changed: 2023 Aug 13
 "
 " This is not a real filetype plugin.  It allows for someone to set 'filetype'
 " to "bash" in the modeline, and gets the effect of filetype "sh" with
--- a/runtime/ftplugin/debchangelog.vim
+++ b/runtime/ftplugin/debchangelog.vim
@@ -122,7 +122,7 @@ function NewVersion()
     normal! 1G0
     call search(')')
     normal! h
-    " ':normal' doens't support key annotation (<c-a>) directly.
+    " ':normal' doesn't support key annotation (<c-a>) directly.
     " Vim's manual recommends using ':exe' to use key annotation indirectly (backslash-escaping needed though).
     exe "normal! \<c-a>"
     call setline(1, substitute(getline(1), '-\$\$', '-', ''))
--- a/runtime/ftplugin/gpg.vim
+++ b/runtime/ftplugin/gpg.vim
@@ -15,5 +15,22 @@ let b:undo_ftplugin = "setl com< cms< fo
 
 setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
 
+if has('unix') && executable('less')
+  if !has('gui_running')
+    command -buffer -nargs=1 Sman
+          \ silent exe '!' . 'LESS= MANPAGER="less --pattern=''^\s+--' . <q-args> . '\b'' --hilite-search" man ' . 'gpg' |
+          \ redraw!
+  elseif has('terminal')
+    command -buffer -nargs=1 Sman
+          \ silent exe ':term ' . 'env LESS= MANPAGER="less --pattern=''' . escape('^\s+--' . <q-args> . '\b', '\') . ''' --hilite-search" man ' . 'gpg'
+  endif
+  if exists(':Sman') == 2
+    setlocal iskeyword+=-
+    setlocal keywordprg=:Sman
+    let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword<'
+  endif
+endif
+
 let &cpo = s:cpo_save
 unlet s:cpo_save
+
--- a/runtime/ftplugin/modconf.vim
+++ b/runtime/ftplugin/modconf.vim
@@ -16,5 +16,21 @@ let b:undo_ftplugin = "setl com< cms< in
 setlocal comments=:# commentstring=#\ %s include=^\\s*include
 setlocal formatoptions-=t formatoptions+=croql
 
+if has('unix') && executable('less')
+  if !has('gui_running')
+    command -buffer -nargs=1 Sman
+          \ silent exe '!' . 'LESS= MANPAGER="less --pattern=''^\s{,8}' . <q-args> . '\b'' --hilite-search" man ' . 'modprobe.d' |
+          \ redraw!
+  elseif has('terminal')
+    command -buffer -nargs=1 Sman
+          \ silent exe ':term ' . 'env LESS= MANPAGER="less --pattern=''' . escape('^\s{,8}' . <q-args> . '\b', '\') . ''' --hilite-search" man ' . 'modprobe.d'
+  endif
+  if exists(':Sman') == 2
+    setlocal iskeyword+=-
+    setlocal keywordprg=:Sman
+    let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword<'
+  endif
+endif
+
 let &cpo = s:cpo_save
 unlet s:cpo_save
--- a/runtime/ftplugin/muttrc.vim
+++ b/runtime/ftplugin/muttrc.vim
@@ -18,5 +18,21 @@ setlocal formatoptions-=t formatoptions+
 
 let &l:include = '^\s*source\>'
 
+if has('unix') && executable('less')
+  if !has('gui_running')
+    command -buffer -nargs=1 Sman
+          \ silent exe '!' . 'LESS= MANPAGER="less --pattern=''^\s+' . <q-args> . '\b'' --hilite-search" man ' . 'muttrc' |
+          \ redraw!
+  elseif has('terminal')
+    command -buffer -nargs=1 Sman
+          \ silent exe 'term ' . 'env LESS= MANPAGER="less --pattern=''' . escape('^\s+' . <q-args> . '\b', '\') . ''' --hilite-search" man ' . 'muttrc'
+  endif
+  if exists(':Sman') == 2
+    setlocal iskeyword+=-
+    setlocal keywordprg=:Sman
+    let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword<'
+  endif
+endif
+
 let &cpo = s:cpo_save
 unlet s:cpo_save
--- a/runtime/ftplugin/readline.vim
+++ b/runtime/ftplugin/readline.vim
@@ -25,11 +25,27 @@ if exists("loaded_matchit") && !exists("
 endif
 
 if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
-  let b:browsefilter = "Readline Intialization Files (inputrc .inputrc)\tinputrc;*.inputrc\n" ..
+  let b:browsefilter = "Readline Initialization Files (inputrc .inputrc)\tinputrc;*.inputrc\n" ..
 	\	       "All Files (*.*)\t*.*\n"
   let b:undo_ftplugin ..= " | unlet! b:browsefilter"
 endif
 
+if has('unix') && executable('less')
+  if !has('gui_running')
+    command -buffer -nargs=1 Sman
+          \ silent exe '!' . 'LESS= MANPAGER="less --pattern=''^\s+' . <q-args> . '\b'' --hilite-search" man ' . '3 readline' |
+          \ redraw!
+  elseif has('terminal')
+    command -buffer -nargs=1 Sman
+          \ silent exe 'term ' . 'env LESS= MANPAGER="less --pattern=''' . escape('^\s+' . <q-args> . '\b', '\') . ''' --hilite-search" man ' . '3 readline'
+  endif
+  if exists(':Sman') == 2
+    setlocal iskeyword+=-
+    setlocal keywordprg=:Sman
+    let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword<'
+  endif
+endif
+
 let &cpo = s:cpo_save
 unlet s:cpo_save
 
--- a/runtime/ftplugin/rst.vim
+++ b/runtime/ftplugin/rst.vim
@@ -28,7 +28,7 @@ setlocal formatoptions+=tcroql
 " directives (..) and ordered lists (1.), although it can cause problems for
 " many other cases.
 "
-" More sophisticated indentation rules should be revisted in the future.
+" More sophisticated indentation rules should be revisited in the future.
 
 if exists("g:rst_style") && g:rst_style != 0
     setlocal expandtab shiftwidth=3 softtabstop=3 tabstop=8
--- a/runtime/ftplugin/sh.vim
+++ b/runtime/ftplugin/sh.vim
@@ -41,6 +41,19 @@ if (has("gui_win32") || has("gui_gtk")) 
   let b:undo_ftplugin ..= " | unlet! b:browsefilter"
 endif
 
+if (exists('b:is_bash') && (b:is_bash == 1)) ||
+      \ (exists('b:is_sh') && (b:is_sh == 1))
+  if !has('gui_running') && executable('less')
+    command! -buffer -nargs=1 Help silent exe '!bash -c "{ help "<args>" 2>/dev/null || man "<args>"; } | LESS= less"' | redraw!
+  elseif has('terminal')
+    command! -buffer -nargs=1 Help silent exe ':term bash -c "help "<args>" 2>/dev/null || man "<args>""'
+  else
+    command! -buffer -nargs=1 Help echo system('bash -c "help <args>" 2>/dev/null || man "<args>"')
+  endif
+  setlocal keywordprg=:Help
+  let b:undo_ftplugin .= '| setlocal keywordprg<'
+endif
+
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
 unlet s:save_cpo
--- a/runtime/ftplugin/sql.vim
+++ b/runtime/ftplugin/sql.vim
@@ -140,7 +140,7 @@ if !exists("*SQL_SetType")
                         \ )
 
             " Remove duplicates, since sqlanywhere.vim can exist in the
-            " sytax, indent and ftplugin directory, yet we only want
+            " syntax, indent and ftplugin directory, yet we only want
             " to display the option once
             let index = match(sqls, '.\{-}\ze\n')
             while index > -1
@@ -204,7 +204,7 @@ if !exists("*SQL_SetType")
         endif
         let b:sql_type_override = new_sql_type
 
-        " Remove any cached SQL since a new sytax will have different
+        " Remove any cached SQL since a new syntax will have different
         " items and groups
         if !exists('g:loaded_sql_completion') || g:loaded_sql_completion >= 100
             call sqlcomplete#ResetCacheSyntax()
--- a/runtime/ftplugin/sshconfig.vim
+++ b/runtime/ftplugin/sshconfig.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
-" Language:             OpenSSH client configuration file
-" Previous Maintainer:  Nikolai Weibull <now@bitwi.se>
-" Latest Revision:      2008-07-09
+" Language:         OpenSSH client configuration file
+" Previous Maintainer:       Nikolai Weibull <now@bitwi.se>
+" Latest Revision:  2008-07-09
 
 if exists("b:did_ftplugin")
   finish
@@ -11,9 +11,24 @@ let b:did_ftplugin = 1
 let s:cpo_save = &cpo
 set cpo&vim
 
-let b:undo_ftplugin = "setl com< cms< fo<"
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+let b:undo_ftplugin = 'setlocal com< cms< fo<'
 
-setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+if has('unix') && executable('less')
+  if !has('gui_running')
+    command -buffer -nargs=1 Sman
+          \ silent exe '!' . 'LESS= MANPAGER="less --pattern=''^\s+' . <q-args> . '$'' --hilite-search" man ' . 'ssh_config' |
+          \ redraw!
+  elseif has('terminal')
+    command -buffer -nargs=1 Sman
+          \ silent exe 'term ' . 'env LESS= MANPAGER="less --pattern=''' . escape('^\s+' . <q-args> . '$', '\') . ''' --hilite-search" man ' . 'ssh_config'
+  endif
+  if exists(':Sman') == 2
+    setlocal iskeyword+=-
+    setlocal keywordprg=:Sman
+    let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword<'
+  endif
+endif
 
 let &cpo = s:cpo_save
 unlet s:cpo_save
--- a/runtime/ftplugin/sudoers.vim
+++ b/runtime/ftplugin/sudoers.vim
@@ -15,5 +15,21 @@ let b:undo_ftplugin = "setl com< cms< fo
 
 setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
 
+if has('unix') && executable('less')
+  if !has('gui_running')
+    command -buffer -nargs=1 Sman
+          \ silent exe '!' . 'LESS= MANPAGER="less --pattern=''\b' . <q-args> . '\b'' --hilite-search" man ' . 'sudoers' |
+          \ redraw!
+  elseif has('terminal')
+    command -buffer -nargs=1 Sman
+          \ silent exe ':term ' . 'env LESS= MANPAGER="less --pattern=''' . escape('\b' . <q-args> . '\b', '\') . ''' --hilite-search" man ' . 'sudoers'
+  endif
+  if exists(':Sman') == 2
+    setlocal iskeyword+=-
+    setlocal keywordprg=:Sman
+    let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword<'
+  endif
+endif
+
 let &cpo = s:cpo_save
 unlet s:cpo_save
--- a/runtime/ftplugin/systemd.vim
+++ b/runtime/ftplugin/systemd.vim
@@ -7,35 +7,30 @@ if !exists('b:did_ftplugin')
   runtime! ftplugin/dosini.vim
 endif
 
-if !has('unix')
-  finish
-endif
-
-if !has('gui_running')
-  command! -buffer -nargs=1 Sman silent exe '!' . KeywordLookup_systemd(<q-args>) | redraw!
-elseif has('terminal')
-  command! -buffer -nargs=1 Sman silent exe 'term ' . KeywordLookup_systemd(<q-args>)
-else
-  finish
+if has('unix') && executable('less')
+  if !has('gui_running')
+    command -buffer -nargs=1 Sman silent exe '!' . KeywordLookup_systemd(<q-args>) | redraw!
+  elseif has('terminal')
+    command -buffer -nargs=1 Sman silent exe 'term ' . KeywordLookup_systemd(<q-args>)
+  endif
+  if exists(':Sman') == 2
+    if !exists('*KeywordLookup_systemd')
+      function KeywordLookup_systemd(keyword) abort
+        let matches = matchlist(getline(search('\v^\s*\[\s*.+\s*\]\s*$', 'nbWz')), '\v^\s*\[\s*(\k+).*\]\s*$')
+        if len(matches) > 1
+          let section = matches[1]
+          return 'LESS= MANPAGER="less --pattern=''(^|,)\s+' . a:keyword . '=$'' --hilite-search" man ' . 'systemd.' . section
+        else
+          return 'LESS= MANPAGER="less --pattern=''(^|,)\s+' . a:keyword . '=$'' --hilite-search" man ' . 'systemd'
+        endif
+      endfunction
+    endif
+    setlocal iskeyword+=-
+    setlocal keywordprg=:Sman
+    if !exists('b:undo_ftplugin') || empty(b:undo_ftplugin)
+      let b:undo_ftplugin = 'setlocal keywordprg< iskeyword<'
+    else
+      let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword<'
+    endif
+  endif
 endif
-
-if !exists('*KeywordLookup_systemd')
-  function KeywordLookup_systemd(keyword) abort
-    let matches = matchlist(getline(search('\v^\s*\[\s*.+\s*\]\s*$', 'nbWz')), '\v^\s*\[\s*(\k+).*\]\s*$')
-    if len(matches) > 1
-      let section = matches[1]
-      return 'LESS= MANPAGER="less --pattern=''(^|,)\s+' . a:keyword . '=$'' --hilite-search" man ' . 'systemd.' . section
-    else
-      return 'LESS= MANPAGER="less --pattern=''(^|,)\s+' . a:keyword . '=$'' --hilite-search" man ' . 'systemd'
-    endif
-  endfunction
-endif
-
-setlocal iskeyword+=-
-setlocal keywordprg=:Sman
-
-if !exists('b:undo_ftplugin') || empty(b:undo_ftplugin)
-  let b:undo_ftplugin = 'setlocal keywordprg< iskeyword<'
-else
-  let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword<'
-endif
--- a/runtime/ftplugin/tidy.vim
+++ b/runtime/ftplugin/tidy.vim
@@ -1,5 +1,5 @@
 " Vim filetype plugin file
-" Language:	HMTL Tidy Configuration
+" Language:	HTML Tidy Configuration
 " Maintainer:	Doug Kearns <dougkearns@gmail.com>
 " Last Change:	2020 Sep 4
 
--- a/runtime/ftplugin/udevrules.vim
+++ b/runtime/ftplugin/udevrules.vim
@@ -15,5 +15,21 @@ let b:undo_ftplugin = "setl com< cms< fo
 
 setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
 
+if has('unix') && executable('less')
+  if !has('gui_running')
+    command -buffer -nargs=1 Sman
+          \ silent exe '!' . 'LESS= MANPAGER="less --pattern=''^\s{,8}' . <q-args> . '\b'' --hilite-search" man ' . 'udev' |
+          \ redraw!
+  elseif has('terminal')
+    command -buffer -nargs=1 Sman
+          \ silent exe ':term ' . 'env LESS= MANPAGER="less --pattern=''' . escape('^\s{,8}' . <q-args> . '\b', '\') . ''' --hilite-search" man ' . 'udev'
+  endif
+  if exists(':Sman') == 2
+    setlocal iskeyword+=-
+    setlocal keywordprg=:Sman
+    let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword<'
+  endif
+endif
+
 let &cpo = s:cpo_save
 unlet s:cpo_save
--- a/runtime/ftplugin/zig.vim
+++ b/runtime/ftplugin/zig.vim
@@ -17,7 +17,7 @@ compiler zig_build
 " Match Zig builtin fns
 setlocal iskeyword+=@-@
 
-" Recomended code style, no tabs and 4-space indentation
+" Recommended code style, no tabs and 4-space indentation
 setlocal expandtab
 setlocal tabstop=8
 setlocal softtabstop=4
--- a/runtime/indent/bash.vim
+++ b/runtime/indent/bash.vim
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	bash
-" Maintainer:	Bram
-" Last Change:	2019 Sep 27
+" Maintainer:	The Vim Project <https://github.com/vim/vim>
+" Last Change:	2023 Aug 13
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
--- a/runtime/indent/html.vim
+++ b/runtime/indent/html.vim
@@ -1,7 +1,7 @@
 " Vim indent script for HTML
-" Maintainer:	Bram Moolenaar
+" Maintainer:	The Vim Project <https://github.com/vim/vim>
 " Original Author: Andy Wokula <anwoku@yahoo.de>
-" Last Change:	2022 Jan 31
+" Last Change:	2023 Aug 13
 " Version:	1.0 "{{{
 " Description:	HTML indent script with cached state for faster indenting on a
 "		range of lines.
--- a/runtime/indent/mail.vim
+++ b/runtime/indent/mail.vim
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	Mail
-" Maintainer:	Bram Moolenaar
-" Last Change:	2021 Sep 26
+" Maintainer:	The Vim Project <https://github.com/vim/vim>
+" Last Change:	2023 Aug 13
 
 if exists("b:did_indent")
   finish
--- a/runtime/indent/nsis.vim
+++ b/runtime/indent/nsis.vim
@@ -15,7 +15,7 @@ setlocal nosmartindent
 setlocal noautoindent
 setlocal indentexpr=GetNsisIndent(v:lnum)
 setlocal indentkeys=!^F,o,O
-setlocal indentkeys+==~${Else,=~${EndIf,=~${EndUnless,=~${AndIf,=~${AndUnless,=~${OrIf,=~${OrUnless,=~${Case,=~${Default,=~${EndSelect,=~${EndSwith,=~${Loop,=~${Next,=~${MementoSectionEnd,=~FunctionEnd,=~SectionEnd,=~SectionGroupEnd,=~PageExEnd,0=~!macroend,0=~!if,0=~!else,0=~!endif
+setlocal indentkeys+==~${Else,=~${EndIf,=~${EndUnless,=~${AndIf,=~${AndUnless,=~${OrIf,=~${OrUnless,=~${Case,=~${Default,=~${EndSelect,=~${EndSwitch,=~${Loop,=~${Next,=~${MementoSectionEnd,=~FunctionEnd,=~SectionEnd,=~SectionGroupEnd,=~PageExEnd,0=~!macroend,0=~!if,0=~!else,0=~!endif
 
 let b:undo_indent = "setl ai< inde< indk< si<"
 
--- a/runtime/indent/php.vim
+++ b/runtime/indent/php.vim
@@ -327,13 +327,13 @@ endfun
 
 function! FindArrowIndent (lnum)  " {{{
 
-    let parrentArrowPos = -1
+    let parentArrowPos = -1
     let cursorPos = -1
     let lnum = a:lnum
     while lnum > 1
 	let last_line = getline(lnum)
 	if last_line =~ '^\s*->'
-	    let parrentArrowPos = indent(a:lnum)
+	    let parentArrowPos = indent(a:lnum)
 	    break
 	else
 
@@ -355,28 +355,28 @@ function! FindArrowIndent (lnum)  " {{{
 		    else
 		    endif
 		else
-		    let parrentArrowPos = -1
+		    let parentArrowPos = -1
 		    break
 		end
 	    endif
 
 	    if cleanedLnum =~ '->'
 		call cursor(lnum, cursorPos == -1 ? strwidth(cleanedLnum) : cursorPos)
-		let parrentArrowPos = searchpos('->', 'cWb', lnum)[1] - 1
+		let parentArrowPos = searchpos('->', 'cWb', lnum)[1] - 1
 
 		break
 	    else
-		let parrentArrowPos = -1
+		let parentArrowPos = -1
 		break
 	    endif
 	endif
     endwhile
 
-    if parrentArrowPos == -1
-	let parrentArrowPos = indent(lnum) + shiftwidth()
+    if parentArrowPos == -1
+	let parentArrowPos = indent(lnum) + shiftwidth()
     end
 
-    return parrentArrowPos
+    return parentArrowPos
 endfun "}}}
 
 function! FindTheIfOfAnElse (lnum, StopAfterFirstPrevElse) " {{{
--- a/runtime/indent/rapid.vim
+++ b/runtime/indent/rapid.vim
@@ -146,7 +146,7 @@ endfunction
 
 " Returns the length of the line until a:str occur outside a string or
 " comment. Search starts at string index a:startIdx.
-" If a:str is a word also add word bounderies and case insesitivity.
+" If a:str is a word also add word boundaries and case insensitivity.
 " Note: rapidTodoComment and rapidDebugComment are not taken into account.
 function s:RapidLenTilStr(lnum, str, startIdx) abort
 
@@ -179,8 +179,8 @@ function s:RapidLenTilStr(lnum, str, sta
   return -1
 endfunction
 
-" a:lchar shoud be one of (, ), [, ], { or }
-" returns the number of opening/closing parenthesise which have no
+" a:lchar should be one of (, ), [, ], { or }
+" returns the number of opening/closing parentheses which have no
 " closing/opening match in getline(a:lnum)
 function s:RapidLoneParen(lnum,lchar) abort
   if a:lchar == "(" || a:lchar == ")"
@@ -205,7 +205,7 @@ function s:RapidLoneParen(lnum,lchar) ab
   endif
 
   let l:opnParen = 0
-  " count opening brakets
+  " count opening brackets
   let l:i = 0
   while l:i >= 0
     let l:i = s:RapidLenTilStr(a:lnum, l:opnParChar, l:i)
@@ -216,7 +216,7 @@ function s:RapidLoneParen(lnum,lchar) ab
   endwhile
 
   let l:clsParen = 0
-  " count closing brakets
+  " count closing brackets
   let l:i = 0
   while l:i >= 0
     let l:i = s:RapidLenTilStr(a:lnum, l:clsParChar, l:i)
@@ -242,7 +242,7 @@ function s:RapidPreNoneBlank(lnum) abort
   let nPreNoneBlank = prevnonblank(a:lnum)
 
   while nPreNoneBlank>0 && getline(nPreNoneBlank) =~ '\v\c^\s*(\%\%\%|!)'
-    " Previouse none blank line irrelevant. Look further aback.
+    " Previous none blank line irrelevant. Look further aback.
     let nPreNoneBlank = prevnonblank(nPreNoneBlank - 1)
   endwhile
 
--- a/runtime/keymap/accents.vim
+++ b/runtime/keymap/accents.vim
@@ -1,6 +1,6 @@
 " Vim Keymap file for latin1 accents through dead characters
-" Maintainer: Bram Moolenaar
-" Last Change: 2006 Mar 29
+" Maintainer:	The Vim Project <https://github.com/vim/vim>
+" Last Change:	2023 Aug 13
 
 " All characters are given literally, conversion to another encoding (e.g.,
 " UTF-8) should work.
--- a/runtime/lang/menu_it_it.latin1.vim
+++ b/runtime/lang/menu_it_it.latin1.vim
@@ -2,7 +2,7 @@
 " Maintainer:		Antonio Colombo <azc100@gmail.com>
 "			Vlad Sandrini <vlad.gently@gmail.com>
 "			Luciano Montanaro <mikelima@cirulla.net>
-" Last Change:	2022 Jun 17
+" Last Change:	2023 Aug 22
 " Original translations
 
 " Quit when menu translations have already been done.
@@ -20,7 +20,7 @@ menut &Help			&Aiuto
 
 menut &Overview<Tab><F1>	&Panoramica<Tab><F1>
 menut &User\ Manual		Manuale\ &Utente
-menut &How-to\ links	Co&Me\.\.\.
+menut &How-To\ Links	Co&Me\.\.\.
 menut &Find\.\.\.	&Cerca\.\.\.
 menut &Credits		Cr&Editi
 menut Co&pying		C&Opie
@@ -29,7 +29,7 @@ menut O&rphans		O&Rfani
 menut &Version		&Versione
 menut &About		&Intro
 
-let g:menutrans_help_dialog = "Batti un comando o una parola per cercare aiuto:\n\nPremetti i_ per comandi in modo Input (p.es.: i_CTRL-X)\nPremetti c_ per comandi che editano la linea-comandi (p.es.: c_<Del>)\nPremetti ' per un nome di opzione (p.es.: 'shiftwidth')"
+let g:menutrans_help_dialog = "Batti un comando o una parola per cercare aiuto su:\n\nPremetti i_ per comandi in modo Input (p.es.: i_CTRL-X)\nPremetti c_ per comandi che editano la linea-comandi (p.es.: c_<Del>)\nPremetti ' per un nome di opzione (p.es.: 'shiftwidth')"
 
 " File / File
 menut &File				&File
@@ -68,7 +68,6 @@ menut Find\ and\ Rep&lace\.\.\.<Tab>:s	&
 menut Settings\ &Window			&Finestra\ Impostazioni
 menut Startup\ &Settings		Impostazioni\ di\ &Avvio
 menut &Global\ Settings			Impostazioni\ &Globali
-menut Question				Domanda
 
 " Edit / Modifica / Impostazioni Globali
 
@@ -80,7 +79,7 @@ menut &Context\ lines		&Linee\ di\ conte
 
 menut &Virtual\ Edit		&Edit\ virtuale
 menut Never			Mai
-menut Block\ Selection		Selezione\ Blocco
+menut Block\ Selection		Seleziona\ Blocco
 menut Insert\ mode		Modo\ Insert
 menut Block\ and\ Insert	Selezione\ Blocco\ e\ Inserimento
 menut Always			Sempre
@@ -167,7 +166,7 @@ menut &File\ Format\.\.\.				Formato\ &F
 
 let g:menutrans_textwidth_dialog = "Batti nuova lunghezza linea (0 per inibire la formattazione): "
 let g:menutrans_fileformat_dialog = "Scegli formato con cui scrivere il file"
-let g:menutrans_fileformat_choices = " &Unix \n &Dos \n &Mac \n &Annullare "
+let g:menutrans_fileformat_choices = " &Unix\n&Dos\n&Mac\n&Annullare "
 
 menut Show\ C&olor\ Schemes\ in\ Menu	Mostra\ Schemi\ C&olore\ in\ Menù
 menut C&olor\ Scheme		Schema\ c&Olori
@@ -180,8 +179,12 @@ menut evening		sera
 menut industry		industria
 menut morning		mattino
 menut peachpuff		pesca
+menut quiet		quieto
 menut shine		brillante
+menut sorbet		sorbetto
 menut slate		ardesia
+menut torte		torta
+menut wildcharm		fascino\ selvaggio
 menut BLUE		BLÙ
 menut DARKBLUE		BLÙ\ SCURO
 menut DESERT		DESERTO
@@ -190,8 +193,12 @@ menut EVENING		SERA
 menut INDUSTRY		INDUSTRIA
 menut MORNING		MATTINO
 menut PEACHPUFF		PESCA
+menut QUIET		QUIETO
 menut SHINE		BRILLANTE
+menut SORBET		SORBETTO
 menut SLATE		ARDESIA
+menut TORTE		TORTA
+menut WILDCHARM		FASCINO\ SELVAGGIO
 
 menut Show\ &Keymaps\ in\ Menu	Mostra\ Ma&ppe\ tastiera\ in\ Menù
 menut &Keymap			Ma&ppa\ tastiera
@@ -202,29 +209,105 @@ menut arabic			arabo
 menut armenian-eastern		armeno-orientale
 menut armenian-western		armeno-occidentale
 menut belarusian-jcuken		bielorusso-jcuken
+menut bulgarian-bds		bulgaro-bds
+menut bulgarian-phonetic	bulgaro-fonetico
+menut canfr-win			franco-canadese-win
+menut croatian			croato
 menut czech			ceco
+menut dvorak			tastiera-dvorak
+menut esperanto			esperanto
+menut french-azerty		francese-azerty
+menut german-qwertz		tedesco-qwertz
 menut greek			greco
 menut hebrew			ebraico
 menut hebrewp			ebraicop
+menut kana			kana
+menut kazakh-jcuken		kazako-jcuken
+menut korean			coreano
+menut korean-dubeolsik		coreano-dubeolsik
+menut lithuanian-baltic		lituano-baltico
 menut magyar			ungherese
+menut mongolian			mongolo
+menut oldturkic-orkhon		turco-antico-orkhon
+menut oldturkic-yenisei		turco-antico-yenisei
 menut persian			persiano
+menut persian-iranian		persiano-iraniano
+menut pinyin			pinyin
+menut polish-slash		polacco-slash
+menut russian-dvorak		russo-dvorak
+menut russian-jcuken		russo-jcuken
+menut russian-jcukenmac		russo-jcukenmac
+menut russian-jcukenwin		russo-jcukenwin
+menut russian-jcukenwintype	russo-jcukenwintype
+menut russian-typograph		russo-tipografico
+menut russian-yawerty		russo-yawerty
 menut serbian			serbo
 menut serbian-latin		serbo-latino
+menut sinhala			singalese
+menut sinhala-phonetic		singalese-phonetic
 menut slovak			slovacco
+menut tamil			tamil
+menut thaana			thaana
+menut thaana-phonetic		thaana-fonetico
+menut turkish-f			turco-f
+menut turkish-q			turco-q
+menut ukrainian-dvorak		ukraino-dvorak
+menut ukrainian-jcuken		ukraino-jcuken
+menut vietnamese-telex		vietnamita-telex
+menut vietnamese-viqr		vietnamita-viqr
+menut vietnamese-vni		vietnamita-vni
 menut ACCENTS			ACCENTI
 menut ARABIC			ARABO
 menut ARMENIAN-EASTERN		ARMENO-ORIENTALE
 menut ARMENIAN-WESTERN		ARMENO-OCCIDENTALE
 menut BELARUSIAN-JCUKEN		BIELORUSSO-JCUKEN
+menut BULGARIAN-BDS		BULGARO-BDS
+menut BULGARIAN-PHONETIC	BULGARO-FONETICO
+menut CANFR-WIN			FRANCO-CANADESE-WIN
+menut CROATIAN			CROATO
 menut CZECH			CECO
+menut DVORAK			TASTIERA-DVORAK
+menut ESPERANTO			ESPERANTO
+menut FRENCH-AZERTY		FRANCESE-AZERTY
+menut GERMAN-QWERTZ		TEDESCO-QWERTZ
 menut GREEK			GRECO
 menut HEBREW			EBRAICO
 menut HEBREWP			EBRAICOP
+menut KANA			KANA
+menut KAZAKH-JCUKEN		KAZAKO-JCUKEN
+menut KOREAN			COREANO
+menut KOREAN-DUBEOLSIK		COREANO-DUBEOLSIK
+menut LITHUANIAN-BALTIC		LITUANO-BALTICO
 menut MAGYAR			UNGHERESE
+menut MONGOLIAN			MONGOLO
+menut OLDTURKIC-ORKHON		TURCO-ANTICO-ORKHON
+menut OLDTURKIC-YENISEI		TURCO-ANTICO-YENISEI
 menut PERSIAN			PERSIANO
+menut PERSIAN-IRANIAN		PERSIANO-IRANIANO
+menut PINYIN			PINYIN
+menut POLISH-SLASH		POLACCO-SLASH
+menut RUSSIAN-DVORAK		RUSSO-DVORAK
+menut RUSSIAN-JCUKEN		RUSSO-JCUKEN
+menut RUSSIAN-JCUKENMAC		RUSSO-JCUKENMAC
+menut RUSSIAN-JCUKENWIN		RUSSO-JCUKENWIN
+menut RUSSIAN-JCUKENWINTYPE	RUSSO-JCUKENWINTYPE
+menut RUSSIAN-TYPOGRAPH		RUSSO-TIPOGRAFICO
+menut RUSSIAN-YAWERTY		RUSSO-YAWERTY
 menut SERBIAN			SERBO
 menut SERBIAN-LATIN		SERBO-LATINO
+menut SINHALA			SINGALESE
+menut SINHALA-PHONETIC		SINGALESE-PHONETIC
 menut SLOVAK			SLOVACCO
+menut TAMIL			TAMIL
+menut THAANA			THAANA
+menut THAANA-PHONETIC		THAANA-FONETICO
+menut TURKISH-F			TURCO-F
+menut TURKISH-Q			TURCO-Q
+menut UKRAINIAN-DVORAK		UKRAINO-DVORAK
+menut UKRAINIAN-JCUKEN		UKRAINO-JCUKEN
+menut VIETNAMESE-TELEX		VIETNAMITA-TELEX
+menut VIETNAMESE-VIQR		VIETNAMITA-VIQR
+menut VIETNAMESE-VNI		VIETNAMITA-VNI
 
 menut Select\ Fo&nt\.\.\.		Scegli\ &Font\.\.\.
 
@@ -233,7 +316,7 @@ menut &Tools				&Strumenti
 
 menut &Jump\ to\ this\ tag<Tab>g^]	&Vai\ a\ questa\ tag<Tab>g^]
 menut Jump\ &back<Tab>^T		Torna\ &Indietro<Tab>^T
-menut Build\ &Tags\ File		Costruisci\ file\ &Tags\
+menut Build\ &Tags\ File		Costruisci\ file\ &Tag\
 " Menù ortografia / Spelling
 menut &Spelling			&Ortografia
 
@@ -243,6 +326,7 @@ menut To\ &Next\ error<Tab>]s		Errore\ &
 menut To\ &Previous\ error<Tab>[s	Errore\ &Precedente<tab>[s
 menut Suggest\ &Corrections<Tab>z=	&Suggerimenti<Tab>z=
 menut &Repeat\ correction<Tab>:spellrepall	&Ripeti\ correzione<Tab>:spellrepall
+menut Set\ language\ to			Imposta\ lingua\ a
 menut Set\ language\ to\ "en"		Imposta\ lingua\ a\ "en"
 menut Set\ language\ to\ "en_au"	Imposta\ lingua\ a\ "en_au"
 menut Set\ language\ to\ "en_ca"	Imposta\ lingua\ a\ "en_ca"
@@ -255,25 +339,25 @@ menut &Find\ More\ Languages		&Trova\ al
 menut &Folding					&Piegature
 " apri e chiudi piegature
 menut &Enable/Disable\ folds<Tab>zi		Pi&egature\ Sì/No<Tab>zi
-menut &View\ Cursor\ Line<Tab>zv			&Vedi\ linea\ col\ Cursore<Tab>zv
-menut Vie&w\ Cursor\ Line\ only<Tab>zMzx		Vedi\ &Solo\ linea\ col\ Cursore<Tab>zMzx
-menut C&lose\ more\ folds<Tab>zm			C&Hiudi\ più\ piegature<Tab>zm
-menut &Close\ all\ folds<Tab>zM			&Chiudi\ tutte\ le\ piegature<Tab>zM
-menut O&pen\ more\ folds<Tab>zr			A&Pri\ più\ piegature<Tab>zr
-menut &Open\ all\ folds<Tab>zR			&Apri\ tutte\ le\ piegature<Tab>zR
+menut &View\ Cursor\ Line<Tab>zv		&Vedi\ linea\ col\ Cursore<Tab>zv
+menut Vie&w\ Cursor\ Line\ only<Tab>zMzx	Vedi\ &Solo\ linea\ col\ Cursore<Tab>zMzx
+menut C&lose\ More\ folds<Tab>zm		C&Hiudi\ più\ piegature<Tab>zm
+menut &Close\ All\ folds<Tab>zM			&Chiudi\ tutte\ le\ piegature<Tab>zM
+menut O&pen\ More\ folds<Tab>zr			A&Pri\ più\ piegature<Tab>zr
+menut &Open\ All\ folds<Tab>zR			&Apri\ tutte\ le\ piegature<Tab>zR
 " metodo piegatura
 menut Fold\ Met&hod				Meto&Do\ piegatura
 menut M&anual					&Manuale
 menut I&ndent					&Nidificazione
-menut E&xpression					&Espressione\ Reg\.
+menut E&xpression				&Espressione\ Reg\.
 menut S&yntax					&Sintassi
 menut &Diff					&Differenza
 menut Ma&rker					Mar&Catura
 
 " crea e cancella piegature
 menut Create\ &Fold<Tab>zf			Crea\ &Piegatura<Tab>zf
-menut &Delete\ Fold<Tab>zd			&Leva\ piegatura<Tab>zd
-menut Delete\ &All\ Folds<Tab>zD			Leva\ &Tutte\ le\ piegature<Tab>zD
+menut &Delete\ Fold<Tab>zd			&Togli\ piegatura<Tab>zd
+menut Delete\ &All\ Folds<Tab>zD		Togli\ &Tutte\ le\ piegature<Tab>zD
 " movimenti all'interno delle piegature
 menut Fold\ col&umn\ width			Larghezza\ piegat&Ure\ in\ colonne
 
@@ -285,9 +369,9 @@ menut &Put\ Block				&Esporta\ differenz
 
 menut &Make<Tab>:make		Esegui\ &Make<Tab>:make
 
-menut &List\ Errors<Tab>:cl		Lista\ &Errori<Tab>:cl
+menut &List\ Errors<Tab>:cl	Lista\ &Errori<Tab>:cl
 menut L&ist\ Messages<Tab>:cl!	Lista\ &Messaggi<Tab>:cl!
-menut &Next\ Error<Tab>:cn		Errore\ s&Uccessivo<Tab>:cn
+menut &Next\ Error<Tab>:cn	Errore\ s&Uccessivo<Tab>:cn
 menut &Previous\ Error<Tab>:cp	Errore\ &Precedente<Tab>:cp
 menut &Older\ List<Tab>:cold	Lista\ men&O\ recente<Tab>:cold
 menut N&ewer\ List<Tab>:cnew	Lista\ più\ rece&Nte<Tab>:cnew
@@ -302,11 +386,12 @@ menut &Convert\ to\ HEX<Tab>:%!xxd	&Conv
 menut Conve&rt\ back<Tab>:%!xxd\ -r	Conve&rti\ da\ esadecimale<Tab>:%!xxd\ -r
 
 menut Se&T\ Compiler		Impo&Sta\ Compilatore
+menut Show\ Compiler\ Se&ttings\ in\ Menu	Mostra\ Impos&Tazioni\ Compilatore\ nel\ Menù
 
 " Buffers / Buffer
 menut &Buffers			&Buffer
 
-menut &Refresh\ menu		A&ggiorna\ menù
+menut &Refresh\ menu		A&Ggiorna\ menù
 menut &Delete			&Elimina
 menut &Alternate		&Alternato
 menut &Next			&Successivo
@@ -352,10 +437,10 @@ menut &Right\ side<Tab>^WL		Lato\ &Destr
 menut Rotate\ &Up<Tab>^WR		Ruota\ verso\ l'&Alto<Tab>^WR
 menut Rotate\ &Down<Tab>^Wr		Ruota\ verso\ il\ &Basso<Tab>^Wr
 menut &Equal\ Size<Tab>^W=		&Uguale\ ampiezza<Tab>^W=
-menut &Max\ Height<Tab>^W_		&Altezza\ massima<Tab>^W_
-menut M&in\ Height<Tab>^W1_		A&Ltezza\ minima<Tab>^W1_
-menut Max\ &Width<Tab>^W\|		Larghezza\ massima<Tab>^W\|
-menut Min\ Widt&h<Tab>^W1\|		Larghezza\ minima<Tab>^W1\|
+menut &Max\ Height<Tab>^W_		A&Ltezza\ massima<Tab>^W_
+menut M&in\ Height<Tab>^W1_		Al&Tezza\ minima<Tab>^W1_
+menut Max\ &Width<Tab>^W\|		Lar&Ghezza\ massima<Tab>^W\|
+menut Min\ Widt&h<Tab>^W1\|		Larg&hhezza\ minima<Tab>^W1\|
 
 " The popup menu
 menut &Undo		&Annulla
@@ -363,11 +448,13 @@ menut Cu&t		&Taglia
 menut &Copy		&Copia
 menut &Paste		&Incolla
 menut &Delete		&Elimina
-menut Select\ Blockwise 	Seleziona\ in\ blocco
+menut Select\ Blockwise 	Seleziona\ Blocco
 menut Select\ &Word		Seleziona\ &Parola
-menut Select\ &Line		Seleziona\ &Linea
+menut Select\ &Line		Seleziona\ &Riga
 menut Select\ &Block 		Seleziona\ &Blocco
-menut Select\ &All		Seleziona\ t&Utto
+menut Select\ &All		Seleziona\ &Tutto
+menut Select\ &Sentence		Seleziona\ &Frase
+menut Select\ Pa&ragraph	Seleziona\ Para&Grafo
 
 " The GUI Toolbar / Barra Strumenti
 menut Open		Apri
--- a/runtime/lang/menu_nl_nl.latin1.vim
+++ b/runtime/lang/menu_nl_nl.latin1.vim
@@ -1,6 +1,6 @@
 " Menu Translations:	Nederlands
-" Maintainer:		Bram Moolenaar
-" Last Change:	2012 May 01
+" Maintainer:		The Vim Project <https://github.com/vim/vim>
+" Last Change:		2023 Aug 13
 " Original translations
 
 " Quit when menu translations have already been done.
--- a/runtime/menu.vim
+++ b/runtime/menu.vim
@@ -122,7 +122,7 @@ enddef
 " File menu
 an 10.310 &File.&Open\.\.\.<Tab>:e		:browse confirm e<CR>
 an 10.320 &File.Sp&lit-Open\.\.\.<Tab>:sp	:browse sp<CR>
-an 10.320 &File.Open\ Tab\.\.\.<Tab>:tabnew	:browse tabnew<CR>
+an 10.320 &File.Open\ &Tab\.\.\.<Tab>:tabnew	:browse tabnew<CR>
 an 10.325 &File.&New<Tab>:enew			:confirm enew<CR>
 an <silent> 10.330 &File.&Close<Tab>:close
 	\ :if winheight(2) < 0 && tabpagewinnr(2) == 0 <Bar>
--- a/runtime/pack/dist/opt/editexisting/plugin/editexisting.vim
+++ b/runtime/pack/dist/opt/editexisting/plugin/editexisting.vim
@@ -1,6 +1,6 @@
 " Vim Plugin:	Edit the file with an existing Vim if possible
-" Maintainer:	Bram Moolenaar
-" Last Change:	2022 Jun 17
+" Maintainer:	The Vim Project <https://github.com/vim/vim>
+" Last Change:	2023 Aug 13
 
 " To use add ":packadd! editexisting" in your vimrc file.
 
--- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
@@ -2,7 +2,7 @@
 "
 " Author: Bram Moolenaar
 " Copyright: Vim license applies, see ":help license"
-" Last Change: 2023 Jun 24
+" Last Change: 2023 Aug 23
 "
 " WORK IN PROGRESS - The basics works stable, more to come
 " Note: In general you need at least GDB 7.12 because this provides the
@@ -229,13 +229,13 @@ endfunc
 func s:CloseBuffers()
   exe 'bwipe! ' . s:ptybuf
   exe 'bwipe! ' . s:commbuf
-  if s:asmbuf > 0
+  if s:asmbuf > 0 && bufexists(s:asmbuf)
     exe 'bwipe! ' . s:asmbuf
   endif
-  if s:varbuf > 0
+  if s:varbuf > 0 && bufexists(s:varbuf)
     exe 'bwipe! ' . s:varbuf
   endif
-  s:running = 0
+  let s:running = 0
   unlet! s:gdbwin
 endfunc
 
@@ -453,6 +453,8 @@ func s:StartDebug_prompt(dict)
     exe 'bwipe! ' . s:promptbuf
     return
   endif
+  exe $'au BufUnload <buffer={s:promptbuf}> ++once ' ..
+	\ 'call job_stop(s:gdbjob, ''kill'')'
   " Mark the buffer modified so that it's not easy to close.
   set modified
   let s:gdb_channel = job_getchannel(s:gdbjob)
@@ -617,9 +619,16 @@ endfunc
 func s:GdbOutCallback(channel, text)
   call ch_log('received from gdb: ' . a:text)
 
+  " Disassembly messages need to be forwarded as-is.
+  if s:parsing_disasm_msg
+    call s:CommOutput(a:channel, a:text)
+    return
+  end
+
   " Drop the gdb prompt, we have our own.
   " Drop status and echo'd commands.
-  if a:text == '(gdb) ' || a:text == '^done' || a:text[0] == '&'
+  if a:text == '(gdb) ' || a:text == '^done' ||
+	\ (a:text[0] == '&' && a:text !~ '^&"disassemble')
     return
   endif
   if a:text =~ '^\^error,msg='
@@ -647,8 +656,9 @@ func s:GdbOutCallback(channel, text)
 endfunc
 
 " Decode a message from gdb.  "quotedText" starts with a ", return the text up
-" to the next ", unescaping characters:
+" to the next unescaped ", unescaping characters:
 " - remove line breaks (unless "literal" is v:true)
+" - change \" to "
 " - change \\t to \t (unless "literal" is v:true)
 " - change \0xhh to \xhh (disabled for now)
 " - change \ooo to octal
@@ -659,24 +669,25 @@ func s:DecodeMessage(quotedText, literal
     return
   endif
   let msg = a:quotedText
-        \ ->substitute('^"\|".*', '', 'g')
-        " multi-byte characters arrive in octal form
-        " NULL-values must be kept encoded as those break the string otherwise
+        \ ->substitute('^"\|[^\\]\zs".*', '', 'g')
+        \ ->substitute('\\"', '"', 'g')
+        "\ multi-byte characters arrive in octal form
+        "\ NULL-values must be kept encoded as those break the string otherwise
         \ ->substitute('\\000', s:NullRepl, 'g')
         \ ->substitute('\\\o\o\o', {-> eval('"' .. submatch(0) .. '"')}, 'g')
-        " Note: GDB docs also mention hex encodings - the translations below work
-        "       but we keep them out for performance-reasons until we actually see
-        "       those in mi-returns
-        " \ ->substitute('\\0x\(\x\x\)', {-> eval('"\x' .. submatch(1) .. '"')}, 'g')
-        " \ ->substitute('\\0x00', s:NullRepl, 'g')
+        "\ Note: GDB docs also mention hex encodings - the translations below work
+        "\       but we keep them out for performance-reasons until we actually see
+        "\       those in mi-returns
+        "\ \ ->substitute('\\0x\(\x\x\)', {-> eval('"\x' .. submatch(1) .. '"')}, 'g')
+        "\ \ ->substitute('\\0x00', s:NullRepl, 'g')
         \ ->substitute('\\\\', '\', 'g')
         \ ->substitute(s:NullRepl, '\\000', 'g')
   if !a:literal
-          return msg
+    return msg
         \ ->substitute('\\t', "\t", 'g')
         \ ->substitute('\\n', '', 'g')
   else
-          return msg
+    return msg
   endif
 endfunc
 const s:NullRepl = 'XXXNULLXXX'
@@ -709,15 +720,7 @@ func s:EndTermDebug(job, status)
   endif
 
   exe 'bwipe! ' . s:commbuf
-  if s:asmbuf > 0
-    exe 'bwipe! ' . s:asmbuf
-  endif
-  if s:varbuf > 0
-    exe 'bwipe! ' . s:varbuf
-  endif
-  let s:running = 0
   unlet s:gdbwin
-
   call s:EndDebugCommon()
 endfunc
 
@@ -727,6 +730,13 @@ func s:EndDebugCommon()
   if exists('s:ptybuf') && s:ptybuf
     exe 'bwipe! ' . s:ptybuf
   endif
+  if s:asmbuf > 0 && bufexists(s:asmbuf)
+    exe 'bwipe! ' . s:asmbuf
+  endif
+  if s:varbuf > 0 && bufexists(s:varbuf)
+    exe 'bwipe! ' . s:varbuf
+  endif
+  let s:running = 0
 
   " Restore 'signcolumn' in all buffers for which it was set.
   call win_gotoid(s:sourcewin)
@@ -774,12 +784,8 @@ func s:EndPromptDebug(job, status)
     doauto <nomodeline> User TermdebugStopPre
   endif
 
-  let curwinid = win_getid()
-  call win_gotoid(s:gdbwin)
-  set nomodified
-  close
-  if curwinid != s:gdbwin
-    call win_gotoid(curwinid)
+  if bufexists(s:promptbuf)
+    exe 'bwipe! ' . s:promptbuf
   endif
 
   call s:EndDebugCommon()
@@ -789,7 +795,6 @@ endfunc
 
 " Disassembly window - added by Michael Sartain
 "
-" - CommOutput: disassemble $pc
 " - CommOutput: &"disassemble $pc\n"
 " - CommOutput: ~"Dump of assembler code for function main(int, char**):\n"
 " - CommOutput: ~"   0x0000555556466f69 <+0>:\tpush   rbp\n"
@@ -799,7 +804,6 @@ endfunc
 " - CommOutput: ~"End of assembler dump.\n"
 " - CommOutput: ^done
 
-" - CommOutput: disassemble $pc
 " - CommOutput: &"disassemble $pc\n"
 " - CommOutput: &"No function contains specified address.\n"
 " - CommOutput: ^error,msg="No function contains specified address."
@@ -831,12 +835,12 @@ func s:HandleDisasmMsg(msg)
       call s:SendCommand('disassemble $pc,+100')
     endif
     let s:parsing_disasm_msg = 0
-  elseif a:msg =~ '\&\"disassemble \$pc'
+  elseif a:msg =~ '^&"disassemble \$pc'
     if a:msg =~ '+100'
       " This is our second disasm attempt
       let s:parsing_disasm_msg = 2
     endif
-  else
+  elseif a:msg !~ '^&"disassemble'
     let value = substitute(a:msg, '^\~\"[ ]*', '', '')
     let value = substitute(value, '^=>[ ]*', '', '')
     let value = substitute(value, '\\n\"\r$', '', '')
@@ -920,9 +924,10 @@ func s:CommOutput(chan, msg)
         call s:HandleEvaluate(msg)
       elseif msg =~ '^\^error,msg='
         call s:HandleError(msg)
-      elseif msg =~ '^disassemble'
+      elseif msg =~ '^&"disassemble'
         let s:parsing_disasm_msg = 1
         let s:asm_lines = []
+	call s:HandleDisasmMsg(msg)
       elseif msg =~ '^\^done,variables='
 	call s:HandleVariablesMsg(msg)
       endif
@@ -965,6 +970,10 @@ func s:InstallCommands()
     command Continue call term_sendkeys(s:gdbbuf, "continue\r")
   endif
 
+  command -nargs=* Frame call s:Frame(<q-args>)
+  command -count=1 Up call s:Up(<count>)
+  command -count=1 Down call s:Down(<count>)
+
   command -range -nargs=* Evaluate call s:Evaluate(<range>, <q-args>)
   command Gdb call win_gotoid(s:gdbwin)
   command Program call s:GotoProgram()
@@ -984,6 +993,25 @@ func s:InstallCommands()
     nnoremap K :Evaluate<CR>
   endif
 
+  let map = 1
+  if exists('g:termdebug_config')
+    let map = get(g:termdebug_config, 'map_plus', 1)
+  endif
+  if map
+    let s:plus_map_saved = maparg('+', 'n', 0, 1)
+    nnoremap <expr> + $'<Cmd>{v:count1}Up<CR>'
+  endif
+
+  let map = 1
+  if exists('g:termdebug_config')
+    let map = get(g:termdebug_config, 'map_minus', 1)
+  endif
+  if map
+    let s:minus_map_saved = maparg('-', 'n', 0, 1)
+    nnoremap <expr> - $'<Cmd>{v:count1}Down<CR>'
+  endif
+
+
   if has('menu') && &mouse != ''
     call s:InstallWinbar(0)
 
@@ -1040,6 +1068,9 @@ func s:DeleteCommands()
   delcommand Arguments
   delcommand Stop
   delcommand Continue
+  delcommand Frame
+  delcommand Up
+  delcommand Down
   delcommand Evaluate
   delcommand Gdb
   delcommand Program
@@ -1056,6 +1087,22 @@ func s:DeleteCommands()
     endif
     unlet s:k_map_saved
   endif
+  if exists('s:plus_map_saved')
+    if empty(s:plus_map_saved)
+      nunmap +
+    else
+      call mapset(s:plus_map_saved)
+    endif
+    unlet s:plus_map_saved
+  endif
+  if exists('s:minus_map_saved')
+    if empty(s:minus_map_saved)
+      nunmap -
+    else
+      call mapset(s:minus_map_saved)
+    endif
+    unlet s:minus_map_saved
+  endif
 
   if has('menu')
     " Remove the WinBar entries from all windows where it was added.
@@ -1172,6 +1219,37 @@ func s:Run(args)
   call s:SendResumingCommand('-exec-run')
 endfunc
 
+" :Frame - go to a specfic frame in the stack
+func s:Frame(arg)
+  " Note: we explicit do not use mi's command
+  " call s:SendCommand('-stack-select-frame "' . a:arg .'"')
+  " as we only get a "done" mi response and would have to open the file
+  " 'manually' - using cli command "frame" provides us with the mi response
+  " already parsed and allows for more formats
+  if a:arg =~ '^\d\+$' || a:arg == ''
+    " specify frame by number
+    call s:SendCommand('-interpreter-exec mi "frame ' . a:arg .'"')
+  elseif a:arg =~ '^0x[0-9a-fA-F]\+$'
+    " specify frame by stack address
+    call s:SendCommand('-interpreter-exec mi "frame address ' . a:arg .'"')
+  else
+    " specify frame by function name
+    call s:SendCommand('-interpreter-exec mi "frame function ' . a:arg .'"')
+  endif
+endfunc
+
+" :Up - go a:count frames in the stack "higher"
+func s:Up(count)
+  " the 'correct' one would be -stack-select-frame N, but we don't know N
+  call s:SendCommand($'-interpreter-exec console "up {a:count}"')
+endfunc
+
+" :Down - go a:count frames in the stack "below"
+func s:Down(count)
+  " the 'correct' one would be -stack-select-frame N, but we don't know N
+  call s:SendCommand($'-interpreter-exec console "down {a:count}"')
+endfunc
+
 func s:SendEval(expr)
   " check for "likely" boolean expressions, in which case we take it as lhs
   if a:expr =~ "[=!<>]="
@@ -1358,7 +1436,7 @@ func s:GotoAsmwinOrCreateIt()
     setlocal signcolumn=no
     setlocal modifiable
 
-    if s:asmbuf > 0
+    if s:asmbuf > 0 && bufexists(s:asmbuf)
       exe 'buffer' . s:asmbuf
     else
       silent file Termdebug-asm-listing
@@ -1420,7 +1498,7 @@ func s:GotoVariableswinOrCreateIt()
     setlocal signcolumn=no
     setlocal modifiable
 
-    if s:varbuf > 0
+    if s:varbuf > 0 && bufexists(s:varbuf)
       exe 'buffer' . s:varbuf
     else
       silent file Termdebug-variables-listing
--- a/runtime/syntax/8th.vim
+++ b/runtime/syntax/8th.vim
@@ -363,7 +363,7 @@ syn region eighthComment start="\zs\\" e
 if !exists("did_eighth_syntax_inits")
     let did_eighth_syntax_inits=1
 
-    " The default methods for highlighting. Can be overriden later.
+    " The default methods for highlighting. Can be overridden later.
     hi def link eighthTodo Todo
     hi def link eighthOperators Operator
     hi def link eighthMath Number
--- a/runtime/syntax/a65.vim
+++ b/runtime/syntax/a65.vim
@@ -118,7 +118,7 @@ syn match a65Section	"\(^\|\s\)\.)\($\|\
 " Strings
 syn match a65String	"\".*\""
 
-" Programm Counter
+" Program Counter
 syn region a65PC	start="\*=" end="\>" keepend
 
 " HI/LO Byte
--- a/runtime/syntax/bash.vim
+++ b/runtime/syntax/bash.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	bash
-" Maintainer:	Bram
-" Last Change:	2019 Sep 27
+" Maintainer:	The Vim Project <https://github.com/vim/vim>
+" Last Change:	2023 Aug 13
 
 " quit when a syntax file was already loaded
 if exists("b:current_syntax")
--- a/runtime/syntax/bindzone.vim
+++ b/runtime/syntax/bindzone.vim
@@ -33,7 +33,7 @@ syn match       zoneDomain      containe
 syn match       zoneSpecial     contained /^[@*.]\s/
 syn match       zoneTTL         contained /\s\@<=\d[0-9WwDdHhMmSs]*\(\s\|$\)\@=/ nextgroup=zoneClass,zoneRRType skipwhite
 syn keyword     zoneClass       contained IN CHAOS CH HS HESIOD nextgroup=zoneRRType,zoneTTL skipwhite
-syn keyword     zoneRRType      contained A AAAA CAA CERT CNAME DNAME DNSKEY DS HINFO LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM OPENPGPKEY PTR RP RRSIG SMIMEA SOA SPF SRV SSHFP TLSA TXT nextgroup=zoneRData skipwhite
+syn keyword     zoneRRType      contained A AAAA APL CAA CERT CNAME DNAME DNSKEY DS HINFO LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM OPENPGPKEY PTR RP RRSIG SMIMEA SOA SPF SRV SSHFP TLSA TXT nextgroup=zoneRData skipwhite
 syn match       zoneRData       contained /[^;]*/ contains=zoneDomain,zoneIPAddr,zoneIP6Addr,zoneText,zoneNumber,zoneParen,zoneUnknown
 
 syn match       zoneIPAddr      contained /\<[0-9]\{1,3}\(\.[0-9]\{1,3}\)\{,3}\>/
@@ -60,7 +60,7 @@ syn match       zoneIP6Addr     containe
 
 syn match       zoneText        contained /"\([^"\\]\|\\.\)*"\(\s\|;\|$\)\@=/
 syn match       zoneNumber      contained /\<[0-9]\+\(\s\|;\|$\)\@=/
-syn match       zoneSerial      contained /\<[0-9]\{9,10}\(\s\|;\|$\)\@=/
+syn match       zoneSerial      contained /\<[0-9]\{1,10}\(\s\|;\|$\)\@=/
 
 syn match       zoneErrParen    /)/
 syn region      zoneParen       contained start="(" end=")" contains=zoneSerial,zoneTTL,zoneNumber,zoneComment
--- a/runtime/syntax/chaiscript.vim
+++ b/runtime/syntax/chaiscript.vim
@@ -61,7 +61,7 @@ syn region  chaiscriptFunc         match
 " Intentionally leaving out all of the normal, well known operators
 syn match   chaiscriptOperator     "\.\."
 
-" Guard seperator as an operator
+" Guard separator as an operator
 syn match   chaiscriptOperator     ":"
 
 " Comments
--- a/runtime/syntax/cmake.vim
+++ b/runtime/syntax/cmake.vim
@@ -335,7 +335,7 @@ syn keyword cmakeGeneratorExpressions co
 syn case ignore
 
 syn keyword cmakeCommand
-            \ add_compile_options add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_subdirectory add_test aux_source_directory break build_command cmake_host_system_information cmake_minimum_required cmake_parse_arguments cmake_policy configure_file continue create_test_sourcelist ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit ctest_test ctest_update ctest_upload define_property enable_language enable_testing endfunction endmacro execute_process export file find_file find_library find_package find_path find_program fltk_wrap_ui function get_cmake_property get_directory_property get_filename_component get_property get_source_file_property get_target_property get_test_property include include_directories include_external_msproject include_guard include_regular_expression install link_directories list load_cache load_command macro mark_as_advanced math message option project qt_wrap_cpp qt_wrap_ui remove_definitions return separate_arguments set set_directory_properties set_property set_source_files_properties set_target_properties set_tests_properties site_name source_group string target_compile_definitions target_compile_features target_compile_options target_include_directories target_link_libraries target_sources try_compile try_run unset variable_watch
+            \ add_compile_options add_compile_definitions add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_subdirectory add_test aux_source_directory break build_command cmake_host_system_information cmake_minimum_required cmake_parse_arguments cmake_policy configure_file continue create_test_sourcelist ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit ctest_test ctest_update ctest_upload define_property enable_language enable_testing endfunction endmacro execute_process export file find_file find_library find_package find_path find_program fltk_wrap_ui function get_cmake_property get_directory_property get_filename_component get_property get_source_file_property get_target_property get_test_property include include_directories include_external_msproject include_guard include_regular_expression install link_directories list load_cache load_command macro mark_as_advanced math message option project qt_wrap_cpp qt_wrap_ui remove_definitions return separate_arguments set set_directory_properties set_property set_source_files_properties set_target_properties set_tests_properties site_name source_group string target_compile_definitions target_compile_features target_compile_options target_include_directories target_link_libraries target_sources try_compile try_run unset variable_watch
             \ nextgroup=cmakeArguments
 
 syn keyword cmakeCommandConditional
--- a/runtime/syntax/crontab.vim
+++ b/runtime/syntax/crontab.vim
@@ -5,7 +5,7 @@
 " License: This file can be redistribued and/or modified under the same terms
 "   as Vim itself.
 " Filenames: /tmp/crontab.* used by "crontab -e"
-" Last Change: 2015-01-20
+" Last Change: 2022-09-22
 "
 " crontab line format:
 " Minutes   Hours   Days   Months   Days_of_Week   Commands # comments
@@ -15,20 +15,20 @@ if exists("b:current_syntax")
 	finish
 endif
 
-syntax match crontabNick "^\s*@\(reboot\|yearly\|annually\|monthly\|weekly\|daily\|midnight\|hourly\)\>" nextgroup=crontabCmd skipwhite
+syntax match crontabNick "^\s*@\(reboot\|yearly\|annually\|monthly\|weekly\|daily\|midnight\|hourly\|every_minute\|every_second\)\>" nextgroup=crontabCmd skipwhite
 
 syntax match crontabVar "^\s*\k\w*\s*="me=e-1
 
 syntax case ignore
 
-syntax match crontabMin "^\s*[-0-9/,.*]\+" nextgroup=crontabHr skipwhite
-syntax match crontabHr "\s[-0-9/,.*]\+" nextgroup=crontabDay skipwhite contained
-syntax match crontabDay "\s[-0-9/,.*]\+" nextgroup=crontabMnth skipwhite contained
+syntax match crontabMin "^\s*[-~0-9/,.*]\+" nextgroup=crontabHr skipwhite
+syntax match crontabHr "\s[-~0-9/,.*]\+" nextgroup=crontabDay skipwhite contained
+syntax match crontabDay "\s[-~0-9/,.*]\+" nextgroup=crontabMnth skipwhite contained
 
-syntax match crontabMnth "\s[-a-z0-9/,.*]\+" nextgroup=crontabDow skipwhite contained
+syntax match crontabMnth "\s[-~a-z0-9/,.*]\+" nextgroup=crontabDow skipwhite contained
 syntax keyword crontabMnth12 contained jan feb mar apr may jun jul aug sep oct nov dec
 
-syntax match crontabDow "\s[-a-z0-9/,.*]\+" nextgroup=crontabCmd skipwhite contained
+syntax match crontabDow "\s[-~a-z0-9/,.*]\+" nextgroup=crontabCmd skipwhite contained
 syntax keyword crontabDow7 contained sun mon tue wed thu fri sat
 
 syntax region crontabCmd start="\S" end="$" skipwhite contained keepend contains=crontabPercent
--- a/runtime/syntax/euphoria4.vim
+++ b/runtime/syntax/euphoria4.vim
@@ -27,7 +27,7 @@ syn keyword euphoria4Debug	includes inli
 " Keywords for conditional compilation - from $EUDIR/include/euphoria/keywords.e:
 syn keyword euphoria4PreProc	elsedef elsifdef ifdef 
 
-" Keywords (Statments) - from $EUDIR/include/euphoria/keywords.e:
+" Keywords (Statements) - from $EUDIR/include/euphoria/keywords.e:
 syn keyword euphoria4Keyword	and as break by case constant continue do else     
 syn keyword euphoria4Keyword	elsif end entry enum exit export
 syn keyword euphoria4Keyword	fallthru for function global goto if include
--- a/runtime/syntax/flexwiki.vim
+++ b/runtime/syntax/flexwiki.vim
@@ -67,10 +67,10 @@ syntax match flexwikiEmoticons      /\((
 " Aggregate all the regular text highlighting into flexwikiText
 syntax cluster flexwikiText contains=flexwikiItalic,flexwikiBold,flexwikiCode,flexwikiDeEmphasis,flexwikiDelText,flexwikiInsText,flexwikiSuperScript,flexwikiSubScript,flexwikiCitation,flexwikiLink,flexwikiWord,flexwikiEmoticons
 
-" single-line WikiPropertys
+" single-line WikiProperties
 syntax match flexwikiSingleLineProperty /^:\?[A-Z_][_a-zA-Z0-9]\+:/
 
-" TODO: multi-line WikiPropertys
+" TODO: multi-line WikiProperties
 
 " Header levels, 1-6
 syntax match flexwikiH1             /^!.*$/
--- a/runtime/syntax/gdb.vim
+++ b/runtime/syntax/gdb.vim
@@ -30,7 +30,7 @@ syn keyword gdbStatement contained searc
 syn keyword gdbStatement contained stop target tbreak tdump tfind thbreak thread tp trace tstart tstatus tstop
 syn keyword gdbStatement contained tty und[isplay] unset until up watch whatis where while ws x
 syn match gdbFuncDef "\<define\>.*"
-syn match gdbStatmentContainer "^\s*\S\+" contains=gdbStatement,gdbFuncDef
+syn match gdbStatementContainer "^\s*\S\+" contains=gdbStatement,gdbFuncDef
 syn match gdbStatement "^\s*info" nextgroup=gdbInfo skipwhite skipempty
 
 " some commonly used abbreviations
--- a/runtime/syntax/groovy.vim
+++ b/runtime/syntax/groovy.vim
@@ -362,7 +362,7 @@ exec "syn sync ccomment groovyComment mi
 
 " Mark these as operators
 
-" Hightlight brackets
+" Highlight brackets
 " syn match  groovyBraces		"[{}]"
 " syn match  groovyBraces		"[\[\]]"
 " syn match  groovyBraces		"[\|]"
--- a/runtime/syntax/lite.vim
+++ b/runtime/syntax/lite.vim
@@ -5,7 +5,7 @@
 " Email:	Subject: send syntax_vim.tgz
 " Last Change:	2001 Mai 01
 "
-" Options	lite_sql_query = 1 for SQL syntax highligthing inside strings
+" Options	lite_sql_query = 1 for SQL syntax highlighting inside strings
 "		lite_minlines = x     to sync at least x lines backwards
 
 " quit when a syntax file was already loaded
--- a/runtime/syntax/logtalk.vim
+++ b/runtime/syntax/logtalk.vim
@@ -330,7 +330,7 @@ syn match	logtalkKeyword		"\<t\(an\|runc
 syn match	logtalkKeyword		"\<ceiling\ze("
 
 
-" Other arithemtic functors
+" Other arithmetic functors
 
 syn match	logtalkOperator		"\*\*"
 syn match	logtalkKeyword		"\<s\(in\|qrt\)\ze("
--- a/runtime/syntax/lss.vim
+++ b/runtime/syntax/lss.vim
@@ -9,7 +9,7 @@ if exists("b:current_syntax")
 endif
 
 " This setup is probably atypical for a syntax highlighting file, because
-" most of it is not really intended to be overrideable.  Instead, the
+" most of it is not really intended to be overridable.  Instead, the
 " highlighting is supposed to correspond to the highlighting specified by
 " the .lss file entries themselves; ie. the "bold" keyword should be bold,
 " the "red" keyword should be red, and so forth.  The exceptions to this
--- a/runtime/syntax/model.vim
+++ b/runtime/syntax/model.vim
@@ -5,7 +5,7 @@
 " Former Maintainer:	Bram Moolenaar <Bram@vim.org>
 
 " very basic things only (based on the vgrindefs file).
-" If you use this language, please improve it, and send me the patches!
+" If you use this language, please improve it, and send patches!
 
 " Quit when a (custom) syntax file was already loaded
 if exists("b:current_syntax")
--- a/runtime/syntax/pymanifest.vim
+++ b/runtime/syntax/pymanifest.vim
@@ -20,7 +20,7 @@ syn match pymanifestComment /\\\@1<!#.*/
 " Commands
 syn keyword pymanifestCommand
             \ include exclude
-            \ recursive-include resursive-exclude
+            \ recursive-include recursive-exclude
             \ global-include global-exclude
             \ graft prune
 
--- a/runtime/syntax/rmd.vim
+++ b/runtime/syntax/rmd.vim
@@ -81,7 +81,7 @@ else
     syn match  yamlEscape contained '\\\%([\\"abefnrtv\^0_ NLP\n]\|x\x\x\|u\x\{4}\|U\x\{8}\)'
     syn match  yamlSingleEscape contained "''"
     syn match yamlComment /#.*/ contained
-    " A second colon is a syntax error, unles within a string or following !expr
+    " A second colon is a syntax error, unless within a string or following !expr
     syn match yamlColonError /:\s*[^'^"^!]*:/ contained
     if &filetype == 'quarto'
       syn region pandocYAMLHeader matchgroup=rmdYamlBlockDelim start=/\%(\%^\|\_^\s*\n\)\@<=\_^-\{3}\ze\n.\+/ end=/^---$/ keepend contains=rmdYamlFieldTtl,yamlFlowString,yamlComment,yamlColonError
--- a/runtime/syntax/sgml.vim
+++ b/runtime/syntax/sgml.vim
@@ -294,7 +294,7 @@ syn sync minlines=100
 hi def link sgmlTodo			Todo
 hi def link sgmlTag			Function
 hi def link sgmlEndTag			Identifier
-" SGML specifig
+" SGML specific
 hi def link sgmlAbbrEndTag		Identifier
 hi def link sgmlEmptyTag		Function
 hi def link sgmlEntity			Statement
--- a/runtime/syntax/shared/typescriptcommon.vim
+++ b/runtime/syntax/shared/typescriptcommon.vim
@@ -1,9 +1,9 @@
 " Vim syntax file
 " Language:     TypeScript and TypeScriptReact
-" Maintainer:   Bram Moolenaar, Herrington Darkholme
-" Last Change:	2021 Sep 22
+" Maintainer:   Herrington Darkholme
+" Last Change:	2023 Aug 13
 " Based On:     Herrington Darkholme's yats.vim
-" Changes:      See https:github.com/HerringtonDarkholme/yats.vim
+" Changes:      See https://github.com/HerringtonDarkholme/yats.vim
 " Credits:      See yats.vim on github
 
 if &cpo =~ 'C'
--- a/runtime/syntax/slrnrc.vim
+++ b/runtime/syntax/slrnrc.vim
@@ -94,7 +94,7 @@ syn region  slrnrcColorObjStr	contained 
 syn keyword slrnrcColorVal	contained default
 syn keyword slrnrcColorVal	contained black blue brightblue brightcyan brightgreen brightmagenta brightred brown cyan gray green lightgray magenta red white yellow
 syn region  slrnrcColorValStr	contained matchgroup=slrnrcColorVal start=+"+ end=+"+ oneline contains=slrnrcColorVal,slrnrcSpaceError
-" Mathcing a function with three arguments
+" Matching a function with three arguments
 syn keyword slrnrcColor		contained color
 syn match   slrnrcColorInit	contained "^\s*color\s\+\S\+" skipwhite nextgroup=slrnrcColorVal\(Str\)\= contains=slrnrcColor\(Obj\|ObjStr\)\=
 syn match   slrnrcColorLine	"^\s*color\s\+\S\+\s\+\S\+" skipwhite nextgroup=slrnrcColorVal\(Str\)\= contains=slrnrcColor\(Init\|Val\|ValStr\)
--- a/runtime/syntax/spec.vim
+++ b/runtime/syntax/spec.vim
@@ -56,7 +56,7 @@ syn match specListedFilesEtc    containe
 syn match specListedFilesShare  contained '/share/'me=e-1
 syn cluster specListedFiles contains=specListedFilesBin,specListedFilesLib,specListedFilesDoc,specListedFilesEtc,specListedFilesShare,specListedFilesPrefix,specVariables,specSpecialChar
 
-"specComands
+"specCommands
 syn match   specConfigure  contained '\./configure'
 syn match   specTarCommand contained '\<tar\s\+[cxvpzIf]\{,5}\s*'
 syn keyword specCommandSpecial contained root
@@ -87,7 +87,7 @@ syn region specSectionMacroBracketArea o
 "TODO %config valid parameters: missingok\|noreplace
 "TODO %verify valid parameters: \(not\)\= \(md5\|atime\|...\)
 syn region specFilesArea matchgroup=specSection start='^%[Ff][Ii][Ll][Ee][Ss]\>' skip='%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|license\|verify\|ghost\|exclude\)\>' end='^%[a-zA-Z]'me=e-2 contains=specFilesOpts,specFilesDirective,@specListedFiles,specComment,specCommandSpecial,specMacroIdentifier
-"tip: remember to include new itens in specFilesArea above
+"tip: remember to include new items in specFilesArea above
 syn match  specFilesDirective contained '%\(attrib\|defattr\|attr\|dir\|config\|docdir\|doc\|lang\|license\|verify\|ghost\|exclude\)\>'
 
 "valid options for certain section headers
--- a/runtime/syntax/sqlinformix.vim
+++ b/runtime/syntax/sqlinformix.vim
@@ -162,7 +162,7 @@ hi def link sqlNumber	Number
 hi def link sqlBoolean	Boolean
 hi def link sqlString	String
 
-" === Statment syntax group ===
+" === Statement syntax group ===
 hi def link sqlStatement	Statement
 hi def link sqlConditional	Conditional
 hi def link sqlRepeat		Repeat
--- a/runtime/syntax/sqlj.vim
+++ b/runtime/syntax/sqlj.vim
@@ -16,7 +16,7 @@ endif
 " Read the Java syntax to start with
 source <sfile>:p:h/java.vim
 
-" SQLJ extentions
+" SQLJ extensions
 " The SQL reserved words, defined as keywords.
 
 syn case ignore
--- a/runtime/syntax/squid.vim
+++ b/runtime/syntax/squid.vim
@@ -31,7 +31,7 @@ syn keyword	squidConf	cache_effective_us
 syn keyword	squidConf	cache_host_domain cache_log cache_mem
 syn keyword	squidConf	cache_mem_high cache_mem_low cache_mgr
 syn keyword	squidConf	cachemgr_passwd cache_peer cache_peer_access
-syn keyword	squidConf	cahce_replacement_policy cache_stoplist
+syn keyword	squidConf	cache_replacement_policy cache_stoplist
 syn keyword	squidConf	cache_stoplist_pattern cache_store_log cache_swap
 syn keyword	squidConf	cache_swap_high cache_swap_log cache_swap_low
 syn keyword	squidConf	client_db client_lifetime client_netmask
--- a/runtime/syntax/tasm.vim
+++ b/runtime/syntax/tasm.vim
@@ -1,6 +1,6 @@
 " Vim syntax file
 " Language: TASM: turbo assembler by Borland
-" Maintaner: FooLman of United Force <foolman@bigfoot.com>
+" Maintainer: FooLman of United Force <foolman@bigfoot.com>
 " Last Change: 2012 Feb 03 by Thilo Six, and 2018 Nov 27.
 
 " quit when a syntax file was already loaded
--- a/runtime/syntax/tf.vim
+++ b/runtime/syntax/tf.vim
@@ -27,7 +27,7 @@ syn keyword tfVar  bamf bg_output borg c
 syn keyword tfVar  emulation end_color gag gethostbyname gpri hook hilite  contained
 syn keyword tfVar  hiliteattr histsize hpri insert isize istrip kecho  contained
 syn keyword tfVar  kprefix login lp lpquote maildelay matching max_iter  contained
-syn keyword tfVar  max_recur mecho more mprefix oldslash promt_sec  contained
+syn keyword tfVar  max_recur mecho more mprefix oldslash prompt_sec  contained
 syn keyword tfVar  prompt_usec proxy_host proxy_port ptime qecho qprefix  contained
 syn keyword tfVar  quite quitdone redef refreshtime scroll shpause snarf sockmload  contained
 syn keyword tfVar  start_color tabsize telopt sub time_format visual  contained
--- a/runtime/syntax/tsalt.vim
+++ b/runtime/syntax/tsalt.vim
@@ -83,11 +83,11 @@ syn keyword tsaltFunction	vGetChrs vGetC
 syn keyword tsaltFunction	vPutChrsA vRstrArea vSaveArea
 
 " Dynamic Data Exchange (DDE) Operations
-syn keyword tsaltFunction	DDEExecute DDEInitate DDEPoke DDERequest
+syn keyword tsaltFunction	DDEExecute DDEInitiate DDEPoke DDERequest
 syn keyword tsaltFunction	DDETerminate DDETerminateAll
 "END FUNCTIONS
 
-"PREDEFINED VARAIABLES
+"PREDEFINED VARIABLES
 syn keyword tsaltSysVar	_add_lf _alarm_on _answerback_str _asc_rcrtrans
 syn keyword tsaltSysVar	_asc_remabort _asc_rlftrans _asc_scpacing
 syn keyword tsaltSysVar	_asc_scrtrans _asc_secho _asc_slpacing
@@ -106,7 +106,7 @@ syn keyword tsaltSysVar	_scr_chk_key _sc
 syn keyword tsaltSysVar	_strip_high _swap_bs _telix_dir _up_dir
 syn keyword tsaltSysVar	_usage_fname _zmodauto _zmod_rcrash
 syn keyword tsaltSysVar	_zmod_scrash
-"END PREDEFINED VARAIABLES
+"END PREDEFINED VARIABLES
 
 "TYPE
 syn keyword tsaltType	str int
--- a/runtime/syntax/typescript.vim
+++ b/runtime/syntax/typescript.vim
@@ -1,9 +1,9 @@
 " Vim syntax file
 " Language:     TypeScript
-" Maintainer:   Bram Moolenaar, Herrington Darkholme
-" Last Change:	2019 Nov 30
+" Maintainer:   Herrington Darkholme
+" Last Change:  2023 Aug 13
 " Based On:     Herrington Darkholme's yats.vim
-" Changes:      Go to https:github.com/HerringtonDarkholme/yats.vim for recent changes.
+" Changes:      Go to https://github.com/HerringtonDarkholme/yats.vim for recent changes.
 " Origin:       https://github.com/othree/yajs
 " Credits:      Kao Wei-Ko(othree), Jose Elera Campana, Zhao Yi, Claudio Fleiner, Scott Shattuck
 "               (This file is based on their hard work), gumnos (From the #vim
--- a/runtime/syntax/typescriptreact.vim
+++ b/runtime/syntax/typescriptreact.vim
@@ -1,9 +1,9 @@
 " Vim syntax file
 " Language:     TypeScript with React (JSX)
-" Maintainer:   Bram Moolenaar
-" Last Change:	2019 Nov 30
+" Maintainer:   The Vim Project <https://github.com/vim/vim>
+" Last Change:  2023 Aug 13
 " Based On:     Herrington Darkholme's yats.vim
-" Changes:      See https:github.com/HerringtonDarkholme/yats.vim
+" Changes:      See https://github.com/HerringtonDarkholme/yats.vim
 " Credits:      See yats.vim on github
 
 if !exists("main_syntax")
--- a/runtime/syntax/zimbu.vim
+++ b/runtime/syntax/zimbu.vim
@@ -1,7 +1,8 @@
 " Vim syntax file
 " Language:	Zimbu
-" Maintainer:	Bram Moolenaar
-" Last Change:	2014 Nov 23
+" Maintainer:	The·Vim·Project·<https://github.com/vim/vim>
+" Last Change:	2023 Aug 13
+" Note: 	Zimbu seems to be dead :(
 
 if exists("b:current_syntax")
   finish
--- a/runtime/tutor/tutor.vim
+++ b/runtime/tutor/tutor.vim
@@ -1,7 +1,7 @@
 " Vim tutor support file
-" Author: Eduardo F. Amatria <eferna1@platea.pntic.mec.es>
-" Maintainer: Bram Moolenaar
-" Last Change:	2019 Nov 11
+" Author:	Eduardo F. Amatria <eferna1@platea.pntic.mec.es>
+" Maintainer:	The·Vim·Project·<https://github.com/vim/vim>
+" Last Change:	2023 Aug 13
 
 " This Vim script is used for detecting if a translation of the
 " tutor file exist, i.e., a tutor.xx file, where xx is the language.
--- a/src/charset.c
+++ b/src/charset.c
@@ -1097,9 +1097,14 @@ lbr_chartabsize_adv(chartabsize_T *cts)
  * inserts text.
  * This function is used very often, keep it fast!!!!
  *
- * If "headp" not NULL, set *headp to the size of what we for 'showbreak'
- * string at start of line.  Warning: *headp is only set if it's a non-zero
- * value, init to 0 before calling.
+ * If "headp" not NULL, set "*headp" to the size of 'showbreak'/'breakindent'
+ * included in the return value.
+ * When "cts->cts_max_head_vcol" is positive, only count in "*headp" the size
+ * of 'showbreak'/'breakindent' before "cts->cts_max_head_vcol".
+ * When "cts->cts_max_head_vcol" is negative, only count in "*headp" the size
+ * of 'showbreak'/'breakindent' before where cursor should be placed.
+ *
+ * Warning: "*headp" may not be set if it's 0, init to 0 before calling.
  */
     int
 win_lbr_chartabsize(
@@ -1118,9 +1123,7 @@ win_lbr_chartabsize(
     colnr_T	col2;
     colnr_T	col_adj = 0; // vcol + screen size of tab
     colnr_T	colmax;
-    int		added;
     int		mb_added = 0;
-    int		numberextra;
     char_u	*ps;
     int		tab_corr = (*s == TAB);
     int		n;
@@ -1154,11 +1157,13 @@ win_lbr_chartabsize(
     }
 
 #if defined(FEAT_LINEBREAK) || defined(FEAT_PROP_POPUP)
+    int has_lcs_eol = wp->w_p_list && wp->w_lcs_chars.eol != NUL;
+
     /*
      * First get the normal size, without 'linebreak' or text properties
      */
     size = win_chartabsize(wp, s, vcol);
-    if (*s == NUL)
+    if (*s == NUL && !has_lcs_eol)
 	size = 0;  // NUL is not displayed
 
 # ifdef FEAT_PROP_POPUP
@@ -1172,8 +1177,11 @@ win_lbr_chartabsize(
 
 	// The "$" for 'list' mode will go between the EOL and
 	// the text prop, account for that.
-	if (wp->w_p_list && wp->w_lcs_chars.eol != NUL)
+	if (has_lcs_eol)
+	{
 	    ++vcol;
+	    --size;
+	}
 
 	for (i = 0; i < cts->cts_text_prop_count; ++i)
 	{
@@ -1232,8 +1240,11 @@ win_lbr_chartabsize(
 	    if (tp->tp_col != MAXCOL && tp->tp_col - 1 > col)
 		break;
 	}
-	if (wp->w_p_list && wp->w_lcs_chars.eol != NUL)
+	if (has_lcs_eol)
+	{
 	    --vcol;
+	    ++size;
+	}
     }
 # endif
 
@@ -1256,7 +1267,7 @@ win_lbr_chartabsize(
 	 * Count all characters from first non-blank after a blank up to next
 	 * non-blank after a blank.
 	 */
-	numberextra = win_col_off(wp);
+	int numberextra = win_col_off(wp);
 	col2 = vcol;
 	colmax = (colnr_T)(wp->w_width - numberextra - col_adj);
 	if (vcol >= colmax)
@@ -1295,73 +1306,91 @@ win_lbr_chartabsize(
 
     /*
      * May have to add something for 'breakindent' and/or 'showbreak'
-     * string at start of line.
-     * Set *headp to the size of what we add.
-     * Do not use 'showbreak' at the NUL after the text.
+     * string at the start of a screen line.
      */
-    added = 0;
-    sbr = (c == NUL || no_sbr) ? empty_option : get_showbreak_value(wp);
-    if ((*sbr != NUL || wp->w_p_bri) && wp->w_p_wrap && vcol != 0)
+    int head = mb_added;
+    sbr = no_sbr ? empty_option : get_showbreak_value(wp);
+    // When "size" is 0, no new screen line is started.
+    if (size > 0 && wp->w_p_wrap && (*sbr != NUL || wp->w_p_bri))
     {
-	colnr_T sbrlen = 0;
-	int	numberwidth = win_col_off(wp);
-
-	numberextra = numberwidth;
-	vcol += numberextra + mb_added;
+	int	col_off_prev = win_col_off(wp);
+	int	width2 = wp->w_width - col_off_prev + win_col_off2(wp);
+	vcol += mb_added;
 #ifdef FEAT_PROP_POPUP
 	vcol -= wp->w_virtcol_first_char;
 #endif
-	if (vcol >= (colnr_T)wp->w_width)
+	colnr_T	wcol = vcol + col_off_prev;
+	// cells taken by 'showbreak'/'breakindent' before current char
+	int	head_prev = 0;
+	if (wcol >= wp->w_width)
 	{
-	    vcol -= wp->w_width;
-	    numberextra = wp->w_width - (numberextra - win_col_off2(wp));
-	    if (vcol >= numberextra && numberextra > 0)
-		vcol %= numberextra;
+	    wcol -= wp->w_width;
+	    col_off_prev = wp->w_width - width2;
+	    if (wcol >= width2 && width2 > 0)
+		wcol %= width2;
 	    if (*sbr != NUL)
-	    {
-		sbrlen = (colnr_T)MB_CHARLEN(sbr);
-		if (vcol >= sbrlen)
-		    vcol -= sbrlen;
-	    }
-	    if (vcol >= numberextra && numberextra > 0)
-		vcol = vcol % numberextra;
-	    else if (vcol > 0 && numberextra > 0)
-		vcol += numberwidth - win_col_off2(wp);
+		head_prev += vim_strsize(sbr);
+	    if (wp->w_p_bri)
+		head_prev += get_breakindent_win(wp, line);
+	    if (wcol < head_prev)
+		wcol = head_prev;
+	    wcol += col_off_prev;
+	}
 
-	    numberwidth -= win_col_off2(wp);
-	}
-	if (vcol == 0 || vcol + size + sbrlen > (colnr_T)wp->w_width)
+	if ((vcol > 0 && wcol == col_off_prev + head_prev)
+						  || wcol + size > wp->w_width)
 	{
-	    added = 0;
-	    if (*sbr != NUL)
+	    int added = 0;
+	    colnr_T max_head_vcol = cts->cts_max_head_vcol;
+
+	    if (vcol > 0 && wcol == col_off_prev + head_prev)
 	    {
-		if (size + sbrlen + numberwidth > (colnr_T)wp->w_width)
-		{
-		    // calculate effective window width
-		    int width = (colnr_T)wp->w_width - sbrlen - numberwidth;
-		    int prev_width = vcol
-			       ? ((colnr_T)wp->w_width - (sbrlen + vcol)) : 0;
+		added += head_prev;
+		if (max_head_vcol <= 0 || vcol < max_head_vcol)
+		    head += head_prev;
+	    }
+
+	    // cells taken by 'showbreak'/'breakindent' halfway current char
+	    int	head_mid = 0;
+	    if (*sbr != NUL)
+		head_mid += vim_strsize(sbr);
+	    if (wp->w_p_bri)
+		head_mid += get_breakindent_win(wp, line);
+	    if (head_mid > 0 && wcol + size > wp->w_width)
+	    {
+		// calculate effective window width
+		int prev_rem = wp->w_width - wcol;
+		int width = width2 - head_mid;
 
-		    if (width <= 0)
-			width = (colnr_T)1;
-		    added += ((size - prev_width) / width) * vim_strsize(sbr);
-		    if ((size - prev_width) % width)
-			// wrapped, add another length of 'sbr'
-			added += vim_strsize(sbr);
+		if (width <= 0)
+		    width = 1;
+		// divide "size - prev_width" by "width", rounding up
+		int cnt = (size - prev_rem + width - 1) / width;
+		added += cnt * head_mid;
+
+		if (max_head_vcol == 0 || vcol + size + added < max_head_vcol)
+		    head += cnt * head_mid;
+		else if (max_head_vcol > vcol + head_prev + prev_rem)
+		    head += (max_head_vcol - (vcol + head_prev + prev_rem)
+					     + width2 - 1) / width2 * head_mid;
+#ifdef FEAT_PROP_POPUP
+		else if (max_head_vcol < 0)
+		{
+		    int off = 0;
+		    if (c != NUL
+			     && ((State & MODE_NORMAL) || cts->cts_start_incl))
+			off += cts->cts_cur_text_width;
+		    if (off >= prev_rem)
+			head += (1 + (off - prev_rem) / width) * head_mid;
 		}
-		else
-		    added += vim_strsize(sbr);
+#endif
 	    }
-	    if (wp->w_p_bri)
-		added += get_breakindent_win(wp, line);
 
 	    size += added;
-	    if (vcol != 0)
-		added = 0;
 	}
     }
     if (headp != NULL)
-	*headp = added + mb_added;
+	*headp = head;
     return size;
 # endif
 #endif
@@ -1483,6 +1512,7 @@ getvcol(
     }
 
     init_chartabsize_arg(&cts, wp, pos->lnum, 0, line, line);
+    cts.cts_max_head_vcol = -1;
 
     /*
      * This function is used very often, do some speed optimizations.
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -1110,14 +1110,10 @@ win_line(
     int		n_attr3 = 0;	    // chars with overruling special attr
     int		saved_attr3 = 0;    // char_attr saved for n_attr3
 
-    int		n_skip = 0;		// nr of cells to skip for 'nowrap' or
-					// concealing
-#ifdef FEAT_PROP_POPUP
-    int		skip_cells = 0;		// nr of cells to skip for virtual text
-					// after the line, when w_skipcol is
-					// larger than the text length
-#endif
-
+    int		skip_cells = 0;		// nr of cells to skip for w_leftcol or
+					// w_skipcol or concealing
+    int		skipped_cells = 0;	// nr of skipped cells for virtual text
+					// to be added to wlv.vcol later
     int		fromcol_prev = -2;	// start of inverting after cursor
     int		noinvcur = FALSE;	// don't invert the cursor
     int		lnum_in_visual_area = FALSE;
@@ -1665,11 +1661,14 @@ win_line(
 	char_u		*prev_ptr = ptr;
 	chartabsize_T	cts;
 	int		charsize = 0;
+	int		head = 0;
 
 	init_chartabsize_arg(&cts, wp, lnum, wlv.vcol, line, ptr);
+	cts.cts_max_head_vcol = v;
 	while (cts.cts_vcol < v && *cts.cts_ptr != NUL)
 	{
-	    charsize = win_lbr_chartabsize(&cts, NULL);
+	    head = 0;
+	    charsize = win_lbr_chartabsize(&cts, &head);
 	    cts.cts_vcol += charsize;
 	    prev_ptr = cts.cts_ptr;
 	    MB_PTR_ADV(cts.cts_ptr);
@@ -1698,20 +1697,9 @@ win_line(
 	{
 	    wlv.vcol -= charsize;
 	    ptr = prev_ptr;
-	    // If the character fits on the screen, don't need to skip it.
-	    // Except for a TAB.
-	    if (((*mb_ptr2cells)(ptr) >= charsize || *ptr == TAB)
-							       && wlv.col == 0)
-	       n_skip = v - wlv.vcol;
 	}
-
-#ifdef FEAT_PROP_POPUP
-	// If there the text doesn't reach to the desired column, need to skip
-	// "skip_cells" cells when virtual text follows.
-	if ((!wp->w_p_wrap || (lnum == wp->w_topline && wp->w_skipcol > 0))
-							       && v > wlv.vcol)
-	    skip_cells = v - wlv.vcol;
-#endif
+	if (v > wlv.vcol)
+	    skip_cells = v - wlv.vcol - head;
 
 	// Adjust for when the inverted text is before the screen,
 	// and when the start of the inverted text is before the screen.
@@ -2205,6 +2193,7 @@ win_line(
 				wlv.n_attr_skip -= skip_cells;
 				if (wlv.n_attr_skip < 0)
 				    wlv.n_attr_skip = 0;
+				skipped_cells += skip_cells;
 				skip_cells = 0;
 			    }
 			    else
@@ -2212,6 +2201,7 @@ win_line(
 				// the whole text is left of the window, drop
 				// it and advance to the next one
 				skip_cells -= wlv.n_extra;
+				skipped_cells += wlv.n_extra;
 				wlv.n_extra = 0;
 				wlv.n_attr_skip = 0;
 				bail_out = TRUE;
@@ -2592,11 +2582,15 @@ win_line(
 #ifdef FEAT_LINEBREAK
 	    c0 = *ptr;
 #endif
+	    if (c == NUL)
+	    {
 #ifdef FEAT_PROP_POPUP
-	    if (c == NUL)
 		// text is finished, may display a "below" virtual text
 		did_line = TRUE;
 #endif
+		// no more cells to skip
+		skip_cells = 0;
+	    }
 
 	    if (has_mbyte)
 	    {
@@ -2762,7 +2756,7 @@ win_line(
 		// If a double-width char doesn't fit at the left side display
 		// a '<' in the first column.  Don't do this for unprintable
 		// characters.
-		if (n_skip > 0 && mb_l > 1 && wlv.n_extra == 0)
+		if (skip_cells > 0 && mb_l > 1 && wlv.n_extra == 0)
 		{
 		    wlv.n_extra = 1;
 		    wlv.c_extra = MB_FILLER_CHAR;
@@ -3438,10 +3432,10 @@ win_line(
 		    wlv.n_extra = 0;
 		    n_attr = 0;
 		}
-		else if (n_skip == 0)
+		else if (skip_cells == 0)
 		{
 		    is_concealing = TRUE;
-		    n_skip = 1;
+		    skip_cells = 1;
 		}
 		mb_c = c;
 		if (enc_utf8 && utf_char2len(c) > 1)
@@ -3459,7 +3453,7 @@ win_line(
 		is_concealing = FALSE;
 	    }
 
-	    if (n_skip > 0 && did_decrement_ptr)
+	    if (skip_cells > 0 && did_decrement_ptr)
 		// not showing the '>', put pointer back to avoid getting stuck
 		++ptr;
 
@@ -3472,7 +3466,7 @@ win_line(
 	if (!did_wcol && wlv.draw_state == WL_LINE
 		&& wp == curwin && lnum == wp->w_cursor.lnum
 		&& conceal_cursor_line(wp)
-		&& (int)wp->w_virtcol <= wlv.vcol + n_skip)
+		&& (int)wp->w_virtcol <= wlv.vcol + skip_cells)
 	{
 # ifdef FEAT_RIGHTLEFT
 	    if (wp->w_p_rl)
@@ -3797,7 +3791,7 @@ win_line(
 
 	// Store character to be displayed.
 	// Skip characters that are left of the screen for 'nowrap'.
-	if (wlv.draw_state < WL_LINE || n_skip <= 0)
+	if (wlv.draw_state < WL_LINE || skip_cells <= 0)
 	{
 	    // Store the character.
 #if defined(FEAT_RIGHTLEFT)
@@ -3893,7 +3887,7 @@ win_line(
 #ifdef FEAT_CONCEAL
 	else if (wp->w_p_cole > 0 && is_concealing)
 	{
-	    --n_skip;
+	    --skip_cells;
 	    ++wlv.vcol_off_co;
 	    if (wlv.n_extra > 0)
 		wlv.vcol_off_co += wlv.n_extra;
@@ -3973,7 +3967,13 @@ win_line(
 	}
 #endif // FEAT_CONCEAL
 	else
-	    --n_skip;
+	    --skip_cells;
+
+	if (wlv.draw_state > WL_NR && skipped_cells > 0)
+	{
+	    wlv.vcol += skipped_cells;
+	    skipped_cells = 0;
+	}
 
 	// Only advance the "wlv.vcol" when after the 'number' or
 	// 'relativenumber' column.
--- a/src/edit.c
+++ b/src/edit.c
@@ -3705,8 +3705,13 @@ ins_esc(
 
     State = MODE_NORMAL;
     may_trigger_modechanged();
-    // need to position cursor again when on a TAB
-    if (gchar_cursor() == TAB)
+    // need to position cursor again when on a TAB and when on a char with
+    // virtual text.
+    if (gchar_cursor() == TAB
+#ifdef FEAT_PROP_POPUP
+	    || curbuf->b_has_textprop
+#endif
+       )
 	curwin->w_valid &= ~(VALID_WROW|VALID_WCOL|VALID_VIRTCOL);
 
     setmouse();
--- a/src/errors.h
+++ b/src/errors.h
@@ -1570,9 +1570,12 @@ EXTERN char e_too_many_signs_defined[]
 EXTERN char e_unknown_printer_font_str[]
 	INIT(= N_("E613: Unknown printer font: %s"));
 #endif
-// E614 unused
-// E615 unused
-// E616 unused
+EXTERN char e_class_required[]
+	INIT(= N_("E614: Class required"));
+EXTERN char e_object_required[]
+	INIT(= N_("E615: Object required"));
+EXTERN char e_object_required_for_argument_nr[]
+	INIT(= N_("E616: Object required for argument %d"));
 #ifdef FEAT_GUI_GTK
 EXTERN char e_cannot_be_changed_in_gtk_GUI[]
 	INIT(= N_("E617: Cannot be changed in the GTK GUI"));
@@ -1777,7 +1780,8 @@ EXTERN char e_can_only_compare_list_with
 	INIT(= N_("E691: Can only compare List with List"));
 EXTERN char e_invalid_operation_for_list[]
 	INIT(= N_("E692: Invalid operation for List"));
-// E693 unused
+EXTERN char e_list_or_class_required_for_argument_nr[]
+	INIT(= N_("E693: List or Class required for argument %d"));
 EXTERN char e_invalid_operation_for_funcrefs[]
 	INIT(= N_("E694: Invalid operation for Funcrefs"));
 EXTERN char e_cannot_index_a_funcref[]
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -277,6 +277,15 @@ arg_number(type_T *type, type_T *decl_ty
 }
 
 /*
+ * Check "type" is an object.
+ */
+    static int
+arg_object(type_T *type, type_T *decl_type UNUSED, argcontext_T *context)
+{
+    return check_arg_type(&t_object, type, context);
+}
+
+/*
  * Check "type" is a dict of 'any'.
  */
     static int
@@ -745,6 +754,20 @@ arg_string_or_func(type_T *type, type_T 
 }
 
 /*
+ * Check "type" is a list of 'any' or a class.
+ */
+    static int
+arg_class_or_list(type_T *type, type_T *decl_type UNUSED, argcontext_T *context)
+{
+    if (type->tt_type == VAR_CLASS
+	    || type->tt_type == VAR_LIST
+	    || type_any_or_unknown(type))
+	return OK;
+    arg_type_mismatch(&t_class, type, context->arg_idx + 1);
+    return FAIL;
+}
+
+/*
  * Check "type" is a list of 'any' or a blob or a string.
  */
     static int
@@ -1125,6 +1148,7 @@ static argcheck_T arg1_len[] = {arg_len1
 static argcheck_T arg3_libcall[] = {arg_string, arg_string, arg_string_or_nr};
 static argcheck_T arg14_maparg[] = {arg_string, arg_string, arg_bool, arg_bool};
 static argcheck_T arg2_filter[] = {arg_list_or_dict_or_blob_or_string_mod, arg_filter_func};
+static argcheck_T arg2_instanceof[] = {arg_object, arg_class_or_list};
 static argcheck_T arg2_map[] = {arg_list_or_dict_or_blob_or_string_mod, arg_map_func};
 static argcheck_T arg2_mapnew[] = {arg_list_or_dict_or_blob_or_string, NULL};
 static argcheck_T arg25_matchadd[] = {arg_string, arg_string, arg_number, arg_number, arg_dict_any};
@@ -2124,6 +2148,8 @@ static funcentry_T global_functions[] =
 			ret_string,	    f_inputsecret},
     {"insert",		2, 3, FEARG_1,	    arg23_insert,
 			ret_first_arg,	    f_insert},
+    {"instanceof",	2, 2, FEARG_1,	    arg2_instanceof,
+			ret_bool,	    f_instanceof},
     {"interrupt",	0, 0, 0,	    NULL,
 			ret_void,	    f_interrupt},
     {"invert",		1, 1, FEARG_1,	    arg1_number,
--- a/src/globals.h
+++ b/src/globals.h
@@ -534,7 +534,13 @@ EXTERN int	garbage_collect_at_exit INIT(
 #define t_super			(static_types[80])
 #define t_const_super		(static_types[81])
 
-EXTERN type_T static_types[82]
+#define t_object		(static_types[82])
+#define t_const_object		(static_types[83])
+
+#define t_class			(static_types[84])
+#define t_const_class		(static_types[85])
+
+EXTERN type_T static_types[86]
 #ifdef DO_INIT
 = {
     // 0: t_unknown
@@ -700,6 +706,14 @@ EXTERN type_T static_types[82]
     // 80: t_super (VAR_CLASS with tt_member set to &t_bool
     {VAR_CLASS, 0, 0, TTFLAG_STATIC, &t_bool, NULL, NULL},
     {VAR_CLASS, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, &t_bool, NULL, NULL},
+
+    // 82: t_object
+    {VAR_OBJECT, 0, 0, TTFLAG_STATIC, NULL, NULL, NULL},
+    {VAR_OBJECT, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, NULL, NULL, NULL},
+
+    // 84: t_class
+    {VAR_CLASS, 0, 0, TTFLAG_STATIC, NULL, NULL, NULL},
+    {VAR_CLASS, 0, 0, TTFLAG_STATIC|TTFLAG_CONST, NULL, NULL, NULL},
 }
 #endif
 ;
--- a/src/move.c
+++ b/src/move.c
@@ -1212,7 +1212,8 @@ curs_columns(
 	    // column
 	    char_u *sbr = get_showbreak_value(curwin);
 	    if (*sbr && *ml_get_cursor() == NUL
-				    && curwin->w_wcol == vim_strsize(sbr))
+		    && curwin->w_wcol
+			      == (curwin->w_width - width2) + vim_strsize(sbr))
 		curwin->w_wcol = 0;
 #endif
 	}
--- a/src/po/it.po
+++ b/src/po/it.po
@@ -14,8 +14,8 @@
 msgid ""
 msgstr ""
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-08-17 15:42+0200\n"
-"PO-Revision-Date: 2023-08-17 16:32+0100\n"
+"POT-Creation-Date: 2023-08-21 11:39+0200\n"
+"PO-Revision-Date: 2023-08-21 12:49+0100\n"
 "Last-Translator: Antonio Colombo <azc100@gmail.com>\n"
 "Language-Team: Italian\n"
 "Language: it\n"
@@ -2643,6 +2643,9 @@ msgstr " SELEZIONA BLOCCO"
 msgid "recording"
 msgstr "registrazione"
 
+msgid "Searching for \"%s\" under \"%s\" in \"%s\""
+msgstr "Cerco \"%s\" sotto \"%s\" in \"%s\""
+
 msgid "Searching for \"%s\" in \"%s\""
 msgstr "Cerco \"%s\" in \"%s\""
 
@@ -5777,6 +5780,9 @@ msgstr ""
 msgid "E705: Variable name conflicts with existing function: %s"
 msgstr "E705: Nome di variabile in conflitto con una funzione esistente: %s"
 
+msgid "E706: Argument of %s must be a List, String or Dictionary"
+msgstr "E706: L'argumento di %s dev'essere una Lista, una Stringa o un Dizionario"
+
 msgid "E707: Function name conflicts with variable: %s"
 msgstr "E707: Nome funzione in conflitto con la variabile: %s"
 
@@ -7861,9 +7867,13 @@ msgstr "E1363: Tipo incompleto"
 msgid "E1364: Warning: Pointer block corrupted"
 msgstr "E1364: Attenzione: Blocco puntatore non valido"
 
+msgid "E1365: Cannot use a return type with the \"new\" function"
+msgstr "E1365: Impossibile usare questo tipo di ritorno con la "
+"funzione \"new\""
+
 msgid "E1400: Cannot mix positional and non-positional arguments: %s"
-msgstr "E1400: Non si possono mischiare argomenti posizionali e non "
-"posizionali: %s"
+msgstr ""
+"E1400: Non si possono mischiare argomenti posizionali e non posizionali: %s"
 
 msgid "E1401: format argument %d unused in $-style format: %s"
 msgstr "E1401: argomento di formato %d non usato nel formato $-style: %s"
@@ -7872,19 +7882,27 @@ msgid ""
 "E1402: Positional argument %d used as field width reused as different type: "
 "%s/%s"
 msgstr ""
-"E1402: Argomento posizionale %d, usato come larghezza campo, riusato con "
-"un tipo differente: %s/%s"
+"E1402: Argomento posizionale %d, usato come larghezza campo, riusato con un "
+"tipo differente: %s/%s"
 
 msgid "E1403: Positional argument %d out of bounds: %s"
 msgstr "E1403: Argomento posizionale %d fuori misura: %s"
 
 msgid "E1404: Positional argument %d type used inconsistently: %s/%s"
-msgstr "E1404: Argomento posizionale di tipo %d usato in modo "
-"inconsistente: %s/%s"
+msgstr ""
+"E1404: Argomento posizionale di tipo %d usato in modo inconsistente: %s/%s"
 
 msgid "E1405: Invalid format specifier: %s"
 msgstr "E1405: Specificatore di formato non valido: %s"
 
+msgid "E1406: Member \"%s\": type mismatch, expected %s but got %s"
+msgstr ""
+"E1406: Elemento \"%s\": tipo non corrispondente, atteso %s ma ottenuto %s"
+
+msgid "E1407: Member \"%s\": type mismatch, expected %s but got %s"
+msgstr ""
+"E1407: Elemento \"%s\": tipo non corrispondente, atteso %s ma ottenuto %s"
+
 #. type of cmdline window or 0
 #. result of cmdline window or 0
 msgid "--No lines in buffer--"
@@ -8272,26 +8290,27 @@ msgid "\" Hit <Space> on a \"set\" line 
 msgstr "\" Batti <Spazio> su una riga di \"set\" per aggiornarla."
 
 msgid "important"
-msgstr "importante"
+msgstr "importanti"
 
 msgid "behave very Vi compatible (not advisable)"
-msgstr "funziona in modo molto compatibile con Vi (non consigliabile)"
+msgstr "comportamento molto compatibile con Vi (non consigliato)"
 
 msgid "list of flags to specify Vi compatibility"
 msgstr "lista di flag per specificare il grado di compatibilità con Vi"
 
 msgid "use Insert mode as the default mode"
-msgstr "usa modo Insert come modo predefinito"
+msgstr "usare modo Insert come modo predefinito"
 
 msgid "paste mode, insert typed text literally"
-msgstr "mode Paste, inserisce letteralmente testo battuto"
+msgstr "modo Paste, inserire letteralmente testo battuto"
 
 msgid "key sequence to toggle paste mode"
 msgstr "sequenza di tasti per attivare/disattivare modo Paste"
 
 msgid "list of directories used for runtime files and plugins"
 msgstr ""
-"lista di directory dove cercare i file da utilizzare in esecuzione e i plugin"
+"lista di directory dove cercare i file da utilizzare in\n"
+"esecuzione e i plugin"
 
 msgid "list of directories used for plugin packages"
 msgstr "lista di directory dove cercare i pacchetti di plugin"
@@ -8304,8 +8323,8 @@ msgstr "movimenti, ricerche e modelli di
 
 msgid "list of flags specifying which commands wrap to another line"
 msgstr ""
-"lista di flag che specificano quali comandi possono agire anche su più di "
-"una riga"
+"lista di flag che specificano quali comandi possono agire anche\n"
+"su più di una riga"
 
 msgid ""
 "many jump commands move the cursor to the first non-blank\n"
@@ -8330,33 +8349,35 @@ msgid "list of directory names used for 
 msgstr "lista di nomi di directory usate per :cd"
 
 msgid "change to directory of file in buffer"
-msgstr "cambia alla directory del file nel buffer corrente"
+msgstr "passare alla directory del file nel buffer corrente"
 
 msgid "change to pwd of shell in terminal buffer"
-msgstr "cambia alla directory dello shell nel buffer di terminale"
+msgstr "passare alla directory dello shell nel buffer di terminale"
 
 msgid "search commands wrap around the end of the buffer"
 msgstr ""
-"i comandi di ricerca ricominciano dall'inizio del file una volta raggiunta "
-"la fine del buffer"
+"i comandi di ricerca ricominciano dall'inizio del file una volta\n"
+"raggiunta la fine del buffer"
 
 msgid "show match for partly typed search command"
-msgstr "mostra corrispondenze per comandi di ricerca solo parzialmente immessi"
+msgstr "mostrare corrispondenze per comandi di ricerca solo\n"
+"parzialmente immessi"
 
 msgid "change the way backslashes are used in search patterns"
 msgstr ""
-"modifica il modo in cui le barre inverse vengono usate nelle espressioni "
-"regolari di ricerca"
+"modificare il modo in cui le barre inverse vengono usate nelle\n"
+"espressioni regolari di ricerca"
 
 msgid "select the default regexp engine used"
-msgstr "scegli l'algoritmo di ricerca predefinito da usare nelle ricerche"
+msgstr "scegliere l'algoritmo di ricerca predefinito da usare\n"
+"nelle ricerche"
 
 msgid "ignore case when using a search pattern"
-msgstr "ignora maiuscolo/minuscolo nelle espressioni di ricerca"
+msgstr "ignorare maiuscolo/minuscolo nelle espressioni di ricerca"
 
 msgid "override 'ignorecase' when pattern has upper case characters"
 msgstr ""
-"ignora l'opzione 'ignorecase' quando l'espressione di ricerca contiene "
+"ignora l'opzione 'ignorecase' quando l'espressione di ricerca contiene\n"
 "caratteri maiuscoli"
 
 msgid "what method to use for changing case of letters"
@@ -8373,8 +8394,8 @@ msgstr "modello per una riga che include
 
 msgid "expression used to transform an include line to a file name"
 msgstr ""
-"espressione da usare per trasformare un'istruzione di \"include\" in un nome "
-"di file"
+"espressione da usare per trasformare un'istruzione di\n"
+"\"include\" in un nome di file"
 
 msgid "tags"
 msgstr "tag"
@@ -8392,23 +8413,25 @@ msgid ""
 "how to handle case when searching in tags files:\n"
 "\"followic\" to follow 'ignorecase', \"ignore\" or \"match\""
 msgstr ""
-"come gestire maiuscolo/minuscolo nella ricerca nei file di tag:\n"
-"\"followic\" per usare il valore di 'ignorecase', \"ignore\" o \"match\""
+"come gestire maiuscolo/minuscolo nella ricerca nei file di\n"
+"tag: \"followic\" per usare il valore di 'ignorecase',\n"
+"\"ignore\" o \"match\""
 
 msgid "file names in a tags file are relative to the tags file"
 msgstr ""
-"i nomi di file in un file di tag sono espressi a partire dalla posizione del "
-"file di tag"
+"i nomi di file in un file di tag sono espressi a partire dalla\n"
+"posizione del file di tag"
 
 msgid "a :tag command will use the tagstack"
 msgstr "un comando :tag userà la pila dei tag (tagstack)"
 
 msgid "when completing tags in Insert mode show more info"
 msgstr ""
-"quando si completa un tag in modo Insert, mostra ulteriori informazioni"
+"quando si completa un tag in modo Insert, mostrare ulteriori\n"
+"informazioni"
 
 msgid "a function to be used to perform tag searches"
-msgstr "una funziona da usare per effettuare le ricerche di tag"
+msgstr "funzione da usare per effettuare le ricerche di tag"
 
 msgid "command for executing cscope"
 msgstr "comando per eseguire cscope"
@@ -8420,21 +8443,21 @@ msgid "0 or 1; the order in which \":cst
 msgstr "0 o 1; ordine in cui \":cstag\" effettua una ricerca"
 
 msgid "give messages when adding a cscope database"
-msgstr "metti messaggi quando si aggiunge un database cscope"
+msgstr "avvisare quando si aggiunge un database cscope"
 
 msgid "how many components of the path to show"
 msgstr "quanti componenti del percorso del nome di un file mostrare"
 
 msgid "when to open a quickfix window for cscope"
-msgstr "Quando aprire una finestra quickfix per cscope"
+msgstr "quando aprire una finestra quickfix per cscope"
 
 msgid "file names in a cscope file are relative to that file"
 msgstr ""
-"i nomi di file in un file cscope sono espressi a partire dalla posizione del "
-"file stesso"
+"i nomi di file in un file cscope sono espressi a partire dalla posizione\n"
+"del file stesso"
 
 msgid "displaying text"
-msgstr "visualizza del testo"
+msgstr "visualizzare del testo"
 
 msgid "number of lines to scroll for CTRL-U and CTRL-D"
 msgstr "numero di righe da scorrere con i comandi CTRL-U e CTRL-D"
@@ -8444,53 +8467,55 @@ msgstr "scorrimento per riga schermo"
 
 msgid "number of screen lines to show around the cursor"
 msgstr ""
-"numero di righe dello schermo da mostrare attorno alla riga che contiene il "
-"cursore"
+"numero di righe dello schermo da mostrare attorno alla riga che contiene\n"
+"il cursore"
 
 msgid "long lines wrap"
-msgstr "righe lunghe vanno a capo"
+msgstr "mandare a capo righe lunghe"
 
 msgid "wrap long lines at a character in 'breakat'"
 msgstr ""
-"spezza righe lunghe quando si incontra uno dei caratteri specificati in "
-"'breakat'"
+"andare a capo nelle righe lunghe quando si incontra uno dei caratteri\n"
+"specificati in 'breakat'"
 
 msgid "preserve indentation in wrapped text"
 msgstr ""
-"mantieni l'indentatura nel testo che occupa più di una riga dello schermo"
+"mantenere indentatura nel testo che occupa più di una riga dello schermo"
 
 msgid "adjust breakindent behaviour"
-msgstr "specifica comportamento dell'opzione 'breakindent'"
+msgstr "specificare comportamento dell'opzione 'breakindent'"
 
 msgid "which characters might cause a line break"
 msgstr "quali caratteri potrebbero causare un'interruzione di riga"
 
 msgid "string to put before wrapped screen lines"
 msgstr ""
-"stringa da visualizzare prima delle righe di continuazione sullo schermo di "
-"ogni riga lunga"
+"stringa da visualizzare sullo schermo prima delle righe di\n"
+"continuazione di ogni riga lunga"
 
 msgid "minimal number of columns to scroll horizontally"
 msgstr "numero minimo di colonne da far scorrere in orizzontale"
 
 msgid "minimal number of columns to keep left and right of the cursor"
 msgstr ""
-"numero minimo di colonne da mantenere a destra e a sinistra del cursore"
+"numero minimo di colonne da mantenere a destra e a sinistra\n"
+"del cursore"
 
 msgid ""
 "include \"lastline\" to show the last line even if it doesn't fit\n"
 "include \"uhex\" to show unprintable characters as a hex number"
 msgstr ""
 "includere \"lastline\" per mostrare ultima riga anche se non completa\n"
-"includere \"uhex\" per mostrare caratteri non visibile come numeri "
-"esadecimali"
+"includere \"uhex\" per mostrare come numeri esadecimali i caratteri\n"
+"non visibili"
 
 msgid "characters to use for the status line, folds and filler lines"
 msgstr ""
-"caratteri da usare per riga di status, piegature e righe di riempimento"
+"caratteri da usare per riga di status, piegature e righe\n"
+"di riempimento"
 
 msgid "number of lines used for the command-line"
-msgstr "numero di righe da usare per la riga-di-comando"
+msgstr "numero di righe disponibili per la riga-di-comando"
 
 msgid "width of the display"
 msgstr "larghezza della videata"
@@ -8505,7 +8530,7 @@ msgid "don't redraw while executing macr
 msgstr "non aggiornare lo schermo mentre si stanno eseguendo delle macro"
 
 msgid "timeout for 'hlsearch' and :match highlighting in msec"
-msgstr "timeout per evidenziare 'hlsearch' e :match in millisecondi"
+msgstr "ritardo in millisecondi prima di evidenziare 'hlsearch' e :match"
 
 msgid ""
 "delay in msec for each char written to the display\n"
@@ -8515,34 +8540,35 @@ msgstr ""
 "(per debugging)"
 
 msgid "show <Tab> as ^I and end-of-line as $"
-msgstr "mostra <Tab> come ^I e fine-riga come $"
+msgstr "mostrare <Tab> come ^I e fine-riga come $"
 
 msgid "list of strings used for list mode"
 msgstr "lista di stringhe da usare per il modo List"
 
 msgid "show the line number for each line"
-msgstr "mostra numero di riga per ogni riga"
+msgstr "mostrare numero di riga per ogni riga"
 
 msgid "show the relative line number for each line"
-msgstr "mostra numero di riga relativo per ogni riga"
+msgstr "mostrare numero di riga relativo per ogni riga"
 
 msgid "number of columns to use for the line number"
 msgstr "numero di colonne da usare per visualizzare numero di riga"
 
 msgid "controls whether concealable text is hidden"
-msgstr "controlla se il testo nascondibile è nascosto"
+msgstr "controllare se il testo nascondibile è nascosto"
 
 msgid "modes in which text in the cursor line can be concealed"
-msgstr "modi nei quali la riga del cursore può essere nascosta"
+msgstr "modi nei quali il testo nella riga del cursore può\n"
+"essere nascosto"
 
 msgid "syntax, highlighting and spelling"
 msgstr "sintassi, evidenziazione e correzione ortografica"
 
 msgid "\"dark\" or \"light\"; the background color brightness"
-msgstr "\"dark\" o \"light\"; scuro/chiaro, colore di sfondo"
+msgstr "\"dark\" o \"light\"; se il colore di sfondo è scuro o chiaro"
 
 msgid "type of file; triggers the FileType event when set"
-msgstr "tipo di file; fa scattare evento FileType quando è impostato"
+msgstr "tipo di file; se impostato, fa scattare evento FileType"
 
 msgid "name of syntax highlighting used"
 msgstr "nome dell'evidenziazione sintattica usata"
@@ -8554,61 +8580,63 @@ msgid "which highlighting to use for var
 msgstr "evidenziazione da usare per varie occasioni"
 
 msgid "highlight all matches for the last used search pattern"
-msgstr "evidenzia tutte le occorrenze dell'ultima ricerca effettuata"
+msgstr "evidenziare tutte le occorrenze dell'ultima ricerca effettuata"
 
 msgid "highlight group to use for the window"
 msgstr "gruppo evidenziazione da usare per la finestra"
 
 msgid "use GUI colors for the terminal"
-msgstr "usa colori della GUI per il terminale"
+msgstr "usare colori della GUI per il terminale"
 
 msgid "highlight the screen column of the cursor"
-msgstr "evidenzia la colonna del cursore sullo schermo"
+msgstr "evidenziare la colonna del cursore sullo schermo"
 
 msgid "highlight the screen line of the cursor"
-msgstr "evidenzia la riga del cursore sullo schermo"
+msgstr "evidenziare la riga del cursore sullo schermo"
 
 msgid "specifies which area 'cursorline' highlights"
-msgstr "specifica quali aree 'cursorline' evidenzia"
+msgstr "specificare quali area 'cursorline' evidenzia"
 
 msgid "columns to highlight"
 msgstr "colonne da evidenziare"
 
 msgid "highlight spelling mistakes"
-msgstr "evidenzia errori ortografici"
+msgstr "evidenziare errori ortografici"
 
 msgid "list of accepted languages"
-msgstr "lista dei linguaggi accettati"
+msgstr "lista delle lingue utilizzate"
 
 msgid "file that \"zg\" adds good words to"
-msgstr "file a cui \"zg\" aggiunge le parole \"buone\" indicate"
+msgstr "file a cui \"zg\" aggiunge le parole riconosciute\n"
+"come \"buone\""
 
 msgid "pattern to locate the end of a sentence"
 msgstr "espressione per individuare la fine di una frase"
 
 msgid "flags to change how spell checking works"
-msgstr "flag per cambiare come funziona la correzione ortografica"
+msgstr "flag per cambiare il funzionamento della correzione ortografica"
 
 msgid "methods used to suggest corrections"
 msgstr "metodi usati per suggerire correzioni"
 
 msgid "amount of memory used by :mkspell before compressing"
 msgstr ""
-"quantità di memoria usata da :mkspell prima di comprimere il file risultante"
+"quantità di memoria usata da :mkspell prima di comprimere\n"
+"il file risultante"
 
 msgid "multiple windows"
-msgstr "finestre multiple"
+msgstr "più di una finestra"
 
 msgid "0, 1 or 2; when to use a status line for the last window"
-msgstr "0, 1 o 2; quando usare la riga di status per l'ultima finestra"
+msgstr "0, 1 o 2; quando usare una riga di status per l'ultima finestra"
 
 msgid "alternate format to be used for a status line"
 msgstr "formato alternativo da usare per una riga di status"
 
 msgid "make all windows the same size when adding/removing windows"
 msgstr ""
-"rendere tutte le finestre di dimensioni uguali quando si aggiungono o "
-"rimuovono finestre"
+"rendere tutte le finestre di dimensioni uguali quando si aggiungono\n"
+"o rimuovono finestre"
 
 msgid "in which direction 'equalalways' works: \"ver\", \"hor\" or \"both\""
 msgstr "direzione in cui 'equalalways' funziona: \"ver\", \"hor\" o \"both\""
@@ -8617,60 +8645,62 @@ msgid "minimal number of lines used for 
 msgstr "numero minimo di righe usato per la finestra corrente"
 
 msgid "minimal number of lines used for any window"
-msgstr "numero minimo di righe usato per ognuna delle finestre"
+msgstr "numero minimo di righe usato per ogni finestra"
 
 msgid "keep the height of the window"
-msgstr "mantieni l'altezza della finestra"
+msgstr "mantenere l'altezza della finestra"
 
 msgid "keep the width of the window"
 msgstr "mantenere la larghezza della finestra"
 
 msgid "minimal number of columns used for the current window"
-msgstr "numero minimo di colonne usate per la finestra corrente"
+msgstr "numero minimo di colonne da usare per la finestra corrente"
 
 msgid "minimal number of columns used for any window"
-msgstr "numero minimo di colonne usate per qualsiasi finestra"
+msgstr "numero minimo di colonne da usare per tutte le finestre"
 
 msgid "initial height of the help window"
 msgstr "altezza iniziale della finestra di help"
 
 msgid "use a popup window for preview"
-msgstr "usa una finestra dinamica per le anteprime"
+msgstr "usare una finestra dinamica per le anteprime"
 
 msgid "default height for the preview window"
-msgstr "altezza predefinita per la finestra precedente"
+msgstr "altezza predefinita per la finestra di anteprima"
 
 msgid "identifies the preview window"
-msgstr "identifica la finestra di anteprima"
+msgstr "identificare la finestra di anteprima"
 
 msgid "don't unload a buffer when no longer shown in a window"
-msgstr "non scaricare un buffer quando non appare più in alcuna finestra"
+msgstr "non scaricare un buffer quando non appare più in alcuna\n"
+"finestra"
 
 msgid ""
 "\"useopen\" and/or \"split\"; which window to use when jumping\n"
 "to a buffer"
 msgstr ""
-"\"useopen\" e/o \"split\"; che finestra usare quando si salta a un buffer"
+"\"useopen\" e/o \"split\"; che finestra usare quando si salta a un\n"
+"buffer"
 
 msgid "a new window is put below the current one"
-msgstr "una nuova finestra va sotto quella corrente"
+msgstr "mettere una nuova finestra sotto quella corrente"
 
 msgid "determines scroll behavior for split windows"
-msgstr "determina comportamento scorrimento per finestre con divisioni"
+msgstr "determinare comportamento scorrimento per finestre con divisioni"
 
 msgid "a new window is put right of the current one"
-msgstr "una nuova finestra va a destra di quella corrente"
+msgstr "mettere una nuova finestra a destra di quella corrente"
 
 msgid "this window scrolls together with other bound windows"
 msgstr "questa finestra scorre insieme alle altre a essa collegate"
 
 msgid "\"ver\", \"hor\" and/or \"jump\"; list of options for 'scrollbind'"
-msgstr "\"ver\", \"hor\" e/o \"jump\"; lista delle opzioni per 'scrollbind'"
+msgstr "\"ver\", \"hor\" e/o \"jump\"; lista opzioni per 'scrollbind'"
 
 msgid "this window's cursor moves together with other bound windows"
 msgstr ""
-"il cursore di questa finestra di sposta insieme a quelli delle finestre "
-"collegate"
+"il cursore di questa finestra di sposta insieme a quelli\n"
+"delle finestre collegate"
 
 msgid "size of a terminal window"
 msgstr "dimensione di una finestra-terminale"
@@ -8680,8 +8710,8 @@ msgstr "tasto che precede comandi Vim in
 
 msgid "max number of lines to keep for scrollback in a terminal window"
 msgstr ""
-"numero massimo di linee da ricordare per scorrere indietro in una finestra-"
-"terminale"
+"numero massimo di linee da mantenere scorrendo indietro\n"
+"in una finestra-terminale"
 
 msgid "type of pty to use for a terminal window"
 msgstr "typo di pty da usare per una finestra-terminale"
@@ -8693,19 +8723,20 @@ msgid "multiple tab pages"
 msgstr "più di una pagina di linguette"
 
 msgid "0, 1 or 2; when to use a tab pages line"
-msgstr "0, 1 o 2; quando usare riga che descrive pagine di linguette"
+msgstr "0, 1 o 2; utilizzo della riga che descrive pagine di linguette"
 
 msgid "maximum number of tab pages to open for -p and \"tab all\""
-msgstr "massimo numero di pagine di linguette da aprire per -p e \"tab all\""
+msgstr "massimo numero di pagine di linguette da aprire\n"
+"per -p e \"tab all\""
 
 msgid "custom tab pages line"
-msgstr "riga personalizzata per le pagine di linguette"
+msgstr "personalizzazione riga che descrive le pagine di linguette"
 
 msgid "custom tab page label for the GUI"
-msgstr "etichetta personalizzata per le pagine di linguette nella GUI"
+msgstr "personalizzazione etichetta per le pagine di linguette nella GUI"
 
 msgid "custom tab page tooltip for the GUI"
-msgstr "suggerimento personalizzato per le pagine di linguette nella GUI"
+msgstr "personalizzazione suggerimento per le pagine di linguette nella GUI"
 
 msgid "terminal"
 msgstr "terminale"
@@ -8717,72 +8748,74 @@ msgid "alias for 'term'"
 msgstr "alias per 'term'"
 
 msgid "check built-in termcaps first"
-msgstr "controlla prima le opzioni di terminale predefinite"
+msgstr "controllare prima le opzioni di terminale predefinite"
 
 msgid "terminal connection is fast"
 msgstr "la connessione del terminale è veloce"
 
 msgid "request terminal key codes when an xterm is detected"
-msgstr "richiesta codici tasti terminale quando scoperto xterm"
+msgstr "richiesta codici tasti terminale quando il terminale\n"
+"è un xterm"
 
 msgid "terminal that requires extra redrawing"
 msgstr "terminale che richiede ulteriore ridisegno"
 
 msgid "what keyboard protocol to use for which terminal"
-msgstr "che protocollo di tastiera usare per quale terminale"
+msgstr "protocollo di tastiera da usare per un dato terminale"
 
 msgid "recognize keys that start with <Esc> in Insert mode"
-msgstr "riconosci tasti funzione che iniziano con <Esc> in modo Insert"
+msgstr "riconoscere sequenze di tasti che iniziano con <Esc> in modo Insert"
 
 msgid "minimal number of lines to scroll at a time"
 msgstr "numero minimo di righe da scorrere ogni volta"
 
 msgid "maximum number of lines to use scrolling instead of redrawing"
 msgstr ""
-"numero massimo di righe in cui usare lo scorrimento invece di ridisegnare lo "
-"schermo"
+"numero massimo di righe in cui usare lo scorrimento invece che\n"
+"ridisegnare lo schermo"
 
 msgid "specifies what the cursor looks like in different modes"
-msgstr "specifica l'aspetto del cursore nei vari modi"
+msgstr "specificare l'aspetto del cursore nei vari modi"
 
 msgid "show info in the window title"
-msgstr "mostra informazioni nel titolo della finestra"
+msgstr "mostrare informazioni nel titolo della finestra"
 
 msgid "percentage of 'columns' used for the window title"
-msgstr "percentuale di 'columns' usate per il titolo della finestra"
+msgstr "percentuale di 'columns' da usare per il titolo della finestra"
 
 msgid "when not empty, string to be used for the window title"
-msgstr "se non nulla, stringa da usare come titolo della finestra"
+msgstr "se specificata, stringa da usare come titolo della finestra"
 
 msgid "string to restore the title to when exiting Vim"
-msgstr "stringa di ripristino del titolo quando di esce da Vim"
+msgstr "stringa per ripristinare il titolo quando di esce da Vim"
 
 msgid "set the text of the icon for this window"
-msgstr "imposta testo dell'icona per questa finestra"
+msgstr "impostare testo dell'icona per questa finestra"
 
 msgid "when not empty, text for the icon of this window"
-msgstr "se non nulla, testo per l'icona di questa finestra"
+msgstr "se specificata, testo per l'icona di questa finestra"
 
 msgid "restore the screen contents when exiting Vim"
-msgstr "ripristina i contenuti dello schermo all'uscita da Vim"
+msgstr "ripristinare i contenuti dello schermo all'uscita da Vim"
 
 msgid "using the mouse"
-msgstr "usando il mouse"
+msgstr "usare il mouse"
 
 msgid "list of flags for using the mouse"
 msgstr "lista dei flag per usare il mouse"
 
 msgid "the window with the mouse pointer becomes the current one"
-msgstr "rende corrente la finestra che contiene il puntatore del mouse"
+msgstr "rendere corrente la finestra che contiene il puntatore del mouse"
 
 msgid "the window with the mouse pointer scrolls with the mouse wheel"
-msgstr "la finestra col puntatore del mouse scorre con la rotella del mouse"
+msgstr "la finestra che contiene il puntatore del mouse scorre con\n"
+"la rotella del mouse"
 
 msgid "hide the mouse pointer while typing"
-msgstr "nasconde il puntatore del mouse mentre si immette testo"
+msgstr "nascondere il puntatore del mouse mentre si immette testo"
 
 msgid "report mouse movement events"
-msgstr "riferisci eventi di movimento del mouse"
+msgstr "riferire eventi di movimento del mouse"
 
 msgid ""
 "\"extend\", \"popup\" or \"popup_setpos\"; what the right\n"
@@ -8808,20 +8841,23 @@ msgstr "lista di nomi di carattere da us
 
 msgid "pair of fonts to be used, for multibyte editing"
 msgstr ""
-"coppia di caratteri da usare, per editare file con caratteri multi-byte"
+"coppia di caratteri da usare, per editare file con caratteri\n"
+"multi-byte"
 
 msgid "list of font names to be used for double-wide characters"
-msgstr "lista di nomi di carattere da usare per caratteri a doppia larghezza"
+msgstr "lista di nomi di carattere da usare per caratteri\n"
+"a doppia larghezza"
 
 msgid "use smooth, antialiased fonts"
 msgstr "usare font più leggibili, anti-alias"
 
 msgid "list of flags that specify how the GUI works"
-msgstr "lista di flag che specificano come funziona le GUI"
+msgstr "lista di flag per specificare come funziona la GUI"
 
 msgid "\"icons\", \"text\" and/or \"tooltips\"; how to show the toolbar"
 msgstr ""
-"\"icons\", \"text\" e/o \"tooltips\"; come mostrare la barra degli strumenti"
+"\"icons\", \"text\" e/o \"tooltips\"; come mostrare la barra degli\n"
+"strumenti"
 
 msgid "size of toolbar icons"
 msgstr "dimensione icone sulla barra degli strumenti"
@@ -8831,7 +8867,8 @@ msgstr "spazio (in pixel) da lasciare so
 
 msgid "list of ASCII characters that can be combined into complex shapes"
 msgstr ""
-"lista caratteri ASCII che possono combinarsi per generare forme complesse"
+"lista caratteri ASCII che possono combinarsi per generare forme\n"
+"complesse"
 
 msgid "options for text rendering"
 msgstr "opzioni per la renderizzazione del testo"
@@ -8843,8 +8880,8 @@ msgid ""
 "\"last\", \"buffer\" or \"current\": which directory used for the file "
 "browser"
 msgstr ""
-"\"last\", \"buffer\" o \"current\": quale directory usare per esplorare i "
-"file"
+"\"last\", \"buffer\" o \"current\": quale directory usare per\n"
+"esplorare i file"
 
 msgid "language to be used for the menus"
 msgstr "lingua da usare per i menù"
@@ -8862,19 +8899,20 @@ msgid "delay in milliseconds before a ba
 msgstr "ritardo in millisecondi prima di visualizzare una didascalia"
 
 msgid "use balloon evaluation in the GUI"
-msgstr "valuta le didascalie nella GUI"
+msgstr "valutare didascalie nella GUI"
 
 msgid "use balloon evaluation in the terminal"
-msgstr "valuta le didascalie nella finestra-terminale"
+msgstr "valutare didascalie nella finestra-terminale"
 
 msgid "expression to show in balloon eval"
 msgstr "espressione da mostrare nella valutazione di una didascalia"
 
 msgid "printing"
-msgstr "in stampa"
+msgstr "stampare"
 
 msgid "list of items that control the format of :hardcopy output"
-msgstr "lista degli elementi che controllano il formato output di :hardcopy"
+msgstr "lista degli elementi che controllano il formato output\n"
+"del comando :hardcopy"
 
 msgid "name of the printer to be used for :hardcopy"
 msgstr "nome della stampante da usare per :hardcopy"
@@ -8886,10 +8924,10 @@ msgid "name of the font to be used for :
 msgstr "nome del carattere da usare per :hardcopy"
 
 msgid "format of the header used for :hardcopy"
-msgstr "formato dell'intestazione usata per :hardcopy"
+msgstr "formato dell'intestazione da usare per :hardcopy"
 
 msgid "encoding used to print the PostScript file for :hardcopy"
-msgstr "codifica usata per stampare il file PostScript da :hardcopy"
+msgstr "codifica da usare per stampare il file PostScript da :hardcopy"
 
 msgid "the CJK character set to be used for CJK output from :hardcopy"
 msgstr "il carattere CJK da usare per output CJK da :hardcopy"
@@ -8901,23 +8939,25 @@ msgid "messages and info"
 msgstr "messaggi e informazioni"
 
 msgid "add 's' flag in 'shortmess' (don't show search message)"
-msgstr "aggiungi 's' flag in 'shortmess' (non mostrare messaggi di ricerca)"
+msgstr "aggiungere flag 's' in 'shortmess' (non mostrare messaggi di\n"
+"ricerca)"
 
 msgid "list of flags to make messages shorter"
 msgstr "lista di flag su come abbreviare messaggi"
 
 msgid "show (partial) command keys in location given by 'showcmdloc'"
-msgstr "mostra (una parte dei) tasti di comando nella riga di status"
+msgstr "mostrare (una parte dei) tasti di comando nella riga di status"
 
 msgid "location where to show the (partial) command keys for 'showcmd'"
 msgstr ""
-"posizione in cui mostrare (una parte dei) tasti di comando per 'showcmd'"
+"posizione in cui mostrare (una parte dei) tasti di comando\n"
+"per 'showcmd'"
 
 msgid "display the current mode in the status line"
-msgstr "visualizza modo corrente nella riga di status"
+msgstr "visualizzare modo corrente nella riga di status"
 
 msgid "show cursor position below each window"
-msgstr "mostra la posizione del cursore sotto ogni finestra"
+msgstr "mostrare la posizione del cursore sotto ogni finestra"
 
 msgid "alternate format to be used for the ruler"
 msgstr "formato alternativo da usare per il righello"
@@ -8926,31 +8966,32 @@ msgid "threshold for reporting number of
 msgstr "soglia sopra la quale riferire il numero di righe modificate"
 
 msgid "the higher the more messages are given"
-msgstr "quanto più alto, tanto più dettagliati sono i messaggi"
+msgstr "più alto il valore, più numerosi i messaggi diagnostici"
 
 msgid "file to write messages in"
 msgstr "file su cui scrivere i messaggi"
 
 msgid "pause listings when the screen is full"
-msgstr "fare sosta nella visualizzazione elenchi quando lo schermo è pieno"
+msgstr "fare sosta nella visualizzazione elenchi quando lo schermo\n"
+"è pieno"
 
 msgid "start a dialog when a command fails"
 msgstr "iniziare un dialogo quando un comando non è riuscito"
 
 msgid "ring the bell for error messages"
-msgstr "suonare il campanello con i messaggi di errore"
+msgstr "suonare il campanello per i messaggi di errore"
 
 msgid "use a visual bell instead of beeping"
 msgstr "usare un campanello visivo invece che sonoro"
 
 msgid "do not ring the bell for these reasons"
-msgstr "non suonare il campanelli in questi casi"
+msgstr "non suonare il campanello in questi casi"
 
 msgid "list of preferred languages for finding help"
 msgstr "lista dei linguaggi preferiti per ottenere aiuto"
 
 msgid "selecting text"
-msgstr "selezione di testo"
+msgstr "selezionare testo"
 
 msgid "\"old\", \"inclusive\" or \"exclusive\"; how selecting text behaves"
 msgstr "\"old\", \"inclusive\" o \"exclusive\"; modi per scegliere testo"
@@ -8967,30 +9008,34 @@ msgid ""
 "\"autoselect\" to always put selected text on the clipboard"
 msgstr ""
 "\"unnamed\" per usare registro * come registro senza nome\n"
-"\"autoselect\" per mettere sempre il testo selezionato nella clipboard"
+"\"autoselect\" per mettere sempre il testo selezionato nella\n"
+"clipboard"
 
 msgid "\"startsel\" and/or \"stopsel\"; what special keys can do"
 msgstr "\"startsel\" e/o \"stopsel\"; cosa fare usando tasti speciali"
 
 msgid "editing text"
-msgstr "in edito su testo"
+msgstr "editare un testo"
 
 msgid "maximum number of changes that can be undone"
-msgstr "massimo numero di modifiche che possono essere annullate"
+msgstr "numero massimo di modifiche che possono essere annullate"
 
 msgid "automatically save and restore undo history"
-msgstr "salvare e ripristinare automaticamente storia degli annullamenti"
+msgstr "salvare e ripristinare automaticamente la storia degli\n"
+"annullamenti"
 
 msgid "list of directories for undo files"
-msgstr "lista di directory per i file di annullamento"
+msgstr "lista di directory dove tenere i file di annullamento"
 
 msgid "maximum number lines to save for undo on a buffer reload"
 msgstr ""
-"massimo numero di righe da salvare per annullamento se si ricarica il buffer"
+"massimo numero di righe da salvare per annullamento se si\n"
+"ricarica il buffer"
 
 msgid "changes have been made and not written to a file"
 msgstr ""
-"sono state fatte modifiche che non sono ancora state salvate su un file"
+"ci sono modifiche che non sono ancora state salvate\n"
+"su un file"
 
 msgid "buffer is not to be written"
 msgstr "buffer da non salvare su disco"
@@ -8999,19 +9044,21 @@ msgid "changes to the text are possible"
 msgstr "è possibile modificare il testo"
 
 msgid "line length above which to break a line"
-msgstr "lunghezza di riga sopra la quale spezzare la riga stessa"
+msgstr "lunghezza di riga sopra la quale andare a capo"
 
 msgid "margin from the right in which to break a line"
-msgstr "margine da destra sopra il quale spezzare la riga stessa"
+msgstr "margine da destra sopra il quale andare a capo"
 
 msgid "specifies what <BS>, CTRL-W, etc. can do in Insert mode"
-msgstr "specificare cose <BS>, CTRL-W, etc. possono fare in modo Insert"
+msgstr "specificare cosa <BS>, CTRL-W, etc. possono fare\n"
+"in modo Insert"
 
 msgid "definition of what comment lines look like"
-msgstr "definizione di come sono individuate le righe di commento"
+msgstr "definizioni per individuare le righe di commento"
 
 msgid "list of flags that tell how automatic formatting works"
-msgstr "lista di flag con specifiche riguardo alla formattazione automatica"
+msgstr "lista di flag con specifiche riguardo alla\n"
+"formattazione automatica"
 
 msgid "pattern to recognize a numbered list"
 msgstr "espressione che permette di riconoscere una lista numerata"
@@ -9021,14 +9068,15 @@ msgstr "espressione usata da \"gq\" per 
 
 msgid "specifies how Insert mode completion works for CTRL-N and CTRL-P"
 msgstr ""
-"specificare come funziona il completamente in modo Insert per CTRL-N e CTRL-P"
+"specificare come funziona il completamente in modo Insert\n"
+"per CTRL-N e CTRL-P"
 
 msgid "whether to use a popup menu for Insert mode completion"
 msgstr "se usare un menù dinamico per il completamento in modo Insert"
 
 msgid "options for the Insert mode completion info popup"
 msgstr ""
-"opzioni per il pannello dinamico con le informazioni di completamento in "
+"opzioni per il menù dinamico con le informazioni di completamento in\n"
 "modo Insert"
 
 msgid "maximum height of the popup menu"
@@ -9038,42 +9086,48 @@ msgid "minimum width of the popup menu"
 msgstr "larghezza minima del menù dinamico"
 
 msgid "user defined function for Insert mode completion"
-msgstr "funzione definita dall'utente per il completamento in modo Insert"
+msgstr "funzione definita dall'utente per il completamento\n"
+"in modo Insert"
 
 msgid "function for filetype-specific Insert mode completion"
 msgstr ""
-"funzione per il completamento in modo Insert a seconda del tipo di file"
+"funzione per il completamento in modo Insert a seconda del\n"
+"tipo di file"
 
 msgid "list of dictionary files for keyword completion"
-msgstr "lista di file dizionario per il completamento di parole chiave"
+msgstr "lista di file dizionario per il completamento di\n"
+"parole chiave"
 
 msgid "list of thesaurus files for keyword completion"
-msgstr "lista di file di sinonimi per il completamento di parole chiave"
+msgstr "lista di file di sinonimi per il completamento di\n"
+"parole chiave"
 
 msgid "function used for thesaurus completion"
-msgstr "funzione usata per completamento thesaurus"
+msgstr "funzione usata per completamento sinonimi"
 
 msgid "adjust case of a keyword completion match"
 msgstr ""
-"tener conto di maiuscolo/minuscolo nelle corrispondenze di completamento"
+"aggiustare maiuscolo/minuscolo nelle corrispondenze di\n"
+"completamento"
 
 msgid "enable entering digraphs with c1 <BS> c2"
-msgstr "abilitare immissione lettere non in tastiera con c1 <BS> c2"
+msgstr "abilitare immissione lettere non in tastiera con\n"
+"c1 <BS> c2"
 
 msgid "the \"~\" command behaves like an operator"
 msgstr "il comando \"~\" si comporta come un operatore"
 
 msgid "function called for the \"g@\" operator"
-msgstr "funzione chiamata per l'operatore \"g@\""
+msgstr "funzione da chiamare per l'operatore \"g@\""
 
 msgid "when inserting a bracket, briefly jump to its match"
 msgstr ""
-"se si inserisce parentesi, saltare per un momento alla parentesi "
-"corrispondente"
+"se si inserisce una parentesi, saltare per un momento\n"
+"alla parentesi corrispondente"
 
 msgid "tenth of a second to show a match for 'showmatch'"
 msgstr ""
-"decimi di secondo per evidenziare corrispondenza col comando 'showmatch'"
+"decimi di secondo per evidenziare corrispondenze col comando 'showmatch'"
 
 msgid "list of pairs that match for the \"%\" command"
 msgstr "lista di coppie corrispondenti per il comando \"%\""
@@ -9092,19 +9146,22 @@ msgid "tabs and indenting"
 msgstr "tabulazioni e indentatura"
 
 msgid "number of spaces a <Tab> in the text stands for"
-msgstr "numero di spazi in un testo quando si inserisce <Tab>"
+msgstr "numero di spazi in un testo corrispondenti a <Tab>"
 
 msgid "number of spaces used for each step of (auto)indent"
 msgstr "numero di spazi usati per ogni rientro di (auto)indent"
 
 msgid "list of number of spaces a tab counts for"
-msgstr "lista del numero di spazi a cui ogni tab corrisponde"
+msgstr "lista del numero di spazi a cui ogni successivo\n"
+"tab corrisponde"
 
 msgid "list of number of spaces a soft tabsstop counts for"
-msgstr "lista del numero di spazi a cui ogni softtabstop corrisponde"
+msgstr "lista del numero di spazi a cui ogni successivo\n"
+"softtabstop corrisponde"
 
 msgid "a <Tab> in an indent inserts 'shiftwidth' spaces"
-msgstr "un <Tab> in un'indentatura inserisce 'shiftwidth' spazi"
+msgstr "<Tab> in un'indentatura deve inserire 'shiftwidth'\n"
+"spazi"
 
 msgid "if non-zero, number of spaces to insert for a <Tab>"
 msgstr "se diverso da zero, numero di spazi da inserire per un <Tab>"
@@ -9128,22 +9185,24 @@ msgid "options for C-indenting"
 msgstr "opzioni per indentatura C"
 
 msgid "keys that trigger C-indenting in Insert mode"
-msgstr "tasti che iniziano indentatura C in modo Insert"
+msgstr "tasti per iniziare indentatura C in modo Insert"
 
 msgid "list of words that cause more C-indent"
-msgstr "lista di parole che innescano ulteriore indentatura C"
+msgstr "lista di parole per innescare ulteriore indentatura C"
 
 msgid "list of scope declaration names used by cino-g"
 msgstr "lista di dichiarazioni di ambito usate da cino-g"
 
 msgid "expression used to obtain the indent of a line"
-msgstr "espressione usata per ottenere indentatura di una riga"
+msgstr "espressione da usare per ottenere indentatura di una riga"
 
 msgid "keys that trigger indenting with 'indentexpr' in Insert mode"
-msgstr "tasti che iniziano indentatura con 'indentexpr' in modo Insert"
+msgstr "tasti per iniziare indentatura con 'indentexpr'\n"
+"in modo Insert"
 
 msgid "copy whitespace for indenting from previous line"
-msgstr "copiare la parte di spazi bianchi di indentatura dalla riga precedente"
+msgstr "copiare la parte di spazi bianchi di indentatura dalla\n"
+"riga precedente"
 
 msgid "preserve kind of whitespace when changing indent"
 msgstr "conservare tipo di spazi bianchi quando si cambia indentatura"
@@ -9152,43 +9211,45 @@ msgid "enable lisp mode"
 msgstr "abilita Modo Lisp"
 
 msgid "words that change how lisp indenting works"
-msgstr "parole che modificano funzionamento indentatura Lisp"
+msgstr "parole per modificare funzionamento indentatura Lisp"
 
 msgid "options for Lisp indenting"
 msgstr "opzioni per indentatura Lisp"
 
 msgid "folding"
-msgstr "piegatura"
+msgstr "piegature"
 
 msgid "unset to display all folds open"
-msgstr "rimuovere per vedere aperte tutte le piegature"
+msgstr "disabilitare per riaprire tutte le piegature"
 
 msgid "folds with a level higher than this number will be closed"
-msgstr "piegature a livello più alto di questo numero resteranno chiuse"
+msgstr "livello oltre il quale le piegature restano chiuse"
 
 msgid "value for 'foldlevel' when starting to edit a file"
-msgstr "valore di 'foldlevel' all'inizio della modifica di un file"
+msgstr "valore di 'foldlevel' all'inizio dell'edit di un file"
 
 msgid "width of the column used to indicate folds"
-msgstr "larghezza della colonna usare per indicare piegature"
+msgstr "larghezza della colonna da usare per indicare piegature"
 
 msgid "expression used to display the text of a closed fold"
-msgstr "espressione usata per visualizzare testo di una piegatura chiusa"
+msgstr "espressione usata per visualizzare testo di una piegatura\n"
+"chiusa"
 
 msgid "set to \"all\" to close a fold when the cursor leaves it"
 msgstr ""
-"impostare a \"all\" per chiudere una piegatura quando il cursore la lascia"
+"impostare a \"all\" per chiudere una piegatura quando il cursore\n"
+"la lascia"
 
 msgid "specifies for which commands a fold will be opened"
 msgstr "specificare per quali comandi una piegatura verrà aperta"
 
 msgid "minimum number of screen lines for a fold to be closed"
 msgstr ""
-"numero minimo di righe sullo schermo per visualizzare come chiusa una "
-"piegatura"
+"numero minimo di righe sullo schermo per visualizzare come chiusa\n"
+"una piegatura"
 
 msgid "template for comments; used to put the marker in"
-msgstr "modello per i commenti; usata per metterci delle marcature"
+msgstr "modello per i commenti; usata per marcature nelle piegature"
 
 msgid ""
 "folding type: \"manual\", \"indent\", \"expr\", \"marker\",\n"
@@ -9198,17 +9259,18 @@ msgstr ""
 "\"syntax\" o \"diff\""
 
 msgid "expression used when 'foldmethod' is \"expr\""
-msgstr "espressione usata quando 'foldmethod' è \"expr\""
+msgstr "espressione da usare quando 'foldmethod' è \"expr\""
 
 msgid "used to ignore lines when 'foldmethod' is \"indent\""
 msgstr "usare per ignorare righe quando 'foldmethod' è \"indent\""
 
 msgid "markers used when 'foldmethod' is \"marker\""
-msgstr "marcature usate quando 'foldmethod' è \"marker\""
+msgstr "marcature da usare quando 'foldmethod' è \"marker\""
 
 msgid "maximum fold depth for when 'foldmethod' is \"indent\" or \"syntax\""
 msgstr ""
-"massima profondità piegature quando 'foldmethod' è \"indent\" o \"syntax\""
+"massima profondità piegature quando 'foldmethod' è\n"
+"\"indent\" o \"syntax\""
 
 msgid "diff mode"
 msgstr "modo Diff"
@@ -9220,10 +9282,10 @@ msgid "options for using diff mode"
 msgstr "opzioni per usare modo Diff"
 
 msgid "expression used to obtain a diff file"
-msgstr "espressioni usate per ottenere un file diff"
+msgstr "espressioni da usare per ottenere un file diff"
 
 msgid "expression used to patch a file"
-msgstr "espressione usata per applicare patch a un file"
+msgstr "espressione da usare per applicare patch a un file"
 
 msgid "mapping"
 msgstr "mappatura"
@@ -9235,10 +9297,11 @@ msgid "recognize mappings in mapped keys
 msgstr "riconoscere le mappature nei tasti mappati"
 
 msgid "allow timing out halfway into a mapping"
-msgstr "consenti timeout durante una mappatura"
+msgstr "consentire timeout durante una mappatura"
 
 msgid "allow timing out halfway into a key code"
-msgstr "consenti timeout durante una mappatura con uso di tasti mappati"
+msgstr "consentire timeout durante una mappatura con uso di tasti\n"
+"mappati"
 
 msgid "time in msec for 'timeout'"
 msgstr "tempo in millisecondi prima di andare in 'timeout'"
@@ -9247,19 +9310,21 @@ msgid "time in msec for 'ttimeout'"
 msgstr "tempo in millisecondi prima di andare in 'ttimeout'"
 
 msgid "reading and writing files"
-msgstr "lettura e scrittura file"
+msgstr "leggere e scrivere file"
 
 msgid "enable using settings from modelines when reading a file"
-msgstr "consenti uso di impostazioni da modeline durante la lettura di un file"
+msgstr "consentire uso di impostazioni da modeline durante la\n"
+"lettura di un file"
 
 msgid "allow setting expression options from a modeline"
-msgstr "consenti impostazione di opzioni tramite espressioni da modeline"
+msgstr "consentire impostazione di opzioni tramite espressioni\n"
+"da modeline"
 
 msgid "number of lines to check for modelines"
-msgstr "numero di righe da controllare alla ricerca di modeline"
+msgstr "numero di righe da controllare per modeline"
 
 msgid "binary file editing"
-msgstr "modifica di file binario"
+msgstr "modificare un file binario"
 
 msgid "last line in the file has an end-of-line"
 msgstr "l'ultima riga del file ha una fine-riga"
@@ -9271,7 +9336,7 @@ msgid "fixes missing end-of-line at end 
 msgstr "rimediare alla mancanza di una fine-riga a fine file"
 
 msgid "prepend a Byte Order Mark to the file"
-msgstr "aggiungi all'inizio del file un Byte Order Mark"
+msgstr "aggiungere a inizio file un Byte Order Mark"
 
 msgid "end-of-line format: \"dos\", \"unix\" or \"mac\""
 msgstr "formato fine-riga: \"dos\", \"unix\" o \"mac\""
@@ -9286,7 +9351,7 @@ msgid "obsolete, use 'fileformats'"
 msgstr "obsoleto, usare 'fileformats'"
 
 msgid "writing files is allowed"
-msgstr "la riscrittura dei file è consentita"
+msgstr "riscrivere file è consentito"
 
 msgid "write a backup file before overwriting a file"
 msgstr "scrivere un file di backup, prima di riscrivere un file"
@@ -9298,7 +9363,7 @@ msgid "patterns that specify for which f
 msgstr "modelli che specificano per quali file non fare un backup"
 
 msgid "whether to make the backup as a copy or rename the existing file"
-msgstr "se fare, come backup, una copia del file, oppure se rinominarlo"
+msgstr "se fare, come backup, una copia del file, invece che rinominarlo"
 
 msgid "list of directories to put backup files in"
 msgstr "lista di directory in cui scrivere i file di backup"
@@ -9307,29 +9372,34 @@ msgid "file name extension for the backu
 msgstr "estensione nome file da usare per i file di backup"
 
 msgid "automatically write a file when leaving a modified buffer"
-msgstr "scrivere automaticamente un file, all'uscita da un buffer modificato"
+msgstr "riscrivere automaticamente un file, all'uscita da un buffer\n"
+"modificato"
 
 msgid "as 'autowrite', but works with more commands"
-msgstr "come 'autowrite', ma funzione con un numero maggiore di comandi"
+msgstr "come 'autowrite', ma vale per un numero maggiore di comandi"
 
 msgid "always write without asking for confirmation"
 msgstr "scrivi sempre, senza mai chiedere conferma"
 
 msgid "automatically read a file when it was modified outside of Vim"
-msgstr "leggi automaticamente un file quando è stato modificato non da Vim"
+msgstr "leggere automaticamente un file quando è stato modificato\n"
+"fuori da Vim"
 
 msgid "keep oldest version of a file; specifies file name extension"
 msgstr ""
-"conserva la versione più vecchia di un file; specifica l'estensione da usare"
+"conservare la versione più vecchia di un file; specificare\n"
+"l'estensione da usare"
 
 msgid "forcibly sync the file to disk after writing it"
-msgstr "forza una scrittura fisica su disco del file, dopo averlo riscritto"
+msgstr "forzare una scrittura fisica su disco del file, dopo averlo\n"
+"riscritto"
 
 msgid "use 8.3 file names"
 msgstr "usare nomi di file nel formato 8.3"
 
 msgid "encryption method for file writing: zip, blowfish or blowfish2"
-msgstr "metodo di cifratura con cui scrivere file: zip, blowfish o blowfish2"
+msgstr "metodo di cifratura con cui riscrivere file: zip, blowfish\n"
+"o blowfish2"
 
 msgid "the swap file"
 msgstr "il file di swap"
@@ -9338,64 +9408,70 @@ msgid "list of directories for the swap 
 msgstr "lista di directory dove mettere il file di swap"
 
 msgid "use a swap file for this buffer"
-msgstr "usare un file di swap per questo buffer"
+msgstr "usare soltanto il file di swap per questo buffer"
 
 msgid "\"sync\", \"fsync\" or empty; how to flush a swap file to disk"
 msgstr ""
-"\"sync\", \"fsync\" o nullo; come forzare la scrittura su disco di un file "
-"di swap"
+"\"sync\", \"fsync\" o nullo; come forzare la scrittura su disco\n"
+"di un file di swap"
 
 msgid "number of characters typed to cause a swap file update"
-msgstr "numero di caratteri immessi per forzare aggiornamento del file di swap"
+msgstr "numero di caratteri immessi per forzare aggiornamento del\n"
+"file di swap"
 
 msgid "time in msec after which the swap file will be updated"
 msgstr ""
-"tempo in millisecondi trascorso il quale il file di swap verrà aggiornato"
+"tempo in millisecondi trascorso il quale il file di swap\n"
+"verrà aggiornato"
 
 msgid "maximum amount of memory in Kbyte used for one buffer"
 msgstr "massima quantità di memoria in Kbyte da usare per un buffer"
 
 msgid "maximum amount of memory in Kbyte used for all buffers"
-msgstr "massima quantità di memoria in Kbyte da usare per tutti i buffer"
+msgstr "massima quantità di memoria in Kbyte da usare per tutti\n"
+"i buffer"
 
 msgid "command line editing"
 msgstr "edit della riga-di-comando"
 
 msgid "how many command lines are remembered"
-msgstr "quante righe di comando sono ricordate"
+msgstr "quante righe di comando ricordare"
 
 msgid "key that triggers command-line expansion"
 msgstr "tasto che innesca l'espansione della riga-di-comando"
 
 msgid "like 'wildchar' but can also be used in a mapping"
-msgstr "come 'wildchar', ma può anche essere usato in una mappatura"
+msgstr "come 'wildchar', ma utilizzabile anche in una mappatura"
 
 msgid "specifies how command line completion works"
-msgstr "specifica come funziona il completamento della riga-di-comando"
+msgstr "specificare funzionamento del completamento della riga-di-comando"
 
 msgid "empty or \"tagfile\" to list file name of matching tags"
-msgstr "empty o \"tagfile\" per listare nome file dei tag corrispondenti"
+msgstr "nullo o \"tagfile\" per listare nome file dei tag corrispondenti"
 
 msgid "list of file name extensions that have a lower priority"
-msgstr "lista delle estensioni di nomi file con priorità più bassa"
+msgstr "lista estensioni di nomi file con priorità più bassa"
 
 msgid "list of file name extensions added when searching for a file"
 msgstr ""
-"lista delle estensioni aggiunte ai nomi di file quando si effettua la "
-"ricerca di un file"
+"lista delle estensioni da aggiungere ai nomi di file quando si\n"
+"effettua la ricerca di un file"
 
 msgid "list of patterns to ignore files for file name completion"
-msgstr "lista di modelli da ignorare nel completamento dei nomi di file"
+msgstr "lista di modelli da ignorare nel completamento dei nomi\n"
+"di file"
 
 msgid "ignore case when using file names"
 msgstr "ignorare maiuscolo/minuscolo usando nomi di file"
 
 msgid "ignore case when completing file names"
-msgstr "ignorare maiuscolo/minuscolo nel completamento dei nomi di file"
+msgstr "ignorare maiuscolo/minuscolo nel completamento dei nomi\n"
+"di file"
 
 msgid "command-line completion shows a list of matches"
 msgstr ""
-"il completamente della riga-di-comando mostra una lista di corrispondenze"
+"il completamente della riga-di-comando mostra\n"
+"una lista di corrispondenze"
 
 msgid "key used to open the command-line window"
 msgstr "tasto usato per aprire la finestra delle righe-di-comando"
@@ -9410,40 +9486,44 @@ msgid "name of the shell program used fo
 msgstr "nome della shell da usare per i programmi esterni"
 
 msgid "when to use the shell or directly execute a command"
-msgstr "quando usare la shell, oppure eseguire direttamente un comando"
+msgstr "quando usare la shell, invece che eseguire direttamente\n"
+"un comando"
 
 msgid "character(s) to enclose a shell command in"
 msgstr "caratteri fra cui inserire un comando della shell"
 
 msgid "like 'shellquote' but include the redirection"
-msgstr "come 'shellquote' ma comprende la ridirezione"
+msgstr "come 'shellquote' ma è ammessa anche la ridirezione"
 
 msgid "characters to escape when 'shellxquote' is ("
 msgstr "caratteri da proteggere quando 'shellxquote' è ("
 
 msgid "argument for 'shell' to execute a command"
-msgstr "argomento da passare alla 'shell' per poter eseguire un comando"
+msgstr "argomento da passare alla 'shell' per poter\n"
+"eseguire un comando"
 
 msgid "used to redirect command output to a file"
-msgstr "usato per ridirigere l'output di un comando a un file"
+msgstr "stringa da usare per ridirigere l'output di un comando\n"
+"a un file"
 
 msgid "use a temp file for shell commands instead of using a pipe"
 msgstr ""
-"usare un file temporaneo per i comandi della shell, invece che usare una pipe"
+"usare un file temporaneo per i comandi della shell, invece che|n"
+"usare una pipe"
 
 msgid "program used for \"=\" command"
-msgstr "programma usato per il comando \"=\""
+msgstr "programma da usare per il comando \"=\""
 
 msgid "program used to format lines with \"gq\" command"
-msgstr "programma usato per formattare le righe col comando \"gq\""
+msgstr "programma da usare per formattare righe col comando \"gq\""
 
 msgid "program used for the \"K\" command"
-msgstr "programma usato per il comando \"K\""
+msgstr "programma da usare per il comando \"K\""
 
 msgid "warn when using a shell command and a buffer has changes"
 msgstr ""
-"avvisare quando si sta usando un comando della shell e un buffer ha avuto "
-"delle modifiche"
+"avvisare quando, usando un comando della shell, un buffer è\n"
+"stato modificato"
 
 msgid "running make and jumping to errors (quickfix)"
 msgstr "eseguire make e saltare agli errori (quickfix)"
@@ -9452,58 +9532,61 @@ msgid "name of the file that contains er
 msgstr "nome del file che contiene i messaggi di errore"
 
 msgid "list of formats for error messages"
-msgstr "lista di formati dei messaggi di errore"
+msgstr "lista dei formati dei messaggi di errore"
 
 msgid "program used for the \":make\" command"
 msgstr "programma usato per invocare \":make\""
 
 msgid "string used to put the output of \":make\" in the error file"
-msgstr "stringa usata per porre l'output di \":make\" nel file degli errori"
+msgstr "stringa usata per porre l'output di \":make\" nel file\n"
+"degli errori"
 
 msgid "name of the errorfile for the 'makeprg' command"
 msgstr "nome del file degli errori per il comando 'makeprg'"
 
 msgid "program used for the \":grep\" command"
-msgstr "programma usato per il comando \":grep\""
+msgstr "programma da usare per il comando \":grep\""
 
 msgid "list of formats for output of 'grepprg'"
-msgstr "lista di formati per l'output di 'grepprg'"
+msgstr "lista dei formati per l'output di 'grepprg'"
 
 msgid "encoding of the \":make\" and \":grep\" output"
 msgstr "codifica dell'output dei programmi \":make\" e \":grep\""
 
 msgid "function to display text in the quickfix window"
-msgstr "funzione che visualizza del testo nella finestra quickfix"
+msgstr "funzione che visualizza del testo\n"
+"nella finestra quickfix"
 
 msgid "system specific"
-msgstr "proprio del sistema"
+msgstr "caratteristiche del sistema"
 
 msgid "use forward slashes in file names; for Unix-like shells"
 msgstr "usare barre nei nomi di file; per shell di tipo Unix"
 
 msgid "specifies slash/backslash used for completion"
-msgstr "specificare se va usato barra o barra inversa nel completamento"
+msgstr "specificare se va usato barra o barra inversa nel\n"
+"completamento"
 
 msgid "language specific"
-msgstr "proprio del linguaggio"
+msgstr "caratteristiche del linguaggio"
 
 msgid "specifies the characters in a file name"
-msgstr "specifica i caratteri contenuti in un nome di file"
+msgstr "lista dei caratteri contenuti in un nome di file"
 
 msgid "specifies the characters in an identifier"
-msgstr "specifica i caratteri contenuti in un identificativo"
+msgstr "lista dei caratteri contenuti in un identificativo"
 
 msgid "specifies the characters in a keyword"
-msgstr "specifica i caratteri contenuti in una parola"
+msgstr "lista dei caratteri contenuti in una parola"
 
 msgid "specifies printable characters"
-msgstr "specifica i caratteri stampabili"
+msgstr "lista dei caratteri stampabili"
 
 msgid "specifies escape characters in a string"
-msgstr "specifica i caratteri di protezione in un stringa"
+msgstr "lista dei caratteri di protezione in un stringa"
 
 msgid "display the buffer right-to-left"
-msgstr "visualizza il buffer da destra a sinistra"
+msgstr "visualizzare il buffer da destra a sinistra"
 
 msgid "when to edit the command-line right-to-left"
 msgstr "quando editare la riga-di-comando da destra a sinistra"
@@ -9513,11 +9596,11 @@ msgstr "inserire i caratteri all'indietr
 
 msgid "allow CTRL-_ in Insert and Command-line mode to toggle 'revins'"
 msgstr ""
-"consentire CTRL-_ nei modi Insert e Command-line per innescare/disinnescare "
-"'revins'"
+"consentire CTRL-_ nei modi Insert e Command-line per\n"
+"innescare/disinnescare 'revins'"
 
 msgid "the ASCII code for the first letter of the Hebrew alphabet"
-msgstr "il codice ASCII per la prima lettera dell'alfabeto ebraico"
+msgstr "codice ASCII per la prima lettera dell'alfabeto ebraico"
 
 msgid "use Hebrew keyboard mapping"
 msgstr "usare mappatura tastiera ebraica"
@@ -9526,35 +9609,37 @@ msgid "use phonetic Hebrew keyboard mapp
 msgstr "usare mappatura tastiera fonetica ebraica"
 
 msgid "prepare for editing Arabic text"
-msgstr "preparare per editare test in arabo"
+msgstr "preparare per editare testo in arabo"
 
 msgid "perform shaping of Arabic characters"
-msgstr "assumere la forma dei caratteri arabi"
+msgstr "consentire formazione dei caratteri arabi"
 
 msgid "terminal will perform bidi handling"
-msgstr "il terminale effettua gestione bidirezionalità del testo"
+msgstr "lasciare fare al terminale gestione bidirezionalità\n"
+"del testo"
 
 msgid "name of a keyboard mapping"
 msgstr "nome di una mappatura di tastiera"
 
 msgid "list of characters that are translated in Normal mode"
-msgstr "lista dei caratteri che vengono tradotti in modo Normal"
+msgstr "lista dei caratteri da rimappare in modo Normal"
 
 msgid "apply 'langmap' to mapped characters"
 msgstr "applicare 'langmap' ai caratteri mappati"
 
 msgid "when set never use IM; overrules following IM options"
 msgstr ""
-"se impostata, non usare mai IM [Input Method]; prevale sulle seguenti "
-"opzioni IM"
+"se impostata, non usare mai IM [Input Method]; prevale sulle\n"
+"seguenti opzioni IM"
 
 msgid "in Insert mode: 1: use :lmap; 2: use IM; 0: neither"
-msgstr "in modo Insert: 1: usare :lmap; 2: usare IM; 0: nessuno dei due"
+msgstr "in modo Insert: 1: usare :lmap; 2: usare IM;\n"
+"0: nessuno dei due"
 
 msgid "input method style, 0: on-the-spot, 1: over-the-spot"
 msgstr ""
-"stile del metodo di input, 0: on-the-spot [in questo punto], 1: over-the-"
-"spot [sopra questo punto]"
+"stile del metodo di input, 0: on-the-spot [in questo punto],\n"
+"1: over-the-spot [sopra questo punto]"
 
 msgid "entering a search pattern: 1: use :lmap; 2: use IM; 0: neither"
 msgstr ""
@@ -9562,10 +9647,11 @@ msgstr ""
 "nessuno dei due"
 
 msgid "when set always use IM when starting to edit a command line"
-msgstr "se impostato, usare sempre IM iniziando a editare una riga-di-comando"
+msgstr "se impostato, usare sempre IM iniziando a editare una\n"
+"riga-di-comando"
 
 msgid "function to obtain IME status"
-msgstr "funzione per sapere se l'IME è disponibile oppure no"
+msgstr "funzione per sapere se IME è disponibile oppure no"
 
 msgid "function to enable/disable IME"
 msgstr "funzione per abilitare/disabilitare IME"
@@ -9584,19 +9670,20 @@ msgid "character encoding for the curren
 msgstr "codifica caratteri per il file corrente"
 
 msgid "automatically detected character encodings"
-msgstr "codifica caratteri determinata automaticamente"
+msgstr "determinare automaticamente codifica caratteri"
 
 msgid "character encoding used by the terminal"
 msgstr "codifica caratteri usata dal terminale"
 
 msgid "expression used for character encoding conversion"
-msgstr "espressione usata per convertire codifica caratteri"
+msgstr "espressione da usare per convertire codifica caratteri"
 
 msgid "delete combining (composing) characters on their own"
-msgstr "cancella caratteri combinati (composti) un byte alla volta"
+msgstr "cancellare caratteri combinati (composti) un byte alla volta"
 
 msgid "maximum number of combining (composing) characters displayed"
-msgstr "numero massimo di caratteri combinati (composti) visualizzati"
+msgstr "numero massimo di caratteri combinati (composti)\n"
+"visualizzati"
 
 msgid "key that activates the X input method"
 msgstr "tasto che attiva il metodo di input X"
@@ -9608,7 +9695,7 @@ msgid "emoji characters are full width"
 msgstr "i caratteri emoji sono a larghezza piena"
 
 msgid "various"
-msgstr "vari"
+msgstr "varie"
 
 msgid ""
 "when to use virtual editing: \"block\", \"insert\", \"all\"\n"
@@ -9624,47 +9711,52 @@ msgid "load plugin scripts when starting
 msgstr "caricare script plugin alla partenza di Vim"
 
 msgid "enable reading .vimrc/.exrc/.gvimrc in the current directory"
-msgstr "consenti lettura di .vimrc/.exrc/.gvimrc dalla directory corrente"
+msgstr "consentire lettura di .vimrc/.exrc/.gvimrc dalla directory\n"
+"corrente"
 
 msgid "safer working with script files in the current directory"
 msgstr ""
-"è più sicuro lavorare con file di script contenuti nella directory corrente"
+"è più sicuro lavorare con file di script contenuti\n"
+"nella directory corrente"
 
 msgid "use the 'g' flag for \":substitute\""
 msgstr "usare il flag 'g' flag con \":substitute\""
 
 msgid "'g' and 'c' flags of \":substitute\" toggle"
-msgstr "attiva/disattiva flag 'g' e 'c' di \":substitute\""
+msgstr "attivare/disattivare flag 'g' e 'c' di \":substitute\""
 
 msgid "allow reading/writing devices"
-msgstr "consenti lettura/scrittura di dispositivi"
+msgstr "consentire lettura/scrittura di dispositivi"
 
 msgid "maximum depth of function calls"
-msgstr "profondità massima delle chiamate a funzione"
+msgstr "profondità massima delle chiamate di funzione"
 
 msgid "list of words that specifies what to put in a session file"
-msgstr "lista di parole che specifica cosa mettere in un file di sessione"
+msgstr "lista di parole per specificare cosa mettere in un\n"
+"file di sessione"
 
 msgid "list of words that specifies what to save for :mkview"
-msgstr "lista di parole che specifica cosa salvare con :mkview"
+msgstr "lista di parole per specificare cosa salvare con :mkview"
 
 msgid "directory where to store files with :mkview"
 msgstr "directory in cui memorizzare file ottenuti con :mkview"
 
 msgid "list that specifies what to write in the viminfo file"
-msgstr "lista che specifica cosa scrivere nel file viminfo"
+msgstr "lista per specificare cosa scrivere nel file viminfo"
 
 msgid "file name used for the viminfo file"
-msgstr "nome del file da usare per contenere le informazioni viminfo"
+msgstr "nome del file da usare per contenere le informazioni\n"
+"viminfo"
 
 msgid "what happens with a buffer when it's no longer in a window"
-msgstr "che fare quando un buffer non è più visibile in alcuna finestra"
+msgstr "che fare quando un buffer non è più visibile in alcuna\n"
+"finestra"
 
 msgid "empty, \"nofile\", \"nowrite\", \"quickfix\", etc.: type of buffer"
 msgstr "vuoto, \"nofile\", \"nowrite\", \"quickfix\", etc.: tipi di buffer"
 
 msgid "whether the buffer shows up in the buffer list"
-msgstr "se il buffer è incluso nella lista dei buffer"
+msgstr "se il buffer va incluso nella lista dei buffer"
 
 msgid "set to \"msg\" to see all error messages"
 msgstr "impostare a \"msg\" per vedere tutti i messaggi di errore"
@@ -9710,5 +9802,4 @@ msgstr "nome della libreria dinamica MzS
 
 msgid "You discovered the command-line window! You can close it with \":q\"."
 msgstr ""
-"Questa è la finestra della riga-di-comando! si può chiudere con \":q\"."
-
+"Questa è la finestra della riga-di-comando! Si può chiudere con \":q\"."
--- a/src/po/tr.po
+++ b/src/po/tr.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Vim Turkish Localization Project\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-04-29 20:31+0300\n"
-"PO-Revision-Date: 2023-04-29 21:00+0300\n"
+"POT-Creation-Date: 2023-08-23 15:34+0300\n"
+"PO-Revision-Date: 2023-08-23 17:00+0300\n"
 "Last-Translator: Emir SARI <emir_sari@icloud.com>\n"
 "Language-Team: Turkish <https://github.com/bitigchi/vim>\n"
 "Language: tr\n"
@@ -60,11 +60,11 @@ msgstr "EÅŸleÅŸen otokomut yok: %s"
 
 #, c-format
 msgid "%s Autocommands for \"%s\""
-msgstr "\"%s\" için %s otokomutlar"
+msgstr "\"%2$s\" için %1$s otokomutları"
 
 #, c-format
 msgid "Executing %s"
-msgstr "%s çalıştırılıyor"
+msgstr "%s yürütülüyor"
 
 #, c-format
 msgid "autocommand %s"
@@ -157,6 +157,22 @@ msgstr "BaÅŸ"
 msgid "%d%%"
 msgstr "%%%d"
 
+#, c-format
+msgid " (%d of %d)"
+msgstr " (%d/%d)"
+
+#, c-format
+msgid " ((%d) of %d)"
+msgstr " ((%d)/%d)"
+
+#, c-format
+msgid " (file %d of %d)"
+msgstr " (dosya %d/%d)"
+
+#, c-format
+msgid " (file (%d) of %d)"
+msgstr " (dosya (%d)/%d)"
+
 msgid "[Prompt]"
 msgstr "[Ä°stem]"
 
@@ -226,7 +242,7 @@ msgid ": Send failed.\n"
 msgstr ": Gönderme başarısız oldu.\n"
 
 msgid ": Send failed. Trying to execute locally\n"
-msgstr ": Gönderme başarısız oldu. Yerel ortamda çalıştırma deneniyor\n"
+msgstr ": Gönderme başarısız oldu. Yerel ortamda yürütme deneniyor\n"
 
 #, c-format
 msgid "%d of %d edited"
@@ -273,18 +289,19 @@ msgstr "[ÅŸifreli]"
 
 #, c-format
 msgid "xchacha20v2: using custom opslimit \"%llu\" for Key derivation."
-msgstr "xchacha20v2: Anahtar türetimi için özel işlem sınırı \"%llu\" "
-"kullanılıyor"
+msgstr ""
+"xchacha20v2: Anahtar türetimi için özel işlem sınırı \"%llu\" kullanılıyor"
 
 #, c-format
 msgid "xchacha20v2: using default opslimit \"%llu\" for Key derivation."
-msgstr "xchacha20v2: Anahtar türetimi için öntanımlı işlem sınırı \"%llu\" "
+msgstr ""
+"xchacha20v2: Anahtar türetimi için öntanımlı işlem sınırı \"%llu\" "
 "kullanılıyor"
 
 #, c-format
 msgid "xchacha20v2: using custom memlimit \"%lu\" for Key derivation."
-msgstr "xchacha20v2: Anahtar türetimi için özel bellek sınırı \"%lu\" "
-"kullanılıyor"
+msgstr ""
+"xchacha20v2: Anahtar türetimi için özel bellek sınırı \"%lu\" kullanılıyor"
 
 #, c-format
 msgid "xchacha20v2: using default memlimit \"%lu\" for Key derivation."
@@ -297,8 +314,8 @@ msgstr "xchacha20v2: Anahtar türetimi için özel algoritma \"%d\" kullanılıyor"
 
 #, c-format
 msgid "xchacha20v2: using default algorithm \"%d\" for Key derivation."
-msgstr "xchacha20v2: Anahtar türetimi için öntanımlı algoritma \"%d\" "
-"kullanılıyor"
+msgstr ""
+"xchacha20v2: Anahtar türetimi için öntanımlı algoritma \"%d\" kullanılıyor"
 
 msgid "Entering Debug mode.  Type \"cont\" to continue."
 msgstr "Hata ayıklama kipine giriliyor. Sürdürmek için \"cont\" yazın."
@@ -532,26 +549,26 @@ msgstr "(Yarıda kesildi) "
 #, c-format
 msgid "%ld match on %ld line"
 msgid_plural "%ld matches on %ld line"
-msgstr[0] "%ld eşleşme, %ld satırda"
-msgstr[1] "%ld eşleşme, %ld satırda"
+msgstr[0] "%2$ld satırda %1$ld eşleşme"
+msgstr[1] "%2$ld satırda %1$ld eşleşme"
 
 #, c-format
 msgid "%ld substitution on %ld line"
 msgid_plural "%ld substitutions on %ld line"
-msgstr[0] "%ld değiştirme, %ld satırda"
-msgstr[1] "%ld değiştirme, %ld satırda"
+msgstr[0] "%2$ld satırda %1$ld değişiklik"
+msgstr[1] "%2$ld satırda %1$ld değişiklik"
 
 #, c-format
 msgid "%ld match on %ld lines"
 msgid_plural "%ld matches on %ld lines"
-msgstr[0] "%ld eşleşme, %ld satırda"
-msgstr[1] "%ld eşleşme, %ld satırda"
+msgstr[0] "%2$ld satırda %1$ld eşleşme"
+msgstr[1] "%2$ld satırda %1$ld eşleşme"
 
 #, c-format
 msgid "%ld substitution on %ld lines"
 msgid_plural "%ld substitutions on %ld lines"
-msgstr[0] "%ld değiştirme, %ld satırda"
-msgstr[1] "%ld değiştirme, %ld satırda"
+msgstr[0] "%2$ld satırda %1$ld değişiklik"
+msgstr[1] "%2$ld satırda %1$ld değişiklik"
 
 #, c-format
 msgid "Pattern found in every line: %s"
@@ -595,12 +612,6 @@ msgstr "Ä°ÅŸlevin sonu"
 msgid "Backwards range given, OK to swap"
 msgstr "Geriye dönük erim verildi, takas edilebilir"
 
-msgid ""
-"INTERNAL: Cannot use EX_DFLALL with ADDR_NONE, ADDR_UNSIGNED or ADDR_QUICKFIX"
-msgstr ""
-"DAHÄ°LÄ°: EX_DFLALL; ADDR_NONE, ADDR_UNSIGNED veya ADDR_QUICKFIX ile birlikte "
-"kullanılamaz"
-
 #, c-format
 msgid "%d more file to edit.  Quit anyway?"
 msgid_plural "%d more files to edit.  Quit anyway?"
@@ -1427,7 +1438,7 @@ msgstr "reverse() argümanı"
 
 #, c-format
 msgid "Current %slanguage: \"%s\""
-msgstr "Åžu anki %sdil: \"%s\""
+msgstr "Geçerli %sdil: \"%s\""
 
 msgid "Unknown option argument"
 msgstr "Bilinmeyen seçenek argümanı"
@@ -2306,7 +2317,7 @@ msgstr "Bip!"
 
 #, c-format
 msgid "Calling shell to execute: \"%s\""
-msgstr "Çalıştırmak için çağrılan kabuk: \"%s\""
+msgstr "Kabuk, yürütme için çağrılıyor: \"%s\""
 
 msgid "Warning: terminal cannot highlight"
 msgstr "Uyarı: Uçbirim vurgulama yapamıyor"
@@ -2407,10 +2418,6 @@ msgstr ""
 "\n"
 "--- Seçenekler ---"
 
-#, c-format
-msgid "For option %s"
-msgstr "%s seçeneği için"
-
 msgid "cannot open "
 msgstr "Açılamıyor: "
 
@@ -2441,13 +2448,13 @@ msgid "mch_get_shellsize: not a console?
 msgstr "mch_get_shellsize: Bir konsol deÄŸil??\n"
 
 msgid "Cannot execute "
-msgstr "Çalıştırılamıyor: "
+msgstr "Yürütülemiyor: "
 
 msgid "shell "
 msgstr "kabuk "
 
 msgid " returned\n"
-msgstr " döndürüldü\n"
+msgstr " döndürdü\n"
 
 msgid "ANCHOR_BUF_SIZE too small."
 msgstr "ANCHOR_BUF_SIZE pek küçük."
@@ -2514,7 +2521,7 @@ msgid ""
 "Cannot execute shell sh\n"
 msgstr ""
 "\n"
-"sh kabuğu çalıştırılamıyor\n"
+"sh kabuğu yürütülemiyor\n"
 
 msgid ""
 "\n"
@@ -2542,7 +2549,7 @@ msgid ""
 "Cannot execute shell "
 msgstr ""
 "\n"
-"Kabuk çalıştırılamıyor "
+"Kabuk yürütülemiyor "
 
 msgid ""
 "\n"
@@ -2719,8 +2726,12 @@ msgid "recording"
 msgstr "kaydediliyor"
 
 #, c-format
+msgid "Searching for \"%s\" under \"%s\" in \"%s\""
+msgstr "\"%3$s\" içinde \"%2$s\" altında \"%1$s\" aranıyor"
+
+#, c-format
 msgid "Searching for \"%s\" in \"%s\""
-msgstr "\"%s\", \"%s\" içinde aranıyor"
+msgstr "\"%2$s\" içinde \"%1$s\" aranıyor"
 
 #, c-format
 msgid "Searching for \"%s\""
@@ -3029,7 +3040,7 @@ msgstr "%s içinde %d. satırdaki ilk yinelenen sözcük: %s"
 
 #, c-format
 msgid "%d duplicate word(s) in %s"
-msgstr "%d yinelenen sözcük, %s içinde"
+msgstr "%2$s içinde %1$d yinelenen sözcük"
 
 #, c-format
 msgid "Ignored %d word(s) with non-ASCII characters in %s"
@@ -3114,7 +3125,7 @@ msgstr "Yapıldı!"
 
 #, c-format
 msgid "Word '%.*s' removed from %s"
-msgstr "'%.*s' sözcüğü %s içinden çıkartıldı"
+msgstr "'%.*s' sözcüğü %s içinden çıkarıldı"
 
 msgid "Seek error in spellfile"
 msgstr "Yazım dosyasında arama hatası"
@@ -3954,9 +3965,6 @@ msgid "E37: No write since last change (
 msgstr ""
 "E37: Son değişiklikten sonra yazılmadı (geçersiz kılmak için ! ekleyin)"
 
-msgid "E38: Null argument"
-msgstr "E38: Anlamsız argüman"
-
 msgid "E39: Number expected"
 msgstr "E39: Sayı bekleniyordu"
 
@@ -3970,12 +3978,6 @@ msgstr "E41: Bellek yetersiz!"
 msgid "E42: No Errors"
 msgstr "E42: Hata yok"
 
-msgid "E43: Damaged match string"
-msgstr "E43: Hasarlı eşleşme dizisi"
-
-msgid "E44: Corrupted regexp program"
-msgstr "E44: Bozulmuş regexp programı"
-
 msgid "E45: 'readonly' option is set (add ! to override)"
 msgstr "E45: 'readonly' seçeneği ayarlanmış (geçersiz kılmak için ! ekleyin)"
 
@@ -4417,11 +4419,9 @@ msgstr "E172: Ä°mleyici eksik"
 
 #, c-format
 msgid "E173: %d more file to edit"
-msgstr "E173: Düzenlenecek %d dosya daha var"
-
-#, c-format
-msgid "E173: %d more files to edit"
-msgstr "E173: Düzenlenecek %d dosya daha var"
+msgid_plural "E173: %d more files to edit"
+msgstr[0] "E173: Düzenlenecek %d dosya daha var"
+msgstr[1] "E173: Düzenlenecek %d dosya daha var"
 
 #, c-format
 msgid "E174: Command already exists: add ! to replace it: %s"
@@ -4574,7 +4574,7 @@ msgid "E216: No such group or event: %s"
 msgstr "E216: Böyle bir grup veya olay yok: %s"
 
 msgid "E217: Can't execute autocommands for ALL events"
-msgstr "E217: Otokomutlar TÜM olaylar için çalıştırılamıyor"
+msgstr "E217: Otokomutlar TÜM olaylar için yürütülemiyor"
 
 msgid "E218: Autocommand nesting too deep"
 msgstr "E218: Pek çok iç içe geçmiş otokomut"
@@ -4588,9 +4588,6 @@ msgstr "E220: } eksik."
 msgid "E221: Marker cannot start with lower case letter"
 msgstr "E221: İmleyici küçük harfle başlayamaz"
 
-msgid "E222: Add to internal buffer that was already read from"
-msgstr "E222: Halihazırda kendisinden okunmuş içsel arabelleğe ekle"
-
 msgid "E223: Recursive mapping"
 msgstr "E223: Özyineli eşlemleme"
 
@@ -4610,9 +4607,6 @@ msgstr "E226: %s için kısaltma hâlihazırda var"
 msgid "E227: Mapping already exists for %s"
 msgstr "E227: %s için eşlemleme hâlihazırda var"
 
-msgid "E228: makemap: Illegal mode"
-msgstr "E228: makemap: Ä°zin verilmeyen kip"
-
 msgid "E229: Cannot start the GUI"
 msgstr "E229: Grafik arabirimi başlatılamıyor"
 
@@ -4623,9 +4617,6 @@ msgstr "E230: \"%s\" okunamıyor"
 msgid "E231: 'guifontwide' invalid"
 msgstr "E231: 'guifontwide' geçersiz"
 
-msgid "E232: Cannot create BalloonEval with both message and callback"
-msgstr "E232: Hem ileti hem de geri çağırma ile BallonEval oluşturulamıyor"
-
 msgid "E233: Cannot open display"
 msgstr "E233: Ekran açılamıyor"
 
@@ -4785,13 +4776,6 @@ msgstr "E277: Bir sunucu yanıtı okunamadı"
 msgid "E279: Sorry, ++shell is not supported on this system"
 msgstr "E279: Üzgünüm, ++shell bu sistemde desteklenmiyor"
 
-msgid ""
-"E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim."
-"org"
-msgstr ""
-"E280: ONULMAZ TCL HATASI: Başvuru listesi hasar görmüş! Lütfen bunu vim-"
-"dev@vim.org adresine raporlayın"
-
 #, c-format
 msgid "E282: Cannot read from \"%s\""
 msgstr "E282: Şuradan okunamıyor: \"%s\""
@@ -4821,13 +4805,6 @@ msgstr "E289: Giriş yöntemi benim ön düzenleme türümü desteklemiyor"
 msgid "E290: List or number required"
 msgstr "E290: Liste veya numara gerekiyor"
 
-#, c-format
-msgid "E292: Invalid count for del_bytes(): %ld"
-msgstr "E292: del_bytes() için geçersiz sayım: %ld"
-
-msgid "E293: Block was not locked"
-msgstr "E293: Blok kilitlenmemiÅŸti"
-
 msgid "E294: Seek error in swap file read"
 msgstr "E294: Takas dosyası okumasında arama hatası"
 
@@ -4840,15 +4817,6 @@ msgstr "E296: Takas dosyası yazmasında arama hatası"
 msgid "E297: Write error in swap file"
 msgstr "E297: Takas dosyasında yazma hatası"
 
-msgid "E298: Didn't get block nr 0?"
-msgstr "E298: 0 numaralı blok alınmadı mı?"
-
-msgid "E298: Didn't get block nr 1?"
-msgstr "E298: 1 numaralı blok alınmadı mı?"
-
-msgid "E298: Didn't get block nr 2?"
-msgstr "E298: 2 numaralı blok alınmadı mı?"
-
 msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
 msgstr ""
 "E299: Güvenli modül olmadan kum havuzu içinde Perl değerlendirmesine izin "
@@ -4867,9 +4835,6 @@ msgstr "E302: Takas dosyası adı değiştirilemedi"
 msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
 msgstr "E303: \"%s\" için takas dosyası açılamadı, artık kurtarma yapılamaz"
 
-msgid "E304: ml_upd_block0(): Didn't get block 0??"
-msgstr "E304: ml_upd_block(): 0 numaralı blok alınmadı mı?"
-
 #, c-format
 msgid "E305: No swap file found for %s"
 msgstr "E305: %s için takas dosyası bulunamadı"
@@ -4907,48 +4872,13 @@ msgstr "E313: Korunamıyor, bir takas dosyası yok"
 msgid "E314: Preserve failed"
 msgstr "E314: Koruma başarısız oldu"
 
-#, c-format
-msgid "E315: ml_get: Invalid lnum: %ld"
-msgstr "E315: ml_get: geçersiz satır numarası: %ld"
-
-#, c-format
-msgid "E316: ml_get: Cannot find line %ld in buffer %d %s"
-msgstr "E316: ml_get: %ld. satır %d %s arabelleğinde bulunamıyor"
-
-msgid "E317: Pointer block id wrong"
-msgstr "E317: Gösterge blok kimliği yanlış"
-
-msgid "E317: Pointer block id wrong 2"
-msgstr "E317: Blok 2 gösterge kimliği yanlış"
-
-msgid "E317: Pointer block id wrong 3"
-msgstr "E317: Blok 3 gösterge kimliği yanlış"
-
-msgid "E317: Pointer block id wrong 4"
-msgstr "E317: Blok 4 gösterge kimliği yanlış"
-
-msgid "E318: Updated too many blocks?"
-msgstr "E318: Pek çok blok mu güncellendi?"
-
 msgid "E319: Sorry, the command is not available in this version"
 msgstr "E319: Üzgünüm, komut bu sürümde mevcut değil"
 
 #, c-format
-msgid "E320: Cannot find line %ld"
-msgstr "E320: %ld. satır bulunamıyor"
-
-#, c-format
 msgid "E321: Could not reload \"%s\""
 msgstr "E321: \"%s\" yeniden yüklenemedi"
 
-#, c-format
-msgid "E322: Line number out of range: %ld past the end"
-msgstr "E322: Satır numarası erimin dışında: %ld en sonuncuyu geçmiş"
-
-#, c-format
-msgid "E323: Line count wrong in block %ld"
-msgstr "E323: %ld. blokta satır sayısı yanlış"
-
 msgid "E324: Can't open PostScript output file"
 msgstr "E324: PostScript çıktı dosyası açılamıyor"
 
@@ -5000,8 +4930,9 @@ msgstr "E338: Üzgünüm, konsol kipinde dosya tarayıcı yoktur"
 msgid "E339: Pattern too long"
 msgstr "E339: Dizgi pek uzun"
 
-msgid "E341: Internal error: lalloc(0, )"
-msgstr "E341: İç hata: lalloc(0, )"
+msgid "E340: Internal error; if you can reproduce please report a bug"
+msgstr ""
+"E340: İçsel hata; bunu yeniden oluşturabiliyorsanız lütfen bir hata bildirin"
 
 #, c-format
 msgid "E342: Out of memory!  (allocating %lu bytes)"
@@ -5038,17 +4969,17 @@ msgid "E349: No identifier under cursor"
 msgstr "E349: İmleç altında bir tanımlayıcı yok"
 
 msgid "E350: Cannot create fold with current 'foldmethod'"
-msgstr "E350: Şu anki 'foldmethod' ile kıvırma oluşturulamıyor"
+msgstr "E350: Geçerli 'foldmethod' ile kıvırma oluşturulamıyor"
 
 msgid "E351: Cannot delete fold with current 'foldmethod'"
-msgstr "E351: Şu anki 'foldmethod' ile kıvırma silinemiyor"
+msgstr "E351: Geçerli 'foldmethod' ile kıvırma silinemiyor"
 
 msgid "E352: Cannot erase folds with current 'foldmethod'"
-msgstr "E352: Şu anki 'foldmethod' ile kıvırmalar silinemiyor"
+msgstr "E352: Geçerli 'foldmethod' ile kıvırmalar silinemiyor"
 
 #, c-format
 msgid "E353: Nothing in register %s"
-msgstr "E353: Yazmaç %s boş"
+msgstr "E353: %s yazmacında bir şey yok"
 
 #, c-format
 msgid "E354: Invalid register name: '%s'"
@@ -5058,9 +4989,6 @@ msgstr "E354: Geçersiz yazmaç adı: '%s'"
 msgid "E355: Unknown option: %s"
 msgstr "E355: Bilinmeyen seçenek: %s"
 
-msgid "E356: get_varp ERROR"
-msgstr "E356: get_varp HATASI"
-
 #, c-format
 msgid "E357: 'langmap': Matching character missing for %s"
 msgstr "E357: 'langmap': %s için eşleşen karakter eksik"
@@ -5073,13 +5001,13 @@ msgid "E359: Screen mode setting not sup
 msgstr "E359: Ekran kipi ayarı desteklenmiyor"
 
 msgid "E360: Cannot execute shell with -f option"
-msgstr "E360: Kabuk -f seçeneği ile çalıştırılamıyor"
+msgstr "E360: Kabuk -f seçeneği ile yürütülemiyor"
 
 msgid "E362: Using a boolean value as a Float"
 msgstr "E362: Bir Boole, kayan noktalı değer olarak kullanılıyor"
 
 msgid "E363: Pattern uses more memory than 'maxmempattern'"
-msgstr "E363: Dizgi 'maxmempattern' ögesinden daha fazla bellek kullanıyor"
+msgstr "E363: Dizgi, 'maxmempattern'dan daha çok bellek kullanıyor"
 
 #, c-format
 msgid "E364: Library call failed for \"%s()\""
@@ -5278,6 +5206,9 @@ msgstr "E417: Argüman eksik: %s"
 msgid "E418: Illegal value: %s"
 msgstr "E418: Ä°zin verilmeyen deÄŸer: %s"
 
+msgid "E418: I'm a teapot"
+msgstr "E418: Ben bir çaydanlığım"
+
 msgid "E419: FG color unknown"
 msgstr "E419: Bilinmeyen metin rengi"
 
@@ -5344,15 +5275,6 @@ msgstr "E436: termcap içinde \"%s\" girdisi yok"
 msgid "E437: Terminal capability \"cm\" required"
 msgstr "E437: \"cm\" uçbirim yeteneği gerekiyor"
 
-msgid "E438: u_undo: Line numbers wrong"
-msgstr "E438: u_undo: Satır numaraları yanlış"
-
-msgid "E439: Undo list corrupt"
-msgstr "E439: Geri al listesi hasarlı"
-
-msgid "E440: Undo line missing"
-msgstr "E440: Geri al satırı eksik"
-
 msgid "E441: There is no preview window"
 msgstr "E441: Önizleme penceresi yok"
 
@@ -5465,9 +5387,6 @@ msgstr "E471: DeÄŸiÅŸken gerekiyor"
 msgid "E472: Command failed"
 msgstr "E472: Komut başarısız oldu"
 
-msgid "E473: Internal error in regexp"
-msgstr "E473: regexp içinde içsel hata"
-
 msgid "E474: Invalid argument"
 msgstr "E474: Geçersiz argüman"
 
@@ -5595,6 +5514,9 @@ msgstr "bir dosya veya yazılabilir aygıt değil"
 msgid "E503: \"%s\" is not a file or writable device"
 msgstr "E503: \"%s\", bir dosya veya yazılabilir aygıt değil"
 
+msgid "E503: Coffee is currently not available"
+msgstr "E503: Coffee şu anda kullanılamıyor"
+
 msgid "is read-only (cannot override: \"W\" in 'cpoptions')"
 msgstr "saltokunur (geçersiz kılınamıyor: 'cpoptions' içinde \"W\")"
 
@@ -5815,9 +5737,6 @@ msgstr "E567: cscope bağlantıları yok"
 msgid "E568: Duplicate cscope database not added"
 msgstr "E568: Yinelenen cscope veritabanı eklenmemiş"
 
-msgid "E570: Fatal error in cs_manage_matches"
-msgstr "E570: cs_manage_matches içinde onulmaz hata"
-
 msgid ""
 "E571: Sorry, this command is disabled: the Tcl library could not be loaded."
 msgstr "E571: Üzgünüm, bu komut etkin değil: Tcl kitaplığı yüklenemedi."
@@ -5996,6 +5915,14 @@ msgid "E626: Cannot get cscope database 
 msgstr "E626: cscope veritabanı bilgisi alınamıyor"
 
 #, c-format
+msgid "E627: Missing colon: %s"
+msgstr "E627: Ä°ki nokta eksik: %s"
+
+#, c-format
+msgid "E628: Missing ! or / in: %s"
+msgstr "E628: Åžurada ! veya / eksik: %s"
+
+#, c-format
 msgid "E630: %s(): Write while not connected"
 msgstr "E630: %s(): Bağlantı yokken yazım"
 
@@ -6003,6 +5930,70 @@ msgstr "E630: %s(): Bağlantı yokken yazım"
 msgid "E631: %s(): Write failed"
 msgstr "E631: %s(): Yazma başarısız"
 
+msgid "E632: Invalid buffer identifier in getLength"
+msgstr "E632: getLength'te geçersiz arabellek tanımlayıcısı"
+
+msgid "E633: Invalid buffer identifier in getText"
+msgstr "E633: getText'te geçersiz arabellek tanımlayıcısı"
+
+msgid "E634: Invalid buffer identifier in remove"
+msgstr "E634: remove'da geçersiz arabellek tanımlayıcısı"
+
+msgid "E635: Invalid buffer identifier in insert"
+msgstr "E635: insert'te geçersiz arabellek tanımlayıcısı"
+
+msgid "E636: Invalid buffer identifier in create"
+msgstr "E636: create'de geçersiz arabellek tanımlayıcısı"
+
+msgid "E637: Invalid buffer identifier in startDocumentListen"
+msgstr "E637: startDocumentListen'da geçersiz arabellek tanımlayıcısı"
+
+msgid "E638: Invalid buffer identifier in stopDocumentListen"
+msgstr "E638: stopDocumentListen'da geçersiz arabellek tanımlayıcısı"
+
+msgid "E639: Invalid buffer identifier in setTitle"
+msgstr "E639: setTitle'da geçersiz arabellek tanımlayıcısı"
+
+msgid "E640: Invalid buffer identifier in initDone"
+msgstr "E640: initDone'da geçersiz arabellek tanımlayıcısı"
+
+msgid "E641: Invalid buffer identifier in setBufferNumber"
+msgstr "E641: setBufferNumber'da geçersiz arabellek tanımlayıcısı"
+
+#, c-format
+msgid "E642: File %s not found in setBufferNumber"
+msgstr "E642: setBufferNumber'da %s dosyası bulunamadı"
+
+msgid "E643: Invalid buffer identifier in setFullName"
+msgstr "E643: setFullName'de geçersiz arabellek tanımlayıcısı"
+
+msgid "E644: Invalid buffer identifier in editFile"
+msgstr "E644: editFile'da geçersiz arabellek tanımlayıcısı"
+
+msgid "E645: Invalid buffer identifier in setVisible"
+msgstr "E645: setVisible'da geçersiz arabellek tanımlayıcısı"
+
+msgid "E646: Invalid buffer identifier in setModified"
+msgstr "E646: setModified'da geçersiz arabellek tanımlayıcısı"
+
+msgid "E647: Invalid buffer identifier in setDot"
+msgstr "E647: setDot'ta geçersiz arabellek tanımlayıcısı"
+
+msgid "E648: Invalid buffer identifier in close"
+msgstr "E648: close'da geçersiz arabellek tanımlayıcısı"
+
+msgid "E649: Invalid buffer identifier in close"
+msgstr "E649: close'da geçersiz arabellek tanımlayıcısı"
+
+msgid "E650: Invalid buffer identifier in defineAnnoType"
+msgstr "E650: defineAnnoType'da geçersiz arabellek tanımlayıcısı"
+
+msgid "E651: Invalid buffer identifier in addAnno"
+msgstr "E651: addAnno'da geçersiz arabellek tanımlayıcısı"
+
+msgid "E652: Invalid buffer identifier in getAnno"
+msgstr "E652: getAnno'da geçersiz arabellek tanımlayıcısı"
+
 #, c-format
 msgid "E654: Missing delimiter after search pattern: %s"
 msgstr "E654: Arama dizgisi sonrası eksik sınırlandırıcı: %s"
@@ -6174,6 +6165,10 @@ msgid "E705: Variable name conflicts wit
 msgstr "E705: Değişken adı mevcut işlevle çakışıyor: %s"
 
 #, c-format
+msgid "E706: Argument of %s must be a List, String or Dictionary"
+msgstr "E706: %s ögesinin argümanı bir liste, dizi veya sözlük olmalıdır"
+
+#, c-format
 msgid "E707: Function name conflicts with variable: %s"
 msgstr "E707: İşlev adı şu değişken ile çakışıyor: %s"
 
@@ -6611,9 +6606,6 @@ msgstr "E829: Geri al dosyasında yazma hatası: %s"
 msgid "E830: Undo number %ld not found"
 msgstr "E830: %ld numaralı geri alma bulunamadı"
 
-msgid "E831: bf_key_init() called with empty password"
-msgstr "E831: bf_key_init() boş bir şifre ile çağrıldı"
-
 #, c-format
 msgid "E832: Non-encrypted file has encrypted undo file: %s"
 msgstr "E832: Şifrelenmemiş dosyanın şifrelenmiş bir geri al dosyası var: %s"
@@ -6630,10 +6622,10 @@ msgid "E835: Conflicts with value of 'fi
 msgstr "E835: 'fillchars' değeriyle çakışmalar var"
 
 msgid "E836: This Vim cannot execute :python after using :py3"
-msgstr "E836: Bu Vim :py3 komutundan sonra :python komutunu çalıştıramaz"
+msgstr "E836: Bu Vim :py3 komutundan sonra :python komutunu yürütemez"
 
 msgid "E837: This Vim cannot execute :py3 after using :python"
-msgstr "E837: Bu Vim :python komutundan sonra :py3 komutunu çalıştıramaz"
+msgstr "E837: Bu Vim :python komutundan sonra :py3 komutunu yürütemez"
 
 msgid "E838: NetBeans is not supported with this GUI"
 msgstr "E838: NetBeans bu grafik arabirimde desteklenmiyor"
@@ -6759,7 +6751,7 @@ msgid "E873: (NFA regexp) proper termina
 msgstr "E873: (BSO düzenli ifadesi) Düzgün sonlandırma hatası"
 
 msgid "E874: (NFA regexp) Could not pop the stack!"
-msgstr "E874: (BSO düzenli ifadesi) Yığın çıkartılamadı!"
+msgstr "E874: (BSO düzenli ifadesi) Yığın çıkarılamadı!"
 
 msgid ""
 "E875: (NFA regexp) (While converting from postfix to NFA), too many states "
@@ -6771,10 +6763,6 @@ msgstr ""
 msgid "E876: (NFA regexp) Not enough space to store the whole NFA"
 msgstr "E876: (BSO düzenli ifadesi) Tüm BSO'yu depolamak için yeterli alan yok"
 
-#, c-format
-msgid "E877: (NFA regexp) Invalid character class: %d"
-msgstr "E877: (BSO düzenli ifadesi) Geçersiz karakter sınıfı: %d"
-
 msgid "E878: (NFA regexp) Could not allocate memory for branch traversal!"
 msgstr "E878: (BSO düzenli ifadesi) Dal gezinmesi için bellek ayrılamadı!"
 
@@ -7005,10 +6993,6 @@ msgstr "E941: Sunucu hâlihazırda çalışıyor"
 msgid "E942: +clientserver feature not available"
 msgstr "E942: +clientserver özelliği mevcut değil"
 
-msgid "E943: Command table needs to be updated, run 'make cmdidxs'"
-msgstr ""
-"E943: Komut tablosunun güncellenmesi gerekiyor, 'make cmdidxs' çalıştırın"
-
 msgid "E944: Reverse range in character class"
 msgstr "E944: Karakter sınıfında geriye dönük erim"
 
@@ -7089,9 +7073,6 @@ msgstr "E965: Özellik tür adı eksik"
 msgid "E966: Invalid line number: %ld"
 msgstr "E966: Geçersiz satır numarası: %ld"
 
-msgid "E967: Text property info corrupted"
-msgstr "E967: Metin özellik bilgisi hasarlı"
-
 msgid "E968: Need at least one of 'id' or 'type'"
 msgstr "E968: En azından bir 'id' veya 'type' gerekli"
 
@@ -7162,7 +7143,7 @@ msgid "E987: Invalid return value from t
 msgstr "E987: Etiket işlevinden geçersiz dönüş değeri"
 
 msgid "E988: GUI cannot be used. Cannot execute gvim.exe."
-msgstr "E988: Grafik arabirim kullanılamaz. gvim.exe çalıştırılamadı."
+msgstr "E988: Grafik arabirim kullanılamaz. gvim.exe yürütülemiyor."
 
 msgid "E989: Non-default argument follows default argument"
 msgstr "E989: Öntanımlı olmayan argüman öntanımlı argümandan sonra"
@@ -7547,8 +7528,9 @@ msgstr "E1093: %d öge bekleniyordu; ancak %d alındı"
 msgid "E1094: Import can only be used in a script"
 msgstr "E1094: İçe aktarım yalnızca bir betikte kullanılabilir"
 
-msgid "E1095: Unreachable code after :return"
-msgstr "E1095: :return sonrası ulaşılamayan kod"
+#, c-format
+msgid "E1095: Unreachable code after :%s"
+msgstr "E1095: :%s sonrası ulaşılamayan kod"
 
 msgid "E1096: Returning a value in a function without a return type"
 msgstr "E1096: Dönüş türü olmayan bir işlevde bir değer döndürülüyor"
@@ -7585,12 +7567,11 @@ msgstr "E1104: > eksik"
 msgid "E1105: Cannot convert %s to string"
 msgstr "E1105: %s, bir diziye dönüştürülemiyor"
 
+#, c-format
 msgid "E1106: One argument too many"
-msgstr "E1106: Bir argüman fazladan"
-
-#, c-format
-msgid "E1106: %d arguments too many"
-msgstr "E1106: %d argüman fazladan"
+msgid_plural "E1106: %d arguments too many"
+msgstr[0] "E1106: Bir argüman fazladan"
+msgstr[1] "E1106: %d argüman fazladan"
 
 msgid "E1107: String, List, Dict or Blob required"
 msgstr "E1107: Dizi, Liste, Sözlük veya İkili Nesne gerekiyor"
@@ -7688,10 +7669,6 @@ msgstr "E1135: Bir dizi, bir Boole olarak kullanılıyor: \"%s\""
 msgid "E1136: <Cmd> mapping must end with <CR> before second <Cmd>"
 msgstr "E1136: <Cmd> eşlemlemesi ikinci <Cmd>'den önce <CR> ile bitmelidir"
 
-#, c-format
-msgid "E1137: <Cmd> mapping must not include %s key"
-msgstr "E1137: <Cmd> eşlemlemesi %s anahtarını içermemelidir"
-
 msgid "E1138: Using a Bool as a Number"
 msgstr "E1138: Bir Boole, bir sayı olarak kullanılıyor"
 
@@ -7884,12 +7861,11 @@ msgstr "E1188: Komut satırı penceresinden bir uçbirim açılamıyor"
 msgid "E1189: Cannot use :legacy with this command: %s"
 msgstr "E1189: :legacy, bu komut ile kullanılamıyor: %s"
 
+#, c-format
 msgid "E1190: One argument too few"
-msgstr "E1190: Bir argüman daha gerekiyor"
-
-#, c-format
-msgid "E1190: %d arguments too few"
-msgstr "E1190: %d argüman daha gerekiyor"
+msgid_plural "E1190: %d arguments too few"
+msgstr[0] "E1190: Bir argüman daha gerekiyor"
+msgstr[1] "E1190: %d argüman daha gerekiyor"
 
 #, c-format
 msgid "E1191: Call to function that failed to compile: %s"
@@ -8417,9 +8393,6 @@ msgstr "E1334: Nesne üyesi bulunamadı: %s"
 msgid "E1335: Member is not writable: %s"
 msgstr "E1335: Üye yazılabilir değil: %s"
 
-msgid "E1336: Internal error: shortmess too long"
-msgstr "E1336: İçsel hata: Kısalık pek uzun"
-
 #, c-format
 msgid "E1337: Class member not found: %s"
 msgstr "E1337: Sınıf üyesi bulunamadı: %s"
@@ -8432,7 +8405,8 @@ msgid ""
 "E1339: Cannot add a textprop with text after using a textprop with a "
 "negative id"
 msgstr ""
-"E1339: Negatif kimlikli bir textprop kullandıktan sonra metin içeren bir textprop eklenemiyor"
+"E1339: Negatif kimlikli bir textprop kullandıktan sonra metin içeren bir "
+"textprop eklenemiyor"
 
 #, c-format
 msgid "E1340: Argument already declared in the class: %s"
@@ -8466,11 +8440,11 @@ msgstr "E1347: Geçerli bir arayüz değil: %s"
 
 #, c-format
 msgid "E1348: Member \"%s\" of interface \"%s\" not implemented"
-msgstr "E1348: Şu arayüzün \"%s\" üyesi ilklendirilemiyor: \"%s\""
+msgstr "E1348: \"%2$\" arayüzünün \"%1$s\" üyesi ilklendirilemiyor"
 
 #, c-format
 msgid "E1349: Function \"%s\" of interface \"%s\" not implemented"
-msgstr "E1349: Şu arayüzün \"%s\" işlevi gerçeklenmemiş: \"%s\""
+msgstr "E1349: \"%2$\" arayüzünün \"%1$s\" işlevi gerçeklenmemiş"
 
 msgid "E1350: Duplicate \"implements\""
 msgstr "E1350: Yinelenen \"implements\""
@@ -8521,9 +8495,81 @@ msgstr "E1363: Tam olmayan tür"
 msgid "E1364: Warning: Pointer block corrupted"
 msgstr "E1364: Uyarı: İşaretçi bloku hasar görmüş"
 
+msgid "E1365: Cannot use a return type with the \"new\" function"
+msgstr "E1365: \"new\" işleviyle bir dönüş türü kullanılamıyor"
+
+#, c-format
+msgid "E1400: Cannot mix positional and non-positional arguments: %s"
+msgstr "E1400: Konumsal ve konumsal olmayan argümanlar karıştırılamıyor: %s"
+
+#, c-format
+msgid "E1401: format argument %d unused in $-style format: %s"
+msgstr "E1401: Biçim argümanı %d, $-tarzı biçimde kullanılmıyor: %s"
+
+#, c-format
+msgid ""
+"E1402: Positional argument %d used as field width reused as different type: "
+"%s/%s"
+msgstr ""
+"E1402: Konumsal argüman %d, başka türle yeniden kullanılan alan olarak "
+"kullanılıyor: %s/%s"
+
+#, c-format
+msgid "E1403: Positional argument %d out of bounds: %s"
+msgstr "E1403: Konumsal argüman %d, sınırlar dışında: %s"
+
+#, c-format
+msgid "E1404: Positional argument %d type used inconsistently: %s/%s"
+msgstr "E1404: Konumsal argüman %d türü tutarsız olarak kullanıldı: %s/%s"
+
+#, c-format
+msgid "E1405: Invalid format specifier: %s"
+msgstr "E1405: Geçersiz biçim belirteci: %s"
+
+#, c-format
+msgid "E1406: Member \"%s\": type mismatch, expected %s but got %s"
+msgstr "E1406: \"%s\" üyesi türü uyumsuzluğu, %s bekleniyordu; ancak %s alındı"
+
+#, c-format
+msgid "E1407: Member \"%s\": type mismatch, expected %s but got %s"
+msgstr "E1407: \"%s\" üyesi türü uyumsuzluğu, %s bekleniyordu; ancak %s alındı"
+
 msgid "--No lines in buffer--"
 msgstr "--Arabellek içinde satır yok--"
 
+msgid "int"
+msgstr "tamsayı"
+
+msgid "long int"
+msgstr "uzun tamsayı"
+
+msgid "long long int"
+msgstr "uzun uzun tamsayı"
+
+msgid "unsigned int"
+msgstr "imzalanmamış tamsayı"
+
+msgid "unsigned long int"
+msgstr "imzalanmamış uzun tamsayı"
+
+msgid "unsigned long long int"
+msgstr "imzalanmamış uzun uzun tamsayı"
+
+msgid "pointer"
+msgstr "işaretçi"
+
+msgid "percent"
+msgstr "yüzde"
+
+msgid "char"
+msgstr "karakter"
+
+msgid "string"
+msgstr "dizi"
+
+msgid "float"
+msgstr "kayan noktalı değer"
+
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "Arama dosyanın BAŞINI geçti, dosyanın SONUNDAN sürüyor"
 
@@ -8858,7 +8904,7 @@ msgid ""
 msgstr "\" Her \"set\" satırı bir seçeneğin geçerli değerini gösterir (solda)."
 
 msgid "\" Hit <Enter> on a \"set\" line to execute it."
-msgstr "\" Değiştirmek için bir \"set\" satırında <Enter>'a basın."
+msgstr "\" Yürütmek için bir \"set\" satırında <Enter>'a basın."
 
 msgid "\"            A boolean option will be toggled."
 msgstr "\"   Bir Boole deÄŸeri iÅŸletilecektir."
@@ -9983,7 +10029,7 @@ msgid "name of the shell program used fo
 msgstr "dış komutlar için kullanılan kabuk programının adı"
 
 msgid "when to use the shell or directly execute a command"
-msgstr "ne zaman kabuğu kullanmalı veya doğrudan bir komut çalıştırmalı"
+msgstr "ne zaman kabuğu kullanmalı veya doğrudan bir komut yürütmeli"
 
 msgid "character(s) to enclose a shell command in"
 msgstr "bir kabuk komutunu çevreleyen karakter(ler)"
@@ -9995,7 +10041,7 @@ msgid "characters to escape when 'shellx
 msgstr "'shellxquote' ( iken kaçırılacak karakterler"
 
 msgid "argument for 'shell' to execute a command"
-msgstr "bir komut çalıştırmak için 'shell' için argüman"
+msgstr "bir komut yürütmek için 'shell' için argüman"
 
 msgid "used to redirect command output to a file"
 msgstr "komut çıktısını bir dosyaya yeniden yönlendirmek için kullanılır"
@@ -10278,3 +10324,6 @@ msgstr "MzScheme devingen kitaplığının adı"
 
 msgid "name of the MzScheme GC dynamic library"
 msgstr "MzScheme GC devingen kitaplığının adı"
+
+msgid "You discovered the command-line window! You can close it with \":q\"."
+msgstr "Komut satırı penceresini keşfettiniz! Kapatmak için \":q\" kullanın."
--- a/src/popupmenu.c
+++ b/src/popupmenu.c
@@ -920,13 +920,10 @@ pum_set_selected(int n, int repeat UNUSE
 			    ml_append(lnum++, p, 0, FALSE);
 			    break;
 			}
-			else
-			{
-			    *e = NUL;
-			    ml_append(lnum++, p, (int)(e - p + 1), FALSE);
-			    *e = '\n';
-			    p = e + 1;
-			}
+			*e = NUL;
+			ml_append(lnum++, p, (int)(e - p + 1), FALSE);
+			*e = '\n';
+			p = e + 1;
 		    }
 		    // delete the empty last line
 		    ml_delete(curbuf->b_ml.ml_line_count);
--- a/src/proto/typval.pro
+++ b/src/proto/typval.pro
@@ -51,6 +51,8 @@ int check_for_list_or_dict_arg(typval_T 
 int check_for_list_or_dict_or_blob_arg(typval_T *args, int idx);
 int check_for_list_or_dict_or_blob_or_string_arg(typval_T *args, int idx);
 int check_for_opt_buffer_or_dict_arg(typval_T *args, int idx);
+int check_for_object_arg(typval_T *args, int idx);
+int check_for_class_or_list_arg(typval_T *args, int idx);
 char_u *tv_get_string(typval_T *varp);
 char_u *tv_get_string_strict(typval_T *varp);
 char_u *tv_get_string_buf(typval_T *varp, char_u *buf);
--- a/src/proto/vim9class.pro
+++ b/src/proto/vim9class.pro
@@ -15,4 +15,6 @@ void class_unref(class_T *cl);
 void object_created(object_T *obj);
 void object_cleared(object_T *obj);
 int object_free_nonref(int copyID);
+void f_instanceof(typval_T *argvars, typval_T *rettv);
+int class_instance_of(class_T *cl, class_T *other_cl);
 /* vim: set ft=c : */
--- a/src/structs.h
+++ b/src/structs.h
@@ -4816,21 +4816,22 @@ typedef struct {
 // Argument for lbr_chartabsize().
 typedef struct {
     win_T	*cts_win;
-    char_u	*cts_line;	    // start of the line
-    char_u	*cts_ptr;	    // current position in line
+    char_u	*cts_line;		// start of the line
+    char_u	*cts_ptr;		// current position in line
 #ifdef FEAT_PROP_POPUP
     int		cts_text_prop_count;	// number of text props; when zero
 					// cts_text_props is not used
     textprop_T	*cts_text_props;	// text props (allocated)
-    char	cts_has_prop_with_text; // TRUE if a property inserts text
-    int		cts_cur_text_width;     // width of current inserted text
+    char	cts_has_prop_with_text;	// TRUE if a property inserts text
+    int		cts_cur_text_width;	// width of current inserted text
     int		cts_prop_lines;		// nr of properties above or below
     int		cts_first_char;		// width text props above the line
     int		cts_with_trailing;	// include size of trailing props with
 					// last character
     int		cts_start_incl;		// prop has true "start_incl" arg
 #endif
-    int		cts_vcol;	    // virtual column at current position
+    int		cts_vcol;		// virtual column at current position
+    int		cts_max_head_vcol;	// see win_lbr_chartabsize()
 } chartabsize_T;
 
 /*
deleted file mode 100644
--- a/src/testdir/dumps/Test_cursor_position_with_showbreak.dump
+++ /dev/null
@@ -1,6 +0,0 @@
-| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0@71|X
-> +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|e|c|o|n|d| |l|i|n|e| @61
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@44|1|,|7|4| @9|A|l@1| 
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_cursor_position_with_showbreak_1.dump
@@ -0,0 +1,6 @@
+| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0@71|X
+| +0#0000e05#a8a8a8255@1>s+0#0000000#ffffff0|e|c|o|n|d| |l|i|n|e| @61
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@44|1|,|7|4| @9|A|l@1| 
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_cursor_position_with_showbreak_2.dump
@@ -0,0 +1,6 @@
+| +0#0000e05#a8a8a8255@1|x+0#0000000#ffffff0@71|X
+| +0#0000e05#a8a8a8255@1| +0#0000000#ffffff0@1|++0#4040ff13&>$| +0#0000000&@68
+| +0#0000e05#a8a8a8255@1|s+0#0000000#ffffff0|e|c|o|n|d| |l|i|n|e|$+0#4040ff13&| +0#0000000&@60
+|~+0#4040ff13&| @73
+|~| @73
+|-+2#0000000&@1| |I|N|S|E|R|T| |-@1| +0&&@44|1|,|7|4| @9|A|l@1| 
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_prop_inserts_text_showbreak_22.dump
@@ -0,0 +1,6 @@
+| +0&#ffffff0@1|1| >1+0#e000e06&|2|3|1|2|3|1|2|3|1|2|3|1|2|3|1|2|3|1|2|3|1|2|3|1|2
+| +0#0000000&@5|++0#4040ff13&|3+0#e000e06&|1|2|3|1|2|3|1|2|3|1|2|3|1|2|3|1|2|3|1|2|3|1
+| +0#0000000&@5|++0#4040ff13&|2+0#e000e06&|3|1|2|3|1|2|3|1|2|3|1|2|3|1|2|3|1|2|3| +0#0000000&@2
+|~+0#4040ff13&| @28
+|~| @28
+| +0#0000000&@29
--- a/src/testdir/test_breakindent.vim
+++ b/src/testdir/test_breakindent.vim
@@ -897,7 +897,9 @@ func Test_cursor_position_with_showbreak
   let lines =<< trim END
       vim9script
       &signcolumn = 'yes'
-      &showbreak = '+ '
+      &showbreak = '++'
+      &breakindent = true
+      &breakindentopt = 'shift:2'
       var leftcol: number = win_getid()->getwininfo()->get(0, {})->get('textoff')
       repeat('x', &columns - leftcol - 1)->setline(1)
       'second line'->setline(2)
@@ -906,7 +908,13 @@ func Test_cursor_position_with_showbreak
   let buf = RunVimInTerminal('-S XscriptShowbreak', #{rows: 6})
 
   call term_sendkeys(buf, "AX")
-  call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak', {})
+  call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak_1', {})
+  " No line wraps, so changing 'showbreak' should lead to the same screen.
+  call term_sendkeys(buf, "\<C-\>\<C-O>:setlocal showbreak=+\<CR>")
+  call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak_1', {})
+  " The first line now wraps because of "eol" in 'listchars'.
+  call term_sendkeys(buf, "\<C-\>\<C-O>:setlocal list\<CR>")
+  call VerifyScreenDump(buf, 'Test_cursor_position_with_showbreak_2', {})
 
   call StopVimInTerminal(buf)
 endfunc
--- a/src/testdir/test_listlbr.vim
+++ b/src/testdir/test_listlbr.vim
@@ -15,7 +15,7 @@ function s:screen_lines(lnum, width) abo
 endfunction
 
 func s:compare_lines(expect, actual)
-  call assert_equal(join(a:expect, "\n"), join(a:actual, "\n"))
+  call assert_equal(a:expect, a:actual)
 endfunc
 
 function s:test_windows(...)
@@ -331,4 +331,45 @@ func Test_list_with_tab_and_skipping_fir
   call s:close_windows()
 endfunc
 
+func Test_ctrl_char_on_wrap_column()
+  call s:test_windows("setl nolbr wrap sbr=")
+  call setline(1, 'aaa' .. repeat("\<C-A>", 150) .. 'bbb')
+  call cursor(1,1)
+  norm! $
+  redraw!
+  let expect=[
+\ '<<<^A^A^A^A^A^A^A^A^',
+\ 'A^A^A^A^A^A^A^A^A^A^',
+\ 'A^A^A^A^A^A^A^A^A^A^',
+\ 'A^A^A^A^A^A^A^A^A^A^',
+\ 'A^A^A^A^A^A^A^A^A^A^',
+\ 'A^A^A^A^A^A^A^A^A^A^',
+\ 'A^A^A^A^A^A^A^A^A^A^',
+\ 'A^A^A^A^A^A^A^A^A^A^',
+\ 'A^A^A^A^A^A^A^A^A^A^',
+\ 'A^Abbb              ']
+  let lines = s:screen_lines([1, 10], winwidth(0))
+  call s:compare_lines(expect, lines)
+  call assert_equal(len(expect), winline())
+  call assert_equal(strwidth(trim(expect[-1], ' ', 2)), wincol())
+  setl sbr=!!
+  redraw!
+  let expect=[
+\ '!!A^A^A^A^A^A^A^A^A^',
+\ '!!A^A^A^A^A^A^A^A^A^',
+\ '!!A^A^A^A^A^A^A^A^A^',
+\ '!!A^A^A^A^A^A^A^A^A^',
+\ '!!A^A^A^A^A^A^A^A^A^',
+\ '!!A^A^A^A^A^A^A^A^A^',
+\ '!!A^A^A^A^A^A^A^A^A^',
+\ '!!A^A^A^A^A^A^A^A^A^',
+\ '!!A^A^A^A^A^A^A^A^A^',
+\ '!!A^A^A^A^A^A^Abbb  ']
+  let lines = s:screen_lines([1, 10], winwidth(0))
+  call s:compare_lines(expect, lines)
+  call assert_equal(len(expect), winline())
+  call assert_equal(strwidth(trim(expect[-1], ' ', 2)), wincol())
+  call s:close_windows()
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
--- a/src/testdir/test_listlbr_utf8.vim
+++ b/src/testdir/test_listlbr_utf8.vim
@@ -249,7 +249,6 @@ endfunc
 
 func Test_chinese_char_on_wrap_column()
   call s:test_windows("setl nolbr wrap sbr=")
-  syntax off
   call setline(1, [
 \ 'aaaaaaaaaaaaaaaaaaa中'.
 \ 'aaaaaaaaaaaaaaaaa中'.
@@ -278,6 +277,84 @@ func Test_chinese_char_on_wrap_column()
 \ '中hello             ']
   let lines = s:screen_lines([1, 10], winwidth(0))
   call s:compare_lines(expect, lines)
+  call assert_equal(len(expect), winline())
+  call assert_equal(strwidth(trim(expect[-1], ' ', 2)), wincol())
+  call s:close_windows()
+endfunc
+
+func Test_chinese_char_on_wrap_column_sbr()
+  call s:test_windows("setl nolbr wrap sbr=!!!")
+  call setline(1, [
+\ 'aaaaaaaaaaaaaaaaaaa中'.
+\ 'aaaaaaaaaaaaaa中'.
+\ 'aaaaaaaaaaaaaa中'.
+\ 'aaaaaaaaaaaaaa中'.
+\ 'aaaaaaaaaaaaaa中'.
+\ 'aaaaaaaaaaaaaa中'.
+\ 'aaaaaaaaaaaaaa中'.
+\ 'aaaaaaaaaaaaaa中'.
+\ 'aaaaaaaaaaaaaa中'.
+\ 'aaaaaaaaaaaaaa中'.
+\ 'hello'])
+  call cursor(1,1)
+  norm! $
+  redraw!
+  let expect=[
+\ '!!!中aaaaaaaaaaaaaa>',
+\ '!!!中aaaaaaaaaaaaaa>',
+\ '!!!中aaaaaaaaaaaaaa>',
+\ '!!!中aaaaaaaaaaaaaa>',
+\ '!!!中aaaaaaaaaaaaaa>',
+\ '!!!中aaaaaaaaaaaaaa>',
+\ '!!!中aaaaaaaaaaaaaa>',
+\ '!!!中aaaaaaaaaaaaaa>',
+\ '!!!中aaaaaaaaaaaaaa>',
+\ '!!!中hello          ']
+  let lines = s:screen_lines([1, 10], winwidth(0))
+  call s:compare_lines(expect, lines)
+  call assert_equal(len(expect), winline())
+  call assert_equal(strwidth(trim(expect[-1], ' ', 2)), wincol())
+  call s:close_windows()
+endfunc
+
+func Test_unprintable_char_on_wrap_column()
+  call s:test_windows("setl nolbr wrap sbr=")
+  call setline(1, 'aaa' .. repeat("\uFEFF", 50) .. 'bbb')
+  call cursor(1,1)
+  norm! $
+  redraw!
+  let expect=[
+\ '<<<<feff><feff><feff',
+\ '><feff><feff><feff><',
+\ 'feff><feff><feff><fe',
+\ 'ff><feff><feff><feff',
+\ '><feff><feff><feff><',
+\ 'feff><feff><feff><fe',
+\ 'ff><feff><feff><feff',
+\ '><feff><feff><feff><',
+\ 'feff><feff><feff><fe',
+\ 'ff>bbb              ']
+  let lines = s:screen_lines([1, 10], winwidth(0))
+  call s:compare_lines(expect, lines)
+  call assert_equal(len(expect), winline())
+  call assert_equal(strwidth(trim(expect[-1], ' ', 2)), wincol())
+  setl sbr=!!
+  redraw!
+  let expect=[
+\ '!!><feff><feff><feff',
+\ '!!><feff><feff><feff',
+\ '!!><feff><feff><feff',
+\ '!!><feff><feff><feff',
+\ '!!><feff><feff><feff',
+\ '!!><feff><feff><feff',
+\ '!!><feff><feff><feff',
+\ '!!><feff><feff><feff',
+\ '!!><feff><feff><feff',
+\ '!!><feff><feff>bbb  ']
+  let lines = s:screen_lines([1, 10], winwidth(0))
+  call s:compare_lines(expect, lines)
+  call assert_equal(len(expect), winline())
+  call assert_equal(strwidth(trim(expect[-1], ' ', 2)), wincol())
   call s:close_windows()
 endfunc
 
--- a/src/testdir/test_options.vim
+++ b/src/testdir/test_options.vim
@@ -1811,11 +1811,11 @@ func Test_paste_depending_options()
 
   let result = readfile('Xoutput_paste')->filter('!empty(v:val)')
   call assert_equal('noexpandtab', result[0])
-  call assert_match("^	Last set from .*Xvimrc_paste2 line 1$", result[1])
+  call assert_match("^\tLast set from .*Xvimrc_paste2 line 1$", result[1])
   call assert_equal('noexpandtab', result[2])
-  call assert_match("^	Last set from .*Xvimrc_paste2 line 1$", result[3])
+  call assert_match("^\tLast set from .*Xvimrc_paste2 line 1$", result[3])
   call assert_equal('noexpandtab', result[4])
-  call assert_match("^	Last set from .*Xvimrc_paste2 line 1$", result[5])
+  call assert_match("^\tLast set from .*Xvimrc_paste2 line 1$", result[5])
 
   call delete('Xoutput_paste')
 endfunc
@@ -1846,11 +1846,11 @@ func Test_binary_depending_options()
 
   let result = readfile('Xoutput_bin')->filter('!empty(v:val)')
   call assert_equal('noexpandtab', result[0])
-  call assert_match("^	Last set from .*Xvimrc_bin2 line 1$", result[1])
+  call assert_match("^\tLast set from .*Xvimrc_bin2 line 1$", result[1])
   call assert_equal('noexpandtab', result[2])
-  call assert_match("^	Last set from .*Xvimrc_bin2 line 1$", result[3])
+  call assert_match("^\tLast set from .*Xvimrc_bin2 line 1$", result[3])
   call assert_equal('noexpandtab', result[4])
-  call assert_match("^	Last set from .*Xvimrc_bin2 line 1$", result[5])
+  call assert_match("^\tLast set from .*Xvimrc_bin2 line 1$", result[5])
 
   call delete('Xoutput_bin')
 endfunc
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -2630,6 +2630,112 @@ func Test_prop_inserts_text_visual_block
   call StopVimInTerminal(buf)
 endfunc
 
+func Run_test_prop_inserts_text_showbreak(cmd)
+  CheckRunVimInTerminal
+
+  let lines =<< trim END
+    highlight! link LineNr Normal
+    call setline(1, repeat('a', 28))
+    call prop_type_add('theprop', #{highlight: 'Special'})
+    call prop_add(1, 28, #{type: 'theprop', text: repeat('123', 23), text_wrap: 'wrap'})
+    setlocal number showbreak=+ breakindent breakindentopt=shift:2
+    setlocal scrolloff=0 smoothscroll
+    normal! $
+  END
+  let lines = insert(lines, a:cmd)
+  call writefile(lines, 'XscriptPropsShowbreak', 'D')
+  let buf = RunVimInTerminal('-S XscriptPropsShowbreak', #{rows: 6, cols: 30})
+  call term_sendkeys(buf, ":set noruler\<CR>")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_1', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_2', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_3', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_4', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_5', {})
+  call term_sendkeys(buf, "zbi")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_6', {})
+  call term_sendkeys(buf, "\<BS>")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_7', {})
+  call term_sendkeys(buf, "\<Esc>l")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_8', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_9', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_10', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_11', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_12', {})
+  call term_sendkeys(buf, "023x$")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_13', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_14', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_15', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_16', {})
+  call term_sendkeys(buf, "zbi")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_17', {})
+  call term_sendkeys(buf, "\<C-U>")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_18', {})
+  call term_sendkeys(buf, "\<Esc>")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_19', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_20', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_21', {})
+  call term_sendkeys(buf, "zbx")
+  call VerifyScreenDump(buf, 'Test_prop_inserts_text_showbreak_22', {})
+
+  call StopVimInTerminal(buf)
+endfunc
+
+func Test_prop_inserts_text_showbreak()
+  call Run_test_prop_inserts_text_showbreak('')
+  " because of 'breakindent' the screendumps are the same
+  call Run_test_prop_inserts_text_showbreak('set cpoptions+=n')
+endfunc
+
+func Test_prop_before_tab_skipcol()
+  CheckRunVimInTerminal
+
+  let lines =<< trim END
+    call setline(1, repeat("\t", 4) .. 'a')
+    call prop_type_add('theprop', #{highlight: 'Special'})
+    call prop_add(1, 4, #{type: 'theprop', text: repeat('12', 32), text_wrap: 'wrap'})
+    setlocal list listchars=tab:<-> scrolloff=0 smoothscroll
+    normal! $
+  END
+  call writefile(lines, 'XscriptPropsBeforeTabSkipcol', 'D')
+  let buf = RunVimInTerminal('-S XscriptPropsBeforeTabSkipcol', #{rows: 6, cols: 30})
+  call VerifyScreenDump(buf, 'Test_prop_before_tab_skipcol_1', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_before_tab_skipcol_2', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_before_tab_skipcol_3', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_before_tab_skipcol_4', {})
+  call term_sendkeys(buf, "zbh")
+  call VerifyScreenDump(buf, 'Test_prop_before_tab_skipcol_5', {})
+  call term_sendkeys(buf, "i")
+  call VerifyScreenDump(buf, 'Test_prop_before_tab_skipcol_6', {})
+  call term_sendkeys(buf, "\<C-O>:setlocal nolist\<CR>")
+  call VerifyScreenDump(buf, 'Test_prop_before_tab_skipcol_7', {})
+  call term_sendkeys(buf, "\<Esc>l")
+  call VerifyScreenDump(buf, 'Test_prop_before_tab_skipcol_8', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_before_tab_skipcol_9', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_before_tab_skipcol_10', {})
+  call term_sendkeys(buf, "\<C-E>")
+  call VerifyScreenDump(buf, 'Test_prop_before_tab_skipcol_11', {})
+
+  call StopVimInTerminal(buf)
+endfunc
+
 func Test_prop_add_with_text_fails()
   call prop_type_add('failing', #{highlight: 'ErrorMsg'})
   call assert_fails("call prop_add(1, 0, #{type: 'failing', text: 'X', end_lnum: 1})", 'E1305:')
--- a/src/testdir/test_vim9_builtin.vim
+++ b/src/testdir/test_vim9_builtin.vim
@@ -2301,6 +2301,24 @@ def Test_insert()
   v9.CheckDefAndScriptFailure(['insert([2, 3], 1, "x")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
 enddef
 
+def Test_instanceof()
+  var lines =<< trim END
+    vim9script
+    class Foo
+    endclass
+    instanceof('hello', Foo)
+  END
+  v9.CheckScriptFailure(lines, 'E616: Object required for argument 1')
+
+  lines =<< trim END
+    vim9script
+    class Foo
+    endclass
+    instanceof(Foo.new(), 123)
+  END
+  v9.CheckScriptFailure(lines, 'E693: List or Class required for argument 2')
+enddef
+
 def Test_invert()
   v9.CheckDefAndScriptFailure(['invert("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
 enddef
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -2367,6 +2367,39 @@ def Test_call_method_in_extended_class()
   v9.CheckScriptSuccess(lines)
 enddef
 
+def Test_instanceof()
+  var lines =<< trim END
+    vim9script
+
+    class Base1
+    endclass
+
+    class Base2 extends Base1
+    endclass
+
+    interface Intf1
+    endinterface
+
+    class Mix1 implements Intf1
+    endclass
+
+    class Base3 extends Mix1
+    endclass
+
+    var b1 = Base1.new()
+    var b2 = Base2.new()
+    var b3 = Base3.new()
+
+    assert_true(instanceof(b1, Base1))
+    assert_true(instanceof(b2, Base1))
+    assert_false(instanceof(b1, Base2))
+    assert_true(instanceof(b3, Mix1))
+    assert_false(instanceof(b3, []))
+    assert_true(instanceof(b3, [Base1, Base2, Intf1]))
+  END
+  v9.CheckScriptSuccess(lines)
+enddef
+
 " Test for calling a method in the parent class that is extended partially.
 " This used to fail with the 'E118: Too many arguments for function: Text' error
 " message (Github issue #12524).
--- a/src/typval.c
+++ b/src/typval.c
@@ -974,6 +974,34 @@ check_for_opt_buffer_or_dict_arg(typval_
 }
 
 /*
+ * Give an error and return FAIL unless "args[idx]" is an object.
+ */
+    int
+check_for_object_arg(typval_T *args, int idx)
+{
+    if (args[idx].v_type != VAR_OBJECT)
+    {
+	    semsg(_(e_object_required_for_argument_nr), idx + 1);
+	return FAIL;
+    }
+    return OK;
+}
+
+/*
+ * Give an error and return FAIL unless "args[idx]" is a class or a list.
+ */
+    int
+check_for_class_or_list_arg(typval_T *args, int idx)
+{
+    if (args[idx].v_type != VAR_CLASS && args[idx].v_type != VAR_LIST)
+    {
+	    semsg(_(e_list_or_class_required_for_argument_nr), idx + 1);
+	return FAIL;
+    }
+    return OK;
+}
+
+/*
  * Get the string value of a variable.
  * If it is a Number variable, the number is converted into a string.
  * tv_get_string() uses a single, static buffer.  YOU CAN ONLY USE IT ONCE!
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,14 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1786,
+/**/
+    1785,
+/**/
+    1784,
+/**/
+    1783,
+/**/
     1782,
 /**/
     1781,
--- a/src/vim9class.c
+++ b/src/vim9class.c
@@ -1913,5 +1913,69 @@ object_free_nonref(int copyID)
     return did_free;
 }
 
+/*
+ * Return TRUE when the class "cl", its base class or one of the implemented interfaces
+ * matches the class "other_cl".
+ */
+    int
+class_instance_of(class_T *cl, class_T *other_cl)
+{
+    if (cl == other_cl)
+	return TRUE;
+
+    // Recursively check the base classes.
+    for (; cl != NULL; cl = cl->class_extends)
+    {
+	if (cl == other_cl)
+	    return TRUE;
+	// Check the implemented interfaces.
+	for (int i = cl->class_interface_count - 1; i >= 0; --i)
+	    if (cl->class_interfaces_cl[i] == other_cl)
+		return TRUE;
+    }
+
+    return FALSE;
+}
+
+/*
+ * "instanceof(object, classinfo)" function
+ */
+    void
+f_instanceof(typval_T *argvars, typval_T *rettv)
+{
+    typval_T	*object_tv = &argvars[0];
+    typval_T	*classinfo_tv = &argvars[1];
+    listitem_T	*li;
+
+    rettv->vval.v_number = VVAL_FALSE;
+
+    if (check_for_object_arg(argvars, 0) == FAIL
+	    || check_for_class_or_list_arg(argvars, 1) == FAIL)
+	return;
+
+    if (classinfo_tv->v_type == VAR_LIST)
+    {
+	FOR_ALL_LIST_ITEMS(classinfo_tv->vval.v_list, li)
+	{
+	    if (li->li_tv.v_type != VAR_CLASS)
+	    {
+		emsg(_(e_class_required));
+		return;
+	    }
+
+	    if (class_instance_of(object_tv->vval.v_object->obj_class,
+			li->li_tv.vval.v_class) == TRUE)
+	    {
+		rettv->vval.v_number = VVAL_TRUE;
+		return;
+	    }
+	}
+    }
+    else if (classinfo_tv->v_type == VAR_CLASS)
+    {
+	rettv->vval.v_number = class_instance_of(object_tv->vval.v_object->obj_class,
+		classinfo_tv->vval.v_class);
+    }
+}
 
 #endif // FEAT_EVAL
--- a/src/vim9type.c
+++ b/src/vim9type.c
@@ -908,20 +908,7 @@ check_type_maybe(
 	    if (actual->tt_type != VAR_OBJECT)
 		return FAIL;	// don't use tt_class
 
-	    // check the class, base class or an implemented interface matches
-	    class_T *cl;
-	    for (cl = actual->tt_class; cl != NULL; cl = cl->class_extends)
-	    {
-		if (expected->tt_class == cl)
-		    break;
-		int i;
-		for (i = cl->class_interface_count - 1; i >= 0; --i)
-		    if (expected->tt_class == cl->class_interfaces_cl[i])
-			break;
-		if (i >= 0)
-		    break;
-	    }
-	    if (cl == NULL)
+	    if (class_instance_of(actual->tt_class, expected->tt_class) == FALSE)
 		ret = FAIL;
 	}