runtime(vim): Update base-syntax, highlight literal string quote escape

Commit: 
https://github.com/vim/vim/commit/695522dea3703cf1b4cd4a894ca9a745a0d2756f
Author: Doug Kearns <dougkea...@gmail.com>
Date:   Fri Jan 10 20:02:17 2025 +0100

    runtime(vim): Update base-syntax, highlight literal string quote escape
    
    Match the '' escape sequence in literal strings.  These were previously
    ending the current string and starting another concatenated literal
    string.
    
    closes: #16415
    
    Signed-off-by: Christian Brabandt <c...@256bit.org>
    Signed-off-by: Doug Kearns <dougkea...@gmail.com>

diff --git a/runtime/syntax/generator/vim.vim.base 
b/runtime/syntax/generator/vim.vim.base
index 28342680d..b3bc5ca6f 100644
--- a/runtime/syntax/generator/vim.vim.base
+++ b/runtime/syntax/generator/vim.vim.base
@@ -558,19 +558,21 @@ syn region        vimPatSepZone   oneline   contained   
matchgroup=vimPatSepZ start="\%\
 syn region     vimPatRegion    contained transparent matchgroup=vimPatSepR 
start="\[z%]\=(" end="\)"   contains=@vimSubstList oneline
 syn match      vimNotPatSep    contained       "\\"
 syn cluster    vimStringGroup  
contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
-syn region     vimString       oneline keepend start=+[^a-zA-Z>\@]"+lc=1 
skip=+\\\|\"+ matchgroup=vimStringEnd end=+"+ contains=@vimStringGroup extend
-syn region     vimString       oneline keepend start=+[^a-zA-Z>\@]'+lc=1 
end=+'+ extend
+syn region     vimString       oneline keepend matchgroup=vimString 
start=+[^a-zA-Z>\@]"+lc=1 skip=+\\\|\"+ matchgroup=vimStringEnd end=+"+    
contains=@vimStringGroup extend
+syn region     vimString       oneline matchgroup=vimString 
start=+[^a-zA-Z>\@]'+lc=1 end=+'+ contains=vimQuoteEscape extend
 "syn region    vimString       oneline start="\s/\s*\A"lc=1 skip="\\\|\+" 
end="/"      contains=@vimStringGroup  " see tst45.vim
 syn match      vimString       contained       +"[^"]*\$+      skipnl 
nextgroup=vimStringCont
 syn match      vimStringCont   contained       +\(\\\|.\)\{-}[^\]"+
+
 syn match      vimEscape       contained       "\."
 " syn match    vimEscape       contained       +\[befnrt\"]+
 syn match      vimEscape       contained       
"\\o\{1,3}\|\[xX]\x\{1,2}\|\u\x\{1,4}\|\U\x\{1,8}"
 syn match      vimEscape       contained       "\<" contains=vimNotation
 syn match      vimEscape       contained       "\<\*[^>]*>\=>"
+syn match      vimQuoteEscape  contained       "''"
 
-syn region     vimString       oneline start=+$'+ skip=+''+ end=+'+ 
contains=@vimStringInterpolation extend
-syn region     vimString       oneline start=+$"+ end=+"+ 
contains=@vimStringGroup,@vimStringInterpolation extend
+syn region     vimString       oneline matchgroup=vimString start=+$'+ 
skip=+''+ end=+'+ contains=vimQuoteEscape,@vimStringInterpolation  extend
+syn region     vimString       oneline matchgroup=vimString start=+$"+         
  end=+"+ contains=@vimStringGroup,@vimStringInterpolation extend
 syn region     vimStringInterpolationExpr  oneline contained matchgroup=vimSep 
start=+{+ end=+}+ contains=@vimExprList
 syn match      vimStringInterpolationBrace contained "{{"
 syn match      vimStringInterpolationBrace contained "}}"
@@ -1392,6 +1394,7 @@ if !exists("skip_vim_syntax_inits")
  hi def link vimPattern        Type
  hi def link vimPlainMark      vimMark
  hi def link vimPlainRegister  vimRegister
+ hi def link vimQuoteEscape    vimEscape
  hi def link vimRegister       SpecialChar
  hi def link vimScriptDelim    Comment
  hi def link vimSearchDelim    Statement
