runtime(sh): Update syntax, fix single-quoted strings in parameter expansions
Commit: https://github.com/vim/vim/commit/fe22867ef564ea78cafaabe0c784222638399cb9 Author: Doug Kearns <dougkea...@gmail.com> Date: Mon May 5 20:10:11 2025 +0200 runtime(sh): Update syntax, fix single-quoted strings in parameter expansions Ignore single-quoted backslash escape sequences in parameter expansions. \' is not an escaped single quote in ${foo:-'word\'}. closes: #17261 Signed-off-by: Doug Kearns <dougkea...@gmail.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/runtime/syntax/sh.vim b/runtime/syntax/sh.vim index f0a6685b6..4add7921f 100644 --- a/runtime/syntax/sh.vim +++ b/runtime/syntax/sh.vim @@ -11,6 +11,7 @@ " 2025 Apr 03 command substitution opening paren at EOL (#17026) " 2025 Apr 10 improve shell detection (#17084) " 2025 Apr 29 match escaped chars in test operands (#17221) +" 2025 May 06 improve single-quote string matching in parameter expansions " Version: 208 " Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH " For options and settings, please use: :help ft-sh-syntax @@ -649,7 +650,7 @@ if exists("b:is_bash") syn match shDerefOp contained "[,^]\{1,2}" nextgroup=@shDerefPatternList syn match shDerefOp contained "@[uULQEPAKa]" endif -syn region shDerefString contained matchgroup=shDerefDelim start=+\%(\\)\@<!'+ end=+'+ contains=shStringSpecial +syn region shDerefString contained matchgroup=shDerefDelim start=+\%(\\)\@<!'+ end=+'+ syn region shDerefString contained matchgroup=shDerefDelim start=+\%(\\)\@<!"+ skip=+\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial syn match shDerefString contained "\["']" nextgroup=shDerefPattern diff --git a/runtime/syntax/testdir/dumps/sh_quoting_00.dump b/runtime/syntax/testdir/dumps/sh_quoting_00.dump new file mode 100644 index 000000000..a1beb8f4d --- /dev/null +++ b/runtime/syntax/testdir/dumps/sh_quoting_00.dump @@ -0,0 +1,20 @@ +>#+0#0000e05#ffffff0|!|/|b|i|n|/|d|a|s|h| +0#0000000&@63 +@75 +|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|:+0#af5f00255&|-|'|s+0#e000002&|t|r|i|n|g| |\|'+0#af5f00255&|}+0#e000e06&| +0#0000000&@51 +@75 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +|i+0#0000000&|s|_|d|a|s|h|:| |1|,| |i|s|_|p|o|s|i|x|:| |1|,| |i|s|_|s|h|:| |1|,| @22|1|,|1| @10|A|l@1| diff --git a/runtime/syntax/testdir/input/sh_quoting.sh b/runtime/syntax/testdir/input/sh_quoting.sh new file mode 100644 index 000000000..dc6a5152f --- /dev/null +++ b/runtime/syntax/testdir/input/sh_quoting.sh @@ -0,0 +1,4 @@ +#!/bin/dash + +echo ${foo:-'string \'} + -- -- 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/E1uC0LO-009ta4-DY%40256bit.org.