Update runtime files
diff --git a/runtime/indent/testdir/runtest.vim b/runtime/indent/testdir/runtest.vim
index 6bbd33c..fa4e16e 100644
--- a/runtime/indent/testdir/runtest.vim
+++ b/runtime/indent/testdir/runtest.vim
@@ -11,6 +11,7 @@
 set nowrapscan
 set report=9999
 set modeline
+set debug=throw
 
 au! SwapExists * call HandleSwapExists()
 func HandleSwapExists()
@@ -84,7 +85,12 @@
 
 	exe start + 1
 	if pattern == ''
-	  exe 'normal =' . (end - 1) . 'G'
+	  try
+	    exe 'normal =' . (end - 1) . 'G'
+	  catch
+	    call append(indent_at, 'ERROR: ' . v:exception)
+	    let failed = 1
+	  endtry
 	else
 	  let lnum = search(pattern)
 	  if lnum <= 0
@@ -99,7 +105,12 @@
 	  else
 	    exe lnum - 1
 	  endif
-	  normal ==
+	  try
+	    normal ==
+	  catch
+	    call append(indent_at, 'ERROR: ' . v:exception)
+	    let failed = 1
+	  endtry
 	endif
       endif
     endwhile
diff --git a/runtime/indent/testdir/vim.in b/runtime/indent/testdir/vim.in
index 873045b..5eb262f 100644
--- a/runtime/indent/testdir/vim.in
+++ b/runtime/indent/testdir/vim.in
@@ -36,6 +36,13 @@
 \ },
 \  ]
 
+def Func()
+  var d = dd
+	->extend({
+	})
+  eval 0
+enddef
+
 " END_INDENT
 
 " START_INDENT
diff --git a/runtime/indent/testdir/vim.ok b/runtime/indent/testdir/vim.ok
index 8e70abe..932eebe 100644
--- a/runtime/indent/testdir/vim.ok
+++ b/runtime/indent/testdir/vim.ok
@@ -36,6 +36,13 @@
 	    \ },
 	    \  ]
 
+def Func()
+    var d = dd
+		->extend({
+    })
+    eval 0
+enddef
+
 " END_INDENT
 
 " START_INDENT
diff --git a/runtime/indent/vim.vim b/runtime/indent/vim.vim
index 8a2502a..2ae3658 100644
--- a/runtime/indent/vim.vim
+++ b/runtime/indent/vim.vim
@@ -33,7 +33,9 @@
   endtry
 endfunc
 
-let s:lineContPat = '^\s*\(\\\|"\\ \)'
+" Legacy script line continuation and Vim9 script operators that must mean an
+" expression that continues from the previous line.
+let s:lineContPat = '^\s*\(\\\|"\\ \|->\)'
 
 function GetVimIndentIntern()
   " If the current line has line continuation and the previous one too, use
@@ -133,15 +135,15 @@
     endif
   endif
 
-  " For a line starting with "}" find the matching "{".  If it is at the start
-  " of the line align with it, probably end of a block.
+  " For a line starting with "}" find the matching "{".  Align with that line,
+  " it is either the matching block start or dictionary start.
   " Use the mapped "%" from matchit to find the match, otherwise we may match
   " a { inside a comment or string.
   if cur_text =~ '^\s*}'
     if maparg('%') != ''
       exe v:lnum
       silent! normal %
-      if line('.') < v:lnum && getline('.') =~ '^\s*{'
+      if line('.') < v:lnum
 	let ind = indent('.')
       endif
     else
@@ -149,19 +151,33 @@
     endif
   endif
 
-  " Below a line starting with "}" find the matching "{".  If it is at the
-  " end of the line we must be below the end of a dictionary.
-  if prev_text =~ '^\s*}'
-    if maparg('%') != ''
-      exe lnum
-      silent! normal %
-      if line('.') == lnum || getline('.') !~ '^\s*{'
-	let ind = ind - shiftwidth()
+  " Look back for a line to align with
+  while lnum > 1
+    " Below a line starting with "}" find the matching "{".
+    if prev_text =~ '^\s*}'
+      if maparg('%') != ''
+	exe lnum
+	silent! normal %
+	if line('.') < lnum
+	  let lnum = line('.')
+	  let ind = indent(lnum)
+	  let prev_text = getline(lnum)
+	else
+	  break
+	endif
+      else
+	" todo: use searchpair() to find a match
+	break
       endif
+    elseif prev_text =~ s:lineContPat
+      " looks like a continuation like, go back one line
+      let lnum = lnum - 1
+      let ind = indent(lnum)
+      let prev_text = getline(lnum)
     else
-      " todo: use searchpair() to find a match
+      break
     endif
-  endif
+  endwhile
 
   " Below a line starting with "]" we must be below the end of a list.
   " Include a "}" and "},} in case a dictionary ends too.
diff --git a/runtime/indent/yaml.vim b/runtime/indent/yaml.vim
index d732c37..93fd8ea 100644
--- a/runtime/indent/yaml.vim
+++ b/runtime/indent/yaml.vim
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	YAML
 " Maintainer:	Nikolai Pavlov <zyx.vim@gmail.com>
-" Last Update:	Lukas Reineke
+" Last Updates:	Lukas Reineke, "lacygoill"
 " Last Change:	2022 Jun 17
 
 " Only load this indent file when no other was loaded.
@@ -29,8 +29,8 @@
     let prevlnum = prevnonblank(a:lnum-1)
     let curindent = a:0 ? a:1 : indent(a:lnum)
     while           prevlnum
-                \&&  indent(prevlnum) >=  curindent
-                \&& getline(prevlnum) !~# '^\s*#'
+                \ && indent(prevlnum) >=  curindent
+                \ && getline(prevlnum) !~# '^\s*#'
         let prevlnum = prevnonblank(prevlnum-1)
     endwhile
     return prevlnum
@@ -54,7 +54,7 @@
 let s:c_ns_anchor_property =  '\v\&' .. s:c_ns_anchor_name
 
 let s:ns_word_char = '\v[[:alnum:]_\-]'
-let s:ns_tag_char  = '\v%(%\x\x|' .. s:ns_word_char .. '|[#/;?:@&=+$.~*''()])'
+let s:ns_tag_char  = '\v%(\x\x|' .. s:ns_word_char .. '|[#/;?:@&=+$.~*''()])'
 let s:c_named_tag_handle     = '\v\!' .. s:ns_word_char .. '+\!'
 let s:c_secondary_tag_handle = '\v\!\!'
 let s:c_primary_tag_handle   = '\v\!'
@@ -63,7 +63,7 @@
             \            '|' .. s:c_primary_tag_handle .. ')'
 let s:c_ns_shorthand_tag = '\v' .. s:c_tag_handle .. s:ns_tag_char .. '+'
 let s:c_non_specific_tag = '\v\!'
-let s:ns_uri_char  = '\v%(%\x\x|' .. s:ns_word_char .. '\v|[#/;?:@&=+$,.!~*''()[\]])'
+let s:ns_uri_char  = '\v%(\x\x|' .. s:ns_word_char .. '\v|[#/;?:@&=+$,.!~*''()[\]])'
 let s:c_verbatim_tag = '\v\!\<' .. s:ns_uri_char.. '+\>'
 let s:c_ns_tag_property = '\v' .. s:c_verbatim_tag.
             \               '\v|' .. s:c_ns_shorthand_tag.