diff --git a/runtime/syntax/testdir/dumps/vim_expr_00.dump 
b/runtime/syntax/testdir/dumps/vim_expr_00.dump
index 899b73cd9..b8ea410bc 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_00.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_00.dump
@@ -1,6 +1,6 @@
 >"+0#0000e05#ffffff0| |S|t|r|i|n|g| +0#0000000&@66
 @75
-|e+0#af5f00255&|c|h|o| +0#0000000&|'+0#e000002&|I|t|'@1|s| |a| |s|t|r|i|n|g|'| 
+0#0000000&@53
+|e+0#af5f00255&|c|h|o| 
+0#0000000&|'+0#e000002&|I|t|'+0#e000e06&@1|s+0#e000002&| |a| |s|t|r|i|n|g|'| 
+0#0000000&@53
 |e+0#af5f00255&|c|h|o| +0#0000000&|'+0#e000002&|t|a|b|:| |\|t|,| |n|e|w| 
|l|i|n|e|:| |\|n|,| |b|a|c|k|s|l|a|s|h|:| |\@1|'| +0#0000000&@31
 |e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|t|a|b|:| 
|\+0#e000e06&|t|,+0#e000002&| |n|e|w| |l|i|n|e|:| |\+0#e000e06&|n|,+0#e000002&| 
|b|a|c|k|s|l|a|s|h|:| |\+0#e000e06&@1|"+0#e000002&| +0#0000000&@31
 @75
diff --git a/runtime/syntax/testdir/dumps/vim_expr_01.dump 
b/runtime/syntax/testdir/dumps/vim_expr_01.dump
index 81a4e2156..7dfc6d4ec 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_01.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_01.dump
@@ -12,9 +12,9 @@
 |e+0#af5f00255&|c|h|o| 
+0#0000000&|"+0#e000002&|\+0#e000e06&|<|C|-|>@1|>+0#e000002&|"| +0#0000000&@60
 |e+0#af5f00255&|c|h|o| 
+0#0000000&|"+0#e000002&|\+0#e000e06&|<|*|C|-|>@1|>+0#e000002&|"| +0#0000000&@59
 @75
-|"+0#0000e05&| |S|t|r|i|n|g| |i|n|t|e|r|p|o|l|a|t|i|o|n| +0#0000000&@52
+|e+0#af5f00255&|c|h|o| +0#0000000&|'+0#e000002&|'+0#e000e06&@1|'+0#e000002&| 
+0#0000000&@65
+|e+0#af5f00255&|c|h|o| 
+0#0000000&|'+0#e000002&|'+0#e000e06&@1|f+0#e000002&|o@1|'| +0#0000000&@62
+|e+0#af5f00255&|c|h|o| 
+0#0000000&|'+0#e000002&|f|o@1|'+0#e000e06&@1|'+0#e000002&| +0#0000000&@62
+|e+0#af5f00255&|c|h|o| 
+0#0000000&|'+0#e000002&|f|o@1|'+0#e000e06&@1|b+0#e000002&|a|r|'| +0#0000000&@59
 @75
-|e+0#af5f00255&|c|h|o| +0#0000000&|'+0#e000002&|D|o|n|'@1|t| 
|h|i|g|h|l|i|g|h|t| |i|n|t|e|r|p|o|l|a|t|i|o|n|:| |{@1| |{|1| |+| |2|}| |}@1|'| 
+0#0000000&@22
-|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|D|o|n|'|t| |h|i|g|h|l|i|g|h|t| 
|i|n|t|e|r|p|o|l|a|t|i|o|n|:| |{@1| |{|1| |+| |2|}| |}@1|"| +0#0000000&@23
-|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|'|H|i|g|h|l|i|g|h|t| 
|i|n|t|e|r|p|o|l|a|t|i|o|n|:|\|t|{+0#e000e06&@1| +0#e000002&|{+0#e000e06&| 
+0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|{|'+0#e000002&|f|o@1|'|:+0#0000000&|
 |'+0#e000002&|b|a|r|'|}+0#e000e06&|)| +0#0000000&|}+0#e000e06&| 
+0#e000002&|}+0#e000e06&@1|'+0#e000002&| +0#0000000&@8
-@57|1|5|,|1| @9|1|8|%| 
+@57|1|5|,|1| @9|1|4|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_expr_02.dump 
b/runtime/syntax/testdir/dumps/vim_expr_02.dump
index d1d443ec4..37e5b0411 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_02.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_02.dump
@@ -1,20 +1,20 @@
-|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|$+0#e000002&|'|H|i|g|h|l|i|g|h|t| 
|i|n|t|e|r|p|o|l|a|t|i|o|n|:|\|t|{+0#e000e06&@1| +0#e000002&|{+0#e000e06&| 
+0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|{|'+0#e000002&|f|o@1|'|:+0#0000000&|
 |'+0#e000002&|b|a|r|'|}+0#e000e06&|)| +0#0000000&|}+0#e000e06&| 
+0#e000002&|}+0#e000e06&@1|'+0#e000002&| +0#0000000&@8
+| +0&#ffffff0@74
+|"+0#0000e05&| |U|n|r|e|p|o|r|t|e|d| |i|s@1|u|e| |(|i|n|c|o|r@1|e|c|t|l|y| 
|m|a|t|c|h|e|s| |a|s| |v|i|m|S|t|r|i|n|g| |v|i|m|M|a|r|k| |v|i|m|O|p|e|r| 
|N|O|N|E|)| +0#0000000&
+|"+0#0000e05&| 
|h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|t|p|o|p|e|/|v|i|m|-|u|n|i|m|p|a|i|r|e|d|/|b|l|o|b|/|6|d|4@1|a|6|d|c|2|e|c|3|4|6|0|7|c|4|1|e|c|7|8|a|c|f|8|1
+|6|5|7|2|4|8|5|8|0|b|f|1|/|p|l|u|g|i|n|/|u|n|i|m|p|a|i|r|e|d|.|v|i|m|#|L|2|3|2|
 +0#0000000&@35
+|l+0#af5f00255&|e|t| +0#0000000&|c+0#00e0e07&|m|d| +0#0000000&|=+0#af5f00255&| 
+0#0000000&|'+0#e000002&|p|u|t|!|=|r|e|p|e|a|t|(|n|r|2|c|h|a|r|(|1|0|)|,| 
|v|:|c|o|u|n|t|1|)|||s|i|l|e|n|t| |'+0#e000e06&@1|]+0#e000002&|+|'| 
+0#0000000&@16
+> @74
+|"+0#0000e05&| |S|t|r|i|n|g| |i|n|t|e|r|p|o|l|a|t|i|o|n| +0#0000000&@52
+@75
+|e+0#af5f00255&|c|h|o| 
+0#0000000&|'+0#e000002&|D|o|n|'+0#e000e06&@1|t+0#e000002&| |h|i|g|h|l|i|g|h|t| 
|i|n|t|e|r|p|o|l|a|t|i|o|n|:| |{@1| |{|1| |+| |2|}| |}@1|'| +0#0000000&@22
+|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|D|o|n|'|t| |h|i|g|h|l|i|g|h|t| 
|i|n|t|e|r|p|o|l|a|t|i|o|n|:| |{@1| |{|1| |+| |2|}| |}@1|"| +0#0000000&@23
+|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|'|H|i|g|h|l|i|g|h|t| 
|i|n|t|e|r|p|o|l|a|t|i|o|n|:|\|t|{+0#e000e06&@1| +0#e000002&|{+0#e000e06&| 
+0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|{|'+0#e000002&|f|o@1|'|:+0#0000000&|
 |'+0#e000002&|b|a|r|'|}+0#e000e06&|)| +0#0000000&|}+0#e000e06&| 
+0#e000002&|}+0#e000e06&@1|'+0#e000002&| +0#0000000&@8
 |e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|'|H|i|g|h|l|i|g|h|t| 
|i|n|t|e|r|p|o|l|a|t|i|o|n|:|\|t|{+0#e000e06&@1| +0#e000002&|{+0#e000e06&| 
+0#0000000&|$+0#e000002&|'|n|e|s|t|e|d|:| |{+0#e000e06&@1| 
+0#e000002&|{+0#e000e06&|1+0#e000002&| +0#0000000&|++0#af5f00255&| 
+0#0000000&|2+0#e000002&|}+0#e000e06&| +0#e000002&|}+0#e000e06&@1|'+0#e000002&| 
+0#0000000&|}+0#e000e06&| +0#e000002&|}+0#e000e06&@1|'+0#e000002&| +0#0000000&@6
 |e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|"|H|i|g|h|l|i|g|h|t| 
|i|n|t|e|r|p|o|l|a|t|i|o|n|:|\+0#e000e06&|t|{@1| +0#e000002&|{+0#e000e06&| 
+0#0000000&|s+0#00e0e07&|t|r|i|n|g|(+0#e000e06&|{|"+0#e000002&|f|o@1|"|:+0#0000000&|
 |"+0#e000002&|b|a|r|"|}+0#e000e06&|)| +0#0000000&|}+0#e000e06&| 
+0#e000002&|}+0#e000e06&@1|"+0#e000002&| +0#0000000&@8
 |e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|"|H|i|g|h|l|i|g|h|t| 
|i|n|t|e|r|p|o|l|a|t|i|o|n|:|\+0#e000e06&|t|{@1| +0#e000002&|{+0#e000e06&| 
+0#0000000&|$+0#e000002&|"|n|e|s|t|e|d|:| |{+0#e000e06&@1| 
+0#e000002&|{+0#e000e06&|1+0#e000002&| +0#0000000&|++0#af5f00255&| 
+0#0000000&|2+0#e000002&|}+0#e000e06&| +0#e000002&|}+0#e000e06&@1|"+0#e000002&| 
+0#0000000&|}+0#e000e06&| +0#e000002&|}+0#e000e06&@1|"+0#e000002&| +0#0000000&@6
 @75
->"+0#0000e05&| |N|u|m|b|e|r| +0#0000000&@66
-@75
-|"+0#0000e05&| |H|e|x|a|d|e|c|i|m|a|l| +0#0000000&@61
-|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|x|F@1| +0#0000000&@64
-|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|X|F@1| +0#0000000&@64
-|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|x|F@1| 
+0#0000000&@64
-|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|X|F@1| 
+0#0000000&@64
-@75
-|"+0#0000e05&| |D|e|c|i|m|a|l| +0#0000000&@65
-|e+0#af5f00255&|c|h|o| +0#0000000&@1|2+0#e000002&|5@1| +0#0000000&@65
-|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|2+0#e000002&|5@1| 
+0#0000000&@65
-@75
-|"+0#0000e05&| |O|c|t|a|l| +0#0000000&@67
-|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|3|7@1| +0#0000000&@64
-@57|3@1|,|1| @9|4|6|%| 
+|e+0#af5f00255&|c|h|o| +0#0000000&|$+0#e000002&|'|'+0#e000e06&@1|'+0#e000002&| 
+0#0000000&@64
+|e+0#af5f00255&|c|h|o| 
+0#0000000&|$+0#e000002&|'|'+0#e000e06&@1|f+0#e000002&|o@1|'| +0#0000000&@61
+|e+0#af5f00255&|c|h|o| 
+0#0000000&|$+0#e000002&|'|f|o@1|'+0#e000e06&@1|'+0#e000002&| +0#0000000&@61
+|e+0#af5f00255&|c|h|o| 
+0#0000000&|$+0#e000002&|'|f|o@1|'+0#e000e06&@1|b+0#e000002&|a|r|'| 
+0#0000000&@58
+@57|3|2|,|0|-|1| @7|3|6|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_expr_03.dump 
b/runtime/syntax/testdir/dumps/vim_expr_03.dump
index 90cd8c865..178468d47 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_03.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_03.dump
@@ -1,20 +1,20 @@
-|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&@1|0+0#e000002&|3|7@1| +0#0000000&@64
+|e+0#af5f00255#ffffff0|c|h|o| 
+0#0000000&|$+0#e000002&|'|f|o@1|'+0#e000e06&@1|b+0#e000002&|a|r|'| 
+0#0000000&@58
+@75
+|"+0#0000e05&| |N|u|m|b|e|r| +0#0000000&@66
+@75
+|"+0#0000e05&| |H|e|x|a|d|e|c|i|m|a|l| +0#0000000&@61
+>e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|x|F@1| +0#0000000&@64
+|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|X|F@1| +0#0000000&@64
+|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|x|F@1| 
+0#0000000&@64
+|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|X|F@1| 
+0#0000000&@64
+@75
+|"+0#0000e05&| |D|e|c|i|m|a|l| +0#0000000&@65
+|e+0#af5f00255&|c|h|o| +0#0000000&@1|2+0#e000002&|5@1| +0#0000000&@65
+|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|2+0#e000002&|5@1| 
+0#0000000&@65
+@75
+|"+0#0000e05&| |O|c|t|a|l| +0#0000000&@67
+|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|3|7@1| +0#0000000&@64
 |e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|o|3|7@1| +0#0000000&@63
 |e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|O|3|7@1| +0#0000000&@63
 |e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|3|7@1| 
+0#0000000&@64
-|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|o|3|7@1| 
+0#0000000&@63
->e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|O|3|7@1| 
+0#0000000&@63
-@75
-|"+0#0000e05&| |B|i|n|a|r|y| +0#0000000&@66
-|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|b|1@7| +0#0000000&@58
-|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|B|1@7| +0#0000000&@58
-|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|b|1@7| 
+0#0000000&@58
-|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|B|1@7| 
+0#0000000&@58
-@75
-|"+0#0000e05&| |F|l|o|a|t| +0#0000000&@67
-|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&|2|3|.|4|5|6| +0#0000000&@62
-|e+0#af5f00255&|c|h|o| +0#0000000&|++0#af5f00255&|0+0#e000002&|.|0@2|1| 
+0#0000000&@62
-|e+0#af5f00255&|c|h|o| +0#0000000&|5+0#e000002&@1|.|0| +0#0000000&@65
-|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|.|1|2|3| 
+0#0000000&@63
-|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&|.|2|3|4|e|0|3| +0#0000000&@61
-@57|5|1|,|1| @9|7@1|%| 
+@57|5|0|,|1| @9|6|1|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_expr_04.dump 
b/runtime/syntax/testdir/dumps/vim_expr_04.dump
index b7737c642..1a054e6cd 100644
--- a/runtime/syntax/testdir/dumps/vim_expr_04.dump
+++ b/runtime/syntax/testdir/dumps/vim_expr_04.dump
@@ -1,20 +1,20 @@
-|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|1+0#e000002&|.|2|3|4|e|0|3| 
+0#0000000&@61
-|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&|.|0|E|-|6| +0#0000000&@63
-|e+0#af5f00255&|c|h|o| 
+0#0000000&|-+0#af5f00255&|3+0#e000002&|.|1|4|1|6|e|+|8@1| +0#0000000&@58
-@75
-|"+0#0000e05&| |B|l|o|b| +0#0000000&@68
->e+0#af5f00255&|c|h|o| +0#0000000&|0+0#e000002&|z| +0#0000000&@67
-|e+0#af5f00255&|c|h|o| +0#0000000&|0+0#e000002&|z|F@1|0@1|E|D|0|1|5|D|A|F| 
+0#0000000&@55
-|e+0#af5f00255&|c|h|o| +0#0000000&|0+0#e000002&|z|F@1|0@1|.|E|D|0|1|.|5|D|A|F| 
+0#0000000&@53
-|e+0#af5f00255&|c|h|o| 
+0#0000000&|0+0#e000002&|z|F@1|.|0@1|.|E|D|.|0|1|.|5|D|.|A|F| +0#0000000&@50
+|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|3|7@1| 
+0#0000000&@64
+|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|o|3|7@1| 
+0#0000000&@63
+|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|O|3|7@1| 
+0#0000000&@63
 @75
+|"+0#0000e05&| |B|i|n|a|r|y| +0#0000000&@66
+>e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|b|1@7| +0#0000000&@58
+|e+0#af5f00255&|c|h|o| +0#0000000&@1|0+0#e000002&|B|1@7| +0#0000000&@58
+|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|b|1@7| 
+0#0000000&@58
+|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|B|1@7| 
+0#0000000&@58
 @75
-|"+0#0000e05&| |I|s@1|u|e| |#|1|6|2@1|1| |(|v|i|m|S|t|r|i|n|g| |b|e|c|o|m|e|s| 
|v|i|m|V|a|r| |w|h|e|n| |p|r|e|c|e|d|e|d| |b|y| |!|)| +0#0000000&@14
-|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|=+0#af5f00255&| 
+0#0000000&|!+0#af5f00255&|'+0#e000002&|g|:|b|a|r|'|-+0#af5f00255&|>|e+0#00e0e07&|x|i|s|t|s|(+0#e000e06&|)|
 +0#0000000&@46
