diff --git a/autoload/rainbow.vim b/autoload/rainbow.vim index d71f0fc..af024c0 100644 --- a/autoload/rainbow.vim +++ b/autoload/rainbow.vim @@ -28,9 +28,9 @@ fun s:resolve_parenthesis_with(init_state, p) elseif k == 'contained' let contained = 1 elseif k == 'kind' - let kind = v + let kind = s:trim(v) elseif k == 'upkind' - let upkind = v + let upkind = s:trim(v) else let paren .= s endif @@ -62,17 +62,14 @@ fun rainbow#syn(config) let kindlist = {} for id in range(len(conf.parentheses)) let [paren, contained, containedin, contains_prefix, contains, op, kind, upkind] = s:resolve_parenthesis_with(glob_paran_opts, conf.parentheses[id]) - let kind = split(kind, ',') - if kind == [] - let kind = [''] - endif + let kind = kind == '' ? [''] : split(kind, ',', 1)->uniq() + let upkind = (upkind == '' ? [] : split(upkind, ',', 1))->extend(kind)->uniq() for k in kind if !has_key(kindlist, k) - let kindlist[k] = [] - endif + let kindlist[k] = [] + endif call add(kindlist[k], id) endfor - let upkind = split(upkind, ',', 1)->extend(kind)->uniq() for lv in range(cycle) let uplv = ((lv + cycle - 1) % cycle) let [rid, pid, upid] = [s:synID(prefix, 'r', lv, id), s:synID(prefix, 'p', lv, id), upkind->mapnew('"@".s:synGroupID(prefix, "Regions", uplv, v:val)')->join(',')] diff --git a/autoload/rainbow_main.vim b/autoload/rainbow_main.vim index dee0d7c..e5d4b8b 100644 --- a/autoload/rainbow_main.vim +++ b/autoload/rainbow_main.vim @@ -45,11 +45,13 @@ let s:rainbow_conf = { \ 'parentheses': ['start=/(/ end=/)/', 'start=/{/ end=/}/', 'start=/\v\[\ze($|!(\=*\[))/ end=/\]/'], \ }, \ 'zsh': { -\ 'parentheses': ['start=/((/ end=/))/ kind=arithQuote upkind=,', 'start=/\v\(\ze($|[^(])/ end=/)/', -\ 'start=/(/ end=/)/ contained containedin=zshMathSubst upkind=arithQuote', -\ 'start=/\$\zs((/ end=/))/ contained containedin=zshMathSubst upkind=arithQuote', +\ 'parentheses': [ +\ 'start=/\v\(\ze($|[^(])/ end=/)/', +\ 'start=/((/ end=/))/ kind=arithQuote upkind=,', +\ 'start=/\$((/ end=/))/ kind=arithQuote upkind=,arithInner', +\ 'start=/(/ end=/)/ contained kind=arithInner upkind=arithQuote', \ 'start=/\V[[/ end=/]]/', 'start=/\v\[\ze($|[^[])/ end=/]/', -\ 'start=/{/ end=/}/'] +\ 'start=/{/ end=/}/'], \ }, \ 'perl': { \ 'syn_name_prefix': 'perlBlockFoldRainbow', diff --git a/tests/test.zsh b/tests/test.zsh new file mode 100644 index 0000000..5760c9e --- /dev/null +++ b/tests/test.zsh @@ -0,0 +1,6 @@ +(((($(((1+(2+3))))+4*5)*6))) +[[ $((1 + 2)) == $([ ] || echo 3) ]] + +function f() { +} +