mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
runtime(sh): Update syntax, match KornShell compound arrays
closes: #17268 Signed-off-by: Doug Kearns <dougkearns@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
55f9e2bef9
commit
87947a9a76
@@ -12,6 +12,7 @@
|
|||||||
" 2025 Apr 10 improve shell detection (#17084)
|
" 2025 Apr 10 improve shell detection (#17084)
|
||||||
" 2025 Apr 29 match escaped chars in test operands (#17221)
|
" 2025 Apr 29 match escaped chars in test operands (#17221)
|
||||||
" 2025 May 06 improve single-quote string matching in parameter expansions
|
" 2025 May 06 improve single-quote string matching in parameter expansions
|
||||||
|
" 2025 May 06 match KornShell compound arrays
|
||||||
" Version: 208
|
" Version: 208
|
||||||
" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH
|
" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH
|
||||||
" For options and settings, please use: :help ft-sh-syntax
|
" For options and settings, please use: :help ft-sh-syntax
|
||||||
@@ -511,13 +512,18 @@ syn match shSetOption "\s\zs[-+][a-zA-Z0-9]\+\>" contained
|
|||||||
syn match shVariable "\<\h\w*\ze=" nextgroup=shVarAssign
|
syn match shVariable "\<\h\w*\ze=" nextgroup=shVarAssign
|
||||||
if exists("b:is_bash")
|
if exists("b:is_bash")
|
||||||
" The subscript form for array values, e.g. "foo=([2]=10 [4]=100)".
|
" 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 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
|
endif
|
||||||
if exists("b:is_bash") || exists("b:is_kornshell")
|
if exists("b:is_bash") || exists("b:is_kornshell")
|
||||||
syn match shVariable "\<\h\w*\%(\[..\{-}\]\)\=\ze\%([|^&*/%+-]\|[<^]<\|[>^]>\)\==" contains=shDerefVarArray nextgroup=shVarAssign
|
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 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
|
else
|
||||||
syn match shVarAssign contained "=" nextgroup=shPattern,shDeref,shDerefSimple,shDoubleQuote,shExDoubleQuote,shSingleQuote,shExSingleQuote,shVar
|
syn match shVarAssign contained "=" nextgroup=shPattern,shDeref,shDerefSimple,shDoubleQuote,shExDoubleQuote,shSingleQuote,shExSingleQuote,shVar
|
||||||
endif
|
endif
|
||||||
|
20
runtime/syntax/testdir/dumps/sh_ksh_array_00.dump
Normal file
20
runtime/syntax/testdir/dumps/sh_ksh_array_00.dump
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
>#+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|
|
20
runtime/syntax/testdir/dumps/sh_ksh_array_01.dump
Normal file
20
runtime/syntax/testdir/dumps/sh_ksh_array_01.dump
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
| +0&#ffffff0@3|[+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
|
||||||
|
> @74
|
||||||
|
|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|f|o@1|[|1+0#e000002&|]+0#e000e06&|[|1+0#e000002&|]+0#e000e06&|}| +0#e000002&|#+0#0000e05&| |=|>| |1@1| +0#0000000&@49
|
||||||
|
|e+0#af5f00255&|c|h|o| +0#e000002&|$+0#e000e06&|{|b|a|r|[|1+0#e000002&|]+0#e000e06&|[|1+0#e000002&|]+0#e000e06&|}| +0#e000002&|#+0#0000e05&| |=|>| |1@1| +0#0000000&@49
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
| +0#0000000&@56|1|9|,|0|-|1| @7|B|o|t|
|
21
runtime/syntax/testdir/input/sh_ksh_array.sh
Executable file
21
runtime/syntax/testdir/input/sh_ksh_array.sh
Executable file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/ksh
|
||||||
|
|
||||||
|
foo=(
|
||||||
|
( 00 01 )
|
||||||
|
( 10 11 )
|
||||||
|
)
|
||||||
|
|
||||||
|
bar=(
|
||||||
|
[0]=(
|
||||||
|
[0]=00
|
||||||
|
[1]=01
|
||||||
|
)
|
||||||
|
[1]=(
|
||||||
|
[0]=10
|
||||||
|
[1]=11
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
echo ${foo[1][1]} # => 11
|
||||||
|
echo ${bar[1][1]} # => 11
|
Reference in New Issue
Block a user