+|"+0#0000e05&| |F|l|o|a|t| +0#0000000&@67
+|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&|2|3|.|4|5|6| +0#0000000&@62
+|e+0#af5f00255&|c|h|o| +0#0000000&|++0#af5f00255&|0+0#e000002&|.|0@2|1| 
+0#0000000&@62
+|e+0#af5f00255&|c|h|o| +0#0000000&|5+0#e000002&@1|.|0| +0#0000000&@65
+|e+0#af5f00255&|c|h|o| +0#0000000&|-+0#af5f00255&|0+0#e000002&|.|1|2|3| 
+0#0000000&@63
+|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&|.|2|3|4|e|0|3| +0#0000000&@61
+|e+0#af5f00255&|c|h|o| +0#0000000&|1+0#e000002&|.|0|E|-|6| +0#0000000&@63
+|e+0#af5f00255&|c|h|o| 
+0#0000000&|-+0#af5f00255&|3+0#e000002&|.|1|4|1|6|e|+|8@1| +0#0000000&@58
 @75
-|~+0#4040ff13&| @73
-|~| @73
-|~| @73
-|~| @73
-|~| @73
-| +0#0000000&@56|6|9|,|1| @9|B|o|t| 
+@57|6|8|,|1| @9|8|6|%| 
diff --git a/runtime/syntax/testdir/dumps/vim_expr_05.dump 
b/runtime/syntax/testdir/dumps/vim_expr_05.dump
new file mode 100644
index 000000000..2c0a189bb
--- /dev/null
+++ b/runtime/syntax/testdir/dumps/vim_expr_05.dump
@@ -0,0 +1,20 @@
+| +0&#ffffff0@74
+|"+0#0000e05&| |B|l|o|b| +0#0000000&@68
+|e+0#af5f00255&|c|h|o| +0#0000000&|0+0#e000002&|z| +0#0000000&@67
+|e+0#af5f00255&|c|h|o| +0#0000000&|0+0#e000002&|z|F@1|0@1|E|D|0|1|5|D|A|F| 
+0#0000000&@55
+|e+0#af5f00255&|c|h|o| +0#0000000&|0+0#e000002&|z|F@1|0@1|.|E|D|0|1|.|5|D|A|F| 
+0#0000000&@53
+>e+0#af5f00255&|c|h|o| 
+0#0000000&|0+0#e000002&|z|F@1|.|0@1|.|E|D|.|0|1|.|5|D|.|A|F| +0#0000000&@50
+@75
+@75
+|"+0#0000e05&| |I|s@1|u|e| |#|1|6|2@1|1| |(|v|i|m|S|t|r|i|n|g| |b|e|c|o|m|e|s| 
|v|i|m|V|a|r| |w|h|e|n| |p|r|e|c|e|d|e|d| |b|y| |!|)| +0#0000000&@14
+|l+0#af5f00255&|e|t| +0#0000000&|b+0#00e0e07&|a|r| +0#0000000&|=+0#af5f00255&| 
+0#0000000&|!+0#af5f00255&|'+0#e000002&|g|:|b|a|r|'|-+0#af5f00255&|>|e+0#00e0e07&|x|i|s|t|s|(+0#e000e06&|)|
 +0#0000000&@46
