" 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
+" 2025 May 06 match KornShell compound arrays
" Version: 208
" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH
" For options and settings, please use: :help ft-sh-syntax
syn match shVariable "\<\h\w*\ze=" nextgroup=shVarAssign
if exists("b:is_bash")
" The subscript form for array values, e.g. "foo=([2]=10 [4]=100)".
- syn region shArrayValue contained start="\[\%(..\{-}\]=\)\@=" end="\]=\@=" contains=@shArrayValueList nextgroup=shVarAssign
+ syn region shArrayValue contained start="\[\%(..\{-}\]=\)\@=" end="\]=\@=" contains=@shArrayValueList nextgroup=shVarAssign
syn cluster shArrayValueList contains=shArithmetic,shArithParen,shCommandSub,shDeref,shDerefSimple,shExpr,shNumber,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shSpecial,shParen,bashSpecialVariables,shParenError
+ syn region shArrayRegion contained matchgroup=shShellVariables start="(" skip='\\\\\|\\.' end=")" contains=@shArrayValueList,shArrayValue,shComment
+elseif exists("b:is_kornshell")
+ " The subscript form for array values, e.g. "foo=([2]=10 [4]=100)".
+ syn region shArrayValue contained start="\[\%(..\{-}\]=\)\@=" end="\]=\@=" contains=@shArrayValueList nextgroup=shVarAssign
+ syn cluster shArrayValueList contains=shArithmetic,shArithParen,shCommandSub,shDeref,shDerefSimple,shExpr,shNumber,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shSpecial,shParen,kshSpecialVariables,shParenError
+ syn region shArrayRegion contained matchgroup=shShellVariables start="(" skip='\\\\\|\\.' end=")" contains=@shArrayValueList,shArrayValue,shComment,shArrayRegion
endif
if exists("b:is_bash") || exists("b:is_kornshell")
syn match shVariable "\<\h\w*\%(\[..\{-}\]\)\=\ze\%([|^&*/%+-]\|[<^]<\|[>^]>\)\==" contains=shDerefVarArray nextgroup=shVarAssign
syn match shVarAssign contained "\%([|^&*/%+-]\|[<^]<\|[>^]>\)\==" nextgroup=shArrayRegion,shPattern,shDeref,shDerefSimple,shDoubleQuote,shExDoubleQuote,shSingleQuote,shExSingleQuote,shVar
- syn region shArrayRegion contained matchgroup=shShellVariables start="(" skip='\\\\\|\\.' end=")" contains=@shArrayValueList,shArrayValue,shComment
else
syn match shVarAssign contained "=" nextgroup=shPattern,shDeref,shDerefSimple,shDoubleQuote,shExDoubleQuote,shSingleQuote,shExSingleQuote,shVar
endif
--- /dev/null
+>#+0#0000e05#ffffff0|!|/|b|i|n|/|k|s|h| +0#0000000&@64
+@75
+|f+0#00e0e07&|o@1|=+0#0000000&|(+0#e000e06&| +0#0000000&@69
+@2|(+0#e000e06&| |0+0#e000002&@1| +0#e000e06&|0+0#e000002&|1| +0#e000e06&|)| +0#0000000&@63
+@2|(+0#e000e06&| |1+0#e000002&|0| +0#e000e06&|1+0#e000002&@1| +0#e000e06&|)| +0#0000000&@63
+|)+0#e000e06&| +0#0000000&@73
+@75
+|b+0#00e0e07&|a|r|=+0#0000000&|(+0#e000e06&| +0#0000000&@69
+@2|[+0#e000e06&|0+0#e000002&|]+0#e000e06&|=+0#0000000&|(+0#e000e06&| +0#0000000&@67
+@4|[+0#e000e06&|0+0#e000002&|]+0#e000e06&|=+0#0000000&|0+0#e000002&@1| +0#0000000&@64
+@4|[+0#e000e06&|1+0#e000002&|]+0#e000e06&|=+0#0000000&|0+0#e000002&|1| +0#0000000&@64
+@2|)+0#e000e06&| +0#0000000&@71
+@2|[+0#e000e06&|1+0#e000002&|]+0#e000e06&|=+0#0000000&|(+0#e000e06&| +0#0000000&@67
+@4|[+0#e000e06&|0+0#e000002&|]+0#e000e06&|=+0#0000000&|1+0#e000002&|0| +0#0000000&@64
+@4|[+0#e000e06&|1+0#e000002&|]+0#e000e06&|=+0#0000000&|1+0#e000002&@1| +0#0000000&@64
+@2|)+0#e000e06&| +0#0000000&@71
+|)+0#e000e06&| +0#0000000&@73
+@75
+@75
+|i|s|_|k|o|r|n|s|h|e|l@1|:| |1|,| @40|1|,|1| @10|T|o|p|