From 2a6be835122d906c6ec10682c2a771b25c87c611 Mon Sep 17 00:00:00 2001 From: Doug Kearns Date: Thu, 3 Apr 2025 21:39:24 +0200 Subject: [PATCH] runtime(vim): Update base-syntax, improve :set backslash handling Improve backslash handling in :set option values. There is no special handling for options supporting Windows path separators yet. See :help option-backslash. Remove the vimSetString syntax group. Option string values cannot be specified with a quoted string, this is a command terminating tail comment. fixes: #16913 closes: #17034 Signed-off-by: Doug Kearns Signed-off-by: Christian Brabandt --- runtime/syntax/generator/vim.vim.base | 29 +++++-- .../syntax/testdir/dumps/vim_ex_set_01.dump | 2 +- .../syntax/testdir/dumps/vim_ex_set_02.dump | 2 +- .../syntax/testdir/dumps/vim_ex_set_03.dump | 2 +- .../syntax/testdir/dumps/vim_ex_set_04.dump | 2 +- .../syntax/testdir/dumps/vim_ex_set_05.dump | 4 +- .../syntax/testdir/dumps/vim_ex_set_06.dump | 18 ++--- .../syntax/testdir/dumps/vim_ex_set_07.dump | 20 +++++ .../dumps/vim_ex_set_backslash_00.dump | 20 +++++ .../dumps/vim_ex_set_backslash_01.dump | 20 +++++ .../dumps/vim_ex_set_backslash_02.dump | 20 +++++ .../dumps/vim_ex_set_backslash_03.dump | 20 +++++ .../dumps/vim_ex_set_backslash_04.dump | 20 +++++ runtime/syntax/testdir/input/vim_ex_set.vim | 13 ++- .../testdir/input/vim_ex_set_backslash.vim | 79 +++++++++++++++++++ runtime/syntax/vim.vim | 29 +++++-- 16 files changed, 274 insertions(+), 26 deletions(-) create mode 100644 runtime/syntax/testdir/dumps/vim_ex_set_07.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_set_backslash_00.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_set_backslash_01.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_set_backslash_02.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_set_backslash_03.dump create mode 100644 runtime/syntax/testdir/dumps/vim_ex_set_backslash_04.dump create mode 100644 runtime/syntax/testdir/input/vim_ex_set_backslash.vim diff --git a/runtime/syntax/generator/vim.vim.base b/runtime/syntax/generator/vim.vim.base index 78abaf5a97..aa868e9f01 100644 --- a/runtime/syntax/generator/vim.vim.base +++ b/runtime/syntax/generator/vim.vim.base @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 Mar 29 +" Last Change: 2025 Apr 03 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -771,12 +771,31 @@ syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)' " Set command and associated set-options (vimOptions) with comment {{{2 syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimSetArgs -syn region vimSetArgs contained start="\S" skip=+\\|\|\n\s*\\\|\n\s*["#]\\ + matchgroup=vimCmdSep end="|" end="$" matchgroup=vimNotation end="<[cC][rR]>" keepend contains=@vimComment,@vimContinue,vimErrSetting,vimOption,vimSetAll,vimSetTermcap -syn region vimSetEqual contained matchgroup=vimOper start="[=:]\|[-+^]=" skip=+\\|\|\\\s\|\n\s*\\\|\n\s*["#]\\ \|^\s*\\\|^\s*["#]\\ + matchgroup=vimCmdSep end="|" end="\ze\s" end="$" contains=@vimContinue,vimCtrlChar,vimEnvvar,vimNotation,vimSetSep +syn region vimSetComment contained start=+"+ skip=+\n\s*\%(\\\||"\\ \)+ end="$" contains=@vimCommentGroup,vimCommentString extend +syn match vimSetCmdSep contained "|" skipwhite nextgroup=@vimCmdList,vimSubst1,vimFunc +syn match vimSetEscape contained "\\\%(\\[|"]\|.\)" +syn match vimSetBarEscape contained "\\|" +syn match vimSetQuoteEscape contained +\\"+ +syn region vimSetArgs contained + \ start="\S" + \ skip=+\n\s*\%(\\\|["#]\\ \)\|^\s*"\\ + + \ end=+\ze\\\@1| +0#0000000&@42 +@75 +|s+0#af5f00255&|e|t| +0#0000000&|l+0#e000e06&|a|n|g|m|a|p|++0#af5f00255&|=|Ф+0#0000000&|Ы|В|А|П|Р|О|Л|Д|Ж|Э|Ё|;|A|S|D|F|G|H|J|K|L|\@1|:+0#e000e06&|\+0#0000000&@1|"|\@1||| @30 +@6|\+0#e000e06&| +0#0000000&|l+0#e000e06&|a|n|g|m|a|p|++0#af5f00255&|=|Я+0#0000000&|Ч|С|М|И|Т|Ь|Б|Ю|;|Z|X|C|V|B|N|M|<+0#e000e06&|>| +0#0000000&@38 +@57|1|0|8|,|1| @8|9|7|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_07.dump b/runtime/syntax/testdir/dumps/vim_ex_set_07.dump new file mode 100644 index 0000000000..ef2b99c9cf --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_set_07.dump @@ -0,0 +1,20 @@ +| +0&#ffffff0@5|\+0#e000e06&| +0#0000000&|l+0#e000e06&|a|n|g|m|a|p|++0#af5f00255&|=|Я+0#0000000&|Ч|С|М|И|Т|Ь|Б|Ю|;|Z|X|C|V|B|N|M|<+0#e000e06&|>| +0#0000000&@38 +@75 +|s+0#af5f00255&|e|t| +0#0000000&|l+0#e000e06&|a|n|g|m|a|p|++0#af5f00255&|=|Ф+0#0000000&|Ы|В|А|П|Р|О|Л|Д|Ж|Э|Ё|;|A|S|D|F|G|H|J|K|L|\@1|:+0#e000e06&|\+0#0000000&@1|"|\@1||| |l+0#e000e06&|a|n|g|m|a|p|++0#af5f00255&|=|Я+0#0000000&|Ч|С|М|И|Т|Ь|Б|Ю|;|Z|X|C|V|B|N|M|<+0#e000e06&|>| +0#0000000&@1 +> @74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|1|2|4|,|0|-|1| @6|B|o|t| diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_backslash_00.dump b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_00.dump new file mode 100644 index 0000000000..9b7370db86 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_00.dump @@ -0,0 +1,20 @@ +>"+0#0000e05#ffffff0| |V|i|m| |:|s|e|t| |c|o|m@1|a|n|d| |(|e|s|c|a|p|e|d| |c|h|a|r|a|c|t|e|r|s|)| +0#0000000&@35 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|S|e|t|E|s|c|a|p|e| @5|D|i|f@1|A|d@1| +0#0000000&@24 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|S|e|t|B|a|r|E|s|c|a|p|e| @2|D|i|f@1|D|e|l|e|t|e| +0#0000000&@21 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|S|e|t|Q|u|o|t|e|E|s|c|a|p|e| |D|i|f@1|D|e|l|e|t|e| +0#0000000&@21 +|"+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|S|e|t|E|q|u|a|l| @6|D|i|f@1|C|h|a|n|g|e| +0#0000000&@21 +@75 +@75 +|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|-@1| |1| |-@1|"| +0#0000000&@60 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255|a|f+0&#ffd7ff255|o@1|\+0fd7ff255|a|b+0&#ffd7ff255|a|r|\+0fd7ff255|a| +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@36 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255|a|f+0&#ffd7ff255|o@1|\+0fd7ff255|a|b+0&#ffd7ff255|a|r|\+0fd7ff255|a| +0&#ffffff0@46 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255| |f+0&#ffd7ff255|o@1|\+0fd7ff255| |b+0&#ffd7ff255|a|r|\+0fd7ff255| | +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@36 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255| |f+0&#ffd7ff255|o@1|\+0fd7ff255| |b+0&#ffd7ff255|a|r|\+0fd7ff255| | +0&#ffffff0@46 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#4040ff13#afffff255|||f+0#0000000#ffd7ff255|o@1|\+0#4040ff13#afffff255|||b+0#0000000#ffd7ff255|a|r|\+0#4040ff13#afffff255||| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@36 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#4040ff13#afffff255|||f+0#0000000#ffd7ff255|o@1|\+0#4040ff13#afffff255|||b+0#0000000#ffd7ff255|a|r|\+0#4040ff13#afffff255||| +0#0000000#ffffff0@46 +@57|1|,|1| @10|T|o|p| diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_backslash_01.dump b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_01.dump new file mode 100644 index 0000000000..c99a3a6f4e --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_01.dump @@ -0,0 +1,20 @@ +|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255| |f+0&#ffd7ff255|o@1|\+0fd7ff255| |b+0&#ffd7ff255|a|r|\+0fd7ff255| | +0&#ffffff0@46 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#4040ff13#afffff255|||f+0#0000000#ffd7ff255|o@1|\+0#4040ff13#afffff255|||b+0#0000000#ffd7ff255|a|r|\+0#4040ff13#afffff255||| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@36 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +>s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#4040ff13#afffff255|||f+0#0000000#ffd7ff255|o@1|\+0#4040ff13#afffff255|||b+0#0000000#ffd7ff255|a|r|\+0#4040ff13#afffff255||| +0#0000000#ffffff0@46 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#4040ff13#afffff255|"|f+0#0000000#ffd7ff255|o@1|\+0#4040ff13#afffff255|"|b+0#0000000#ffd7ff255|a|r|\+0#4040ff13#afffff255|"| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@36 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#4040ff13#afffff255|"|f+0#0000000#ffd7ff255|o@1|\+0#4040ff13#afffff255|"|b+0#0000000#ffd7ff255|a|r|\+0#4040ff13#afffff255|"| +0#0000000#ffffff0@46 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +@75 +|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|-@1| |2| |-@1|"| +0#0000000&@60 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|a+0&#ffd7ff255|f|o@1|\+0fd7ff255@1|a+0&#ffd7ff255|b|a|r|\+0fd7ff255@1|a+0&#ffd7ff255| +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@33 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|a+0&#ffd7ff255|f|o@1|\+0fd7ff255@1|a+0&#ffd7ff255|b|a|r|\+0fd7ff255@1|a+0&#ffd7ff255| +0&#ffffff0@43 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1| +0&#ffffff0|f|o@1|\@1| |b|a|r|\@1| @1|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@33 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +@57|1|9|,|1| @9|2|1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_backslash_02.dump b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_02.dump new file mode 100644 index 0000000000..4250195d6c --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_02.dump @@ -0,0 +1,20 @@ +|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1| +0&#ffffff0|f|o@1|\@1| |b|a|r|\@1| @44 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|||f+0&#ffd7ff255|o@1|\+0fd7ff255@1|||b+0&#ffd7ff255|a|r|\+0fd7ff255@1||| +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@33 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +>s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|||f+0&#ffd7ff255|o@1|\+0fd7ff255@1|||b+0&#ffd7ff255|a|r|\+0fd7ff255@1||| +0&#ffffff0@43 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|"|f+0&#ffd7ff255|o@1|\+0fd7ff255@1|"|b+0&#ffd7ff255|a|r|\+0fd7ff255@1|"| +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@33 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|"|f+0&#ffd7ff255|o@1|\+0fd7ff255@1|"|b+0&#ffd7ff255|a|r|\+0fd7ff255@1|"| +0&#ffffff0@43 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +@75 +|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|-@1| |3| |-@1|"| +0#0000000&@60 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@2|a|f+0&#ffd7ff255|o@1|\+0fd7ff255@2|a|b+0&#ffd7ff255|a|r|\+0fd7ff255@2|a| +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@2|a|f+0&#ffd7ff255|o@1|\+0fd7ff255@2|a|b+0&#ffd7ff255|a|r|\+0fd7ff255@2|a| +0&#ffffff0@40 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@2| |f+0&#ffd7ff255|o@1|\+0fd7ff255@2| |b+0&#ffd7ff255|a|r|\+0fd7ff255@2| | +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +@57|3|7|,|1| @9|5|1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_backslash_03.dump b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_03.dump new file mode 100644 index 0000000000..f0f1662db0 --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_03.dump @@ -0,0 +1,20 @@ +|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@2| |f+0&#ffd7ff255|o@1|\+0fd7ff255@2| |b+0&#ffd7ff255|a|r|\+0fd7ff255@2| | +0&#ffffff0@40 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|\+0#4040ff13#afffff255|||f+0#0000000#ffd7ff255|o@1|\+0fd7ff255@1|\+0#4040ff13#afffff255|||b+0#0000000#ffd7ff255|a|r|\+0fd7ff255@1|\+0#4040ff13#afffff255||| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +>s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|\+0#4040ff13#afffff255|||f+0#0000000#ffd7ff255|o@1|\+0fd7ff255@1|\+0#4040ff13#afffff255|||b+0#0000000#ffd7ff255|a|r|\+0fd7ff255@1|\+0#4040ff13#afffff255||| +0#0000000#ffffff0@40 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|\+0#4040ff13#afffff255|"|f+0#0000000#ffd7ff255|o@1|\+0fd7ff255@1|\+0#4040ff13#afffff255|"|b+0#0000000#ffd7ff255|a|r|\+0fd7ff255@1|\+0#4040ff13#afffff255|"| +0#0000000#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@30 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@1|\+0#4040ff13#afffff255|"|f+0#0000000#ffd7ff255|o@1|\+0fd7ff255@1|\+0#4040ff13#afffff255|"|b+0#0000000#ffd7ff255|a|r|\+0fd7ff255@1|\+0#4040ff13#afffff255|"| +0#0000000#ffffff0@40 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +@75 +|e+0#af5f00255&|c|h|o| +0#0000000&|"+0#e000002&|-@1| |4| |-@1|"| +0#0000000&@60 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@3|a+0&#ffd7ff255|f|o@1|\+0fd7ff255@3|a+0&#ffd7ff255|b|a|r|\+0fd7ff255@3|a+0&#ffd7ff255| +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@27 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@3|a+0&#ffd7ff255|f|o@1|\+0fd7ff255@3|a+0&#ffd7ff255|b|a|r|\+0fd7ff255@3|a+0&#ffd7ff255| +0&#ffffff0@37 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@3| +0&#ffffff0|f|o@1|\@3| |b|a|r|\@3| @1|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@27 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +@57|5@1|,|1| @9|8|1|%| diff --git a/runtime/syntax/testdir/dumps/vim_ex_set_backslash_04.dump b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_04.dump new file mode 100644 index 0000000000..04e6eadc5d --- /dev/null +++ b/runtime/syntax/testdir/dumps/vim_ex_set_backslash_04.dump @@ -0,0 +1,20 @@ +|e+0#af5f00255#ffffff0|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@3| +0&#ffffff0|f|o@1|\@3| |b|a|r|\@3| @38 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@3|||f+0&#ffd7ff255|o@1|\+0fd7ff255@3|||b+0&#ffd7ff255|a|r|\+0fd7ff255@3||| +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@27 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +>s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@3|||f+0&#ffd7ff255|o@1|\+0fd7ff255@3|||b+0&#ffd7ff255|a|r|\+0fd7ff255@3||| +0&#ffffff0@37 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|\+0#0000000#5fd7ff255@3|"|f+0&#ffd7ff255|o@1|\+0fd7ff255@3|"|b+0&#ffd7ff255|a|r|\+0fd7ff255@3|"| +0&#ffffff0|"+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@27 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +|s+0#af5f00255&|e|t| +0#0000000&|t+0#e000e06&|i|t|l|e|s|t|r|i|n|g|=+0#af5f00255&|f+0#0000000#ffd7ff255|o@1|\+0fd7ff255@3|"|\@3|"|b+0&#ffd7ff255|a|r|\+0fd7ff255@3|"| +0&#ffffff0@37 +|e+0#af5f00255&|c|h|o| +0#0000000&|&+0#00e0e07&|t|i|t|l|e|s|t|r|i|n|g| +0#0000000&@57 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@56|7|3|,|1| @9|B|o|t| diff --git a/runtime/syntax/testdir/input/vim_ex_set.vim b/runtime/syntax/testdir/input/vim_ex_set.vim index 0b1d0101a4..e1bfc0f9c2 100644 --- a/runtime/syntax/testdir/input/vim_ex_set.vim +++ b/runtime/syntax/testdir/input/vim_ex_set.vim @@ -93,7 +93,7 @@ set path= \abc,def -" CompilerSet +" :CompilerSet CompilerSet makeprg=ant CompilerSet errorformat=\ %#[%.%#]\ %#%f:%l:%v:%*\\d:%*\\d:\ %t%[%^:]%#:%m, @@ -111,3 +111,14 @@ echo "Foo" set quoteescape=\ echo "Foo" + +" Issue #16913 (vim syntax: set langmap may have wrong highlight) + +set langmap+=ФЫВАПРОЛДЖЭЁ;ASDFGHJKL\\:\\"\\| +set langmap+=ЯЧСМИТЬБЮ;ZXCVBNM<> + +set langmap+=ФЫВАПРОЛДЖЭЁ;ASDFGHJKL\\:\\"\\| + \ langmap+=ЯЧСМИТЬБЮ;ZXCVBNM<> + +set langmap+=ФЫВАПРОЛДЖЭЁ;ASDFGHJKL\\:\\"\\| langmap+=ЯЧСМИТЬБЮ;ZXCVBNM<> + diff --git a/runtime/syntax/testdir/input/vim_ex_set_backslash.vim b/runtime/syntax/testdir/input/vim_ex_set_backslash.vim new file mode 100644 index 0000000000..53851a7693 --- /dev/null +++ b/runtime/syntax/testdir/input/vim_ex_set_backslash.vim @@ -0,0 +1,79 @@ +" Vim :set command (escaped characters) +" VIM_TEST_SETUP hi link vimSetEscape DiffAdd +" VIM_TEST_SETUP hi link vimSetBarEscape DiffDelete +" VIM_TEST_SETUP hi link vimSetQuoteEscape DiffDelete +" VIM_TEST_SETUP hi link vimSetEqual DiffChange + + +echo "-- 1 --" +set titlestring=\afoo\abar\a " comment +echo &titlestring +set titlestring=\afoo\abar\a +echo &titlestring +set titlestring=\ foo\ bar\ " comment +echo &titlestring +set titlestring=\ foo\ bar\ +echo &titlestring +set titlestring=\|foo\|bar\| " comment +echo &titlestring +set titlestring=\|foo\|bar\| +echo &titlestring +set titlestring=\"foo\"bar\" " comment +echo &titlestring +set titlestring=\"foo\"bar\" +echo &titlestring + +echo "-- 2 --" +set titlestring=\\afoo\\abar\\a " comment +echo &titlestring +set titlestring=\\afoo\\abar\\a +echo &titlestring +set titlestring=\\ foo\\ bar\\ " comment +echo &titlestring +set titlestring=\\ foo\\ bar\\ +echo &titlestring +set titlestring=\\|foo\\|bar\\| " comment +echo &titlestring +set titlestring=\\|foo\\|bar\\| +echo &titlestring +set titlestring=\\"foo\\"bar\\" " comment +echo &titlestring +set titlestring=\\"foo\\"bar\\" +echo &titlestring + +echo "-- 3 --" +set titlestring=\\\afoo\\\abar\\\a " comment +echo &titlestring +set titlestring=\\\afoo\\\abar\\\a +echo &titlestring +set titlestring=\\\ foo\\\ bar\\\ " comment +echo &titlestring +set titlestring=\\\ foo\\\ bar\\\ +echo &titlestring +set titlestring=\\\|foo\\\|bar\\\| " comment +echo &titlestring +set titlestring=\\\|foo\\\|bar\\\| +echo &titlestring +set titlestring=\\\"foo\\\"bar\\\" " comment +echo &titlestring +set titlestring=\\\"foo\\\"bar\\\" +echo &titlestring + +echo "-- 4 --" +set titlestring=\\\\afoo\\\\abar\\\\a " comment +echo &titlestring +set titlestring=\\\\afoo\\\\abar\\\\a +echo &titlestring +set titlestring=\\\\ foo\\\\ bar\\\\ " comment +echo &titlestring +set titlestring=\\\\ foo\\\\ bar\\\\ +echo &titlestring +set titlestring=\\\\|foo\\\\|bar\\\\| " comment +echo &titlestring +set titlestring=\\\\|foo\\\\|bar\\\\| +echo &titlestring +set titlestring=\\\\"foo\\\\"bar\\\\" " comment +echo &titlestring +set titlestring=foo\\\\"\\\\"bar\\\\" +echo &titlestring + diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim index 2a833e4d8d..228e741df5 100644 --- a/runtime/syntax/vim.vim +++ b/runtime/syntax/vim.vim @@ -2,7 +2,7 @@ " Language: Vim script " Maintainer: Hirohito Higashi " Doug Kearns -" Last Change: 2025 Mar 29 +" Last Change: 2025 Apr 03 " Former Maintainer: Charles E. Campbell " DO NOT CHANGE DIRECTLY. @@ -823,12 +823,31 @@ syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)' " Set command and associated set-options (vimOptions) with comment {{{2 syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimSetArgs -syn region vimSetArgs contained start="\S" skip=+\\|\|\n\s*\\\|\n\s*["#]\\ + matchgroup=vimCmdSep end="|" end="$" matchgroup=vimNotation end="<[cC][rR]>" keepend contains=@vimComment,@vimContinue,vimErrSetting,vimOption,vimSetAll,vimSetTermcap -syn region vimSetEqual contained matchgroup=vimOper start="[=:]\|[-+^]=" skip=+\\|\|\\\s\|\n\s*\\\|\n\s*["#]\\ \|^\s*\\\|^\s*["#]\\ + matchgroup=vimCmdSep end="|" end="\ze\s" end="$" contains=@vimContinue,vimCtrlChar,vimEnvvar,vimNotation,vimSetSep +syn region vimSetComment contained start=+"+ skip=+\n\s*\%(\\\||"\\ \)+ end="$" contains=@vimCommentGroup,vimCommentString extend +syn match vimSetCmdSep contained "|" skipwhite nextgroup=@vimCmdList,vimSubst1,vimFunc +syn match vimSetEscape contained "\\\%(\\[|"]\|.\)" +syn match vimSetBarEscape contained "\\|" +syn match vimSetQuoteEscape contained +\\"+ +syn region vimSetArgs contained + \ start="\S" + \ skip=+\n\s*\%(\\\|["#]\\ \)\|^\s*"\\ + + \ end=+\ze\\\@1