+@75
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+| +0#0000000&@56|8|6|,|1| @9|B|o|t| 
diff --git a/runtime/syntax/testdir/input/vim_expr.vim 
b/runtime/syntax/testdir/input/vim_expr.vim
index 8d30656ec..316f462ca 100644
--- a/runtime/syntax/testdir/input/vim_expr.vim
+++ b/runtime/syntax/testdir/input/vim_expr.vim
@@ -21,6 +21,15 @@ echo "\<*C->>"
 echo "\<C->>>"
 echo "\<*C->>>"
 
+echo ''''
+echo '''foo'
+echo 'foo'''
+echo 'foo''bar'
+
+" Unreported issue (incorrectly matches as vimString vimMark vimOper NONE)
+" 
https://github.com/tpope/vim-unimpaired/blob/6d44a6dc2ec34607c41ec78acf81657248580bf1/plugin/unimpaired.vim#L232
+let cmd = 'put!=repeat(nr2char(10), v:count1)|silent '']+'
+
 " String interpolation
 
 echo 'Don''t highlight interpolation: {{ {1 + 2} }}'
@@ -30,6 +39,11 @@ echo $'Highlight interpolation:      {{ { $'nested: {{ {1 + 
2} }}' } }}'
 echo $"Highlight interpolation:        {{ { string({"foo": "bar"}) } }}"
 echo $"Highlight interpolation:        {{ { $"nested: {{ {1 + 2} }}" } }}"
 
+echo $''''
+echo $'''foo'
+echo $'foo'''
+echo $'foo''bar'
+
 " Number
 
 " Hexadecimal
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index 1a2aa6eb6..04fc8c1fa 100644
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -598,19 +598,21 @@ syn region        vimPatSepZone   oneline   contained   
matchgroup=vimPatSepZ start="\%\
 syn region     vimPatRegion    contained transparent matchgroup=vimPatSepR 
start="\[z%]\=(" end="\)"   contains=@vimSubstList oneline
 syn match      vimNotPatSep    contained       "\\"
 syn cluster    vimStringGroup  
contains=vimEscape,vimEscapeBrace,vimPatSep,vimNotPatSep,vimPatSepErr,vimPatSepZone,@Spell
-syn region     vimString       oneline keepend start=+[^a-zA-Z>\@]"+lc=1 
skip=+\\\|\"+ matchgroup=vimStringEnd end=+"+ contains=@vimStringGroup extend
-syn region     vimString       oneline keepend start=+[^a-zA-Z>\@]'+lc=1 
end=+'+ extend
+syn region     vimString       oneline keepend matchgroup=vimString 
start=+[^a-zA-Z>\@]"+lc=1 skip=+\\\|\"+ matchgroup=vimStringEnd end=+"+    
contains=@vimStringGroup extend
+syn region     vimString       oneline matchgroup=vimString 
start=+[^a-zA-Z>\@]'+lc=1 end=+'+ contains=vimQuoteEscape extend
 "syn region    vimString       oneline start="\s/\s*\A"lc=1 skip="\\\|\+" 
end="/"      contains=@vimStringGroup  " see tst45.vim
 syn match      vimString       contained       +"[^"]*\$+      skipnl 
nextgroup=vimStringCont
 syn match      vimStringCont   contained       +\(\\\|.\)\{-}[^\]"+
+
 syn match      vimEscape       contained       "\."
 " syn match    vimEscape       contained       +\[befnrt\"]+
 syn match      vimEscape       contained       
"\\o\{1,3}\|\[xX]\x\{1,2}\|\u\x\{1,4}\|\U\x\{1,8}"
 syn match      vimEscape       contained       "\<" contains=vimNotation
 syn match      vimEscape       contained       "\<\*[^>]*>\=>"
+syn match      vimQuoteEscape  contained       "''"
 
-syn region     vimString       oneline start=+$'+ skip=+''+ end=+'+ 
contains=@vimStringInterpolation extend
-syn region     vimString       oneline start=+$"+ end=+"+ 
contains=@vimStringGroup,@vimStringInterpolation extend
+syn region     vimString       oneline matchgroup=vimString start=+$'+ 
skip=+''+ end=+'+ contains=vimQuoteEscape,@vimStringInterpolation  extend
+syn region     vimString       oneline matchgroup=vimString start=+$"+         
  end=+"+ contains=@vimStringGroup,@vimStringInterpolation extend
 syn region     vimStringInterpolationExpr  oneline contained matchgroup=vimSep 
start=+{+ end=+}+ contains=@vimExprList
 syn match      vimStringInterpolationBrace contained "{{"
 syn match      vimStringInterpolationBrace contained "}}"
@@ -1438,6 +1440,7 @@ if !exists("skip_vim_syntax_inits")
  hi def link vimPattern        Type
  hi def link vimPlainMark      vimMark
  hi def link vimPlainRegister  vimRegister
+ hi def link vimQuoteEscape    vimEscape
  hi def link vimRegister       SpecialChar
  hi def link vimScriptDelim    Comment
  hi def link vimSearchDelim    Statement

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1tWKTH-003Bse-Ol%40256bit.org.

Raspunde prin e-mail lui