diff --git a/autoload/easy_align.vim b/autoload/easy_align.vim index d89bc1f..7fdd30d 100644 --- a/autoload/easy_align.vim +++ b/autoload/easy_align.vim @@ -49,10 +49,10 @@ let s:known_options = { \ } let s:option_values = { -\ 'indentation': ['shallow', 'deep', 'none', 'keep'], -\ 'delimiter_align': ['left', 'center', 'right'], -\ 'ignore_unmatched': [0, 1], -\ 'ignore_groups': [[], ['String'], ['Comment'], ['String', 'Comment']] +\ 'indentation': ['shallow', 'deep', 'none', 'keep', -1], +\ 'delimiter_align': ['left', 'center', 'right', -1], +\ 'ignore_unmatched': [0, 1, -1], +\ 'ignore_groups': [[], ['String'], ['Comment'], ['String', 'Comment'], -1] \ } let s:shorthand = { @@ -561,6 +561,15 @@ function! s:atoi(str) return (a:str =~ '^[0-9]\+$') ? str2nr(a:str) : a:str endfunction +function! s:shift_opts(opts, key, vals) + let val = s:shift(a:vals, 1) + if type(val) == 0 && val == -1 + call remove(a:opts, a:key) + else + let a:opts[a:key] = val + endif +endfunction + function! s:interactive(modes, vis, opts, delims) let mode = s:shift(a:modes, 1) let n = '' @@ -604,9 +613,9 @@ function! s:interactive(modes, vis, opts, delims) else | let n = n . ch end elseif ch == "\" - let opts['da'] = s:shift(vals['delimiter_align'], 1) + call s:shift_opts(opts, 'da', vals['delimiter_align']) elseif ch == "\" - let opts['idt'] = s:shift(vals['indentation'], 1) + call s:shift_opts(opts, 'idt', vals['indentation']) elseif ch == "\" let lm = s:input("Left margin: ", get(opts, 'lm', ''), a:vis) if empty(lm) @@ -624,9 +633,9 @@ function! s:interactive(modes, vis, opts, delims) let opts['rm'] = s:atoi(rm) endif elseif ch == "\" - let opts['iu'] = s:shift(vals['ignore_unmatched'], 1) + call s:shift_opts(opts, 'iu', vals['ignore_unmatched']) elseif ch == "\" - let opts['ig'] = s:shift(vals['ignore_groups'], 1) + call s:shift_opts(opts, 'ig', vals['ignore_groups']) elseif c == "\" let opts['stl'] = 1 let opts['lm'] = 0 diff --git a/test/basic.script b/test/basic.script index 4df7586..26a329d 100644 --- a/test/basic.script +++ b/test/basic.script @@ -1 +1 @@ -4Gvipjyvip Pvip 2 Pvip * Pvip Pvip 2 Pvip * Pvip ** Pvip - Pvip -2 Pvip -1 Pvip ** 60zzvipjyvip *|Pvip *|Pvip **|80zzvip **|gv 3|vip *|90zzvip *,100zzvipjyvip =Pvip *=Pvip **=Pvip =vip 2=198Gvipjyvip =Pvip -=Pf:jj3E =209Gvip - 214zzvipjyvip #P:let g:easy_align_delimiters = { '#': {'pattern': '#\+', 'ignore_groups': ['String'] } } vip #227zzvip :239zzvip *=vipjyP:let g:easy_align_ignore_groups = [] vip *=:unlet g:easy_align_delimiters :unlet g:easy_align_ignore_groups 4Gvipy4GP7Gojkkvip:EasyAlign /1/{'ml':'{{', 'mr-r':'}}'} vipjyPvip:EasyAlign */../ 263zzvipjygv .Pvip *.Pvip * .Pvip .vip 2.Pvip **.Pvip **.Pvip -.G303zzvip .310zzvipjygv *|Pvip *|Pvip |gv -|gv **|gv *|gv **|jji jjjhi vip ** |339Gpvip:EasyAlign*|{'ml': 5, 'mrr': 0 } 349Gpvip:EasyAlign*/|/{'ml':'~', 'mrr': 4} 362G:let g:easy_align_delimiters = { 'd': { 'pattern': '\s\+\(\S\+\s*[;=]\)\@=', 'left_margin': 0, 'right_margin': 0 } } vip dgv =236GvipjyPvip :377Gvip gv 2 382Gvipjyvip:EasyAlign/-\+/ Pvip:EasyAlign2/-\+/ Pvip:EasyAlign*/-\+/ Pvip:EasyAlign*/-\+/{'da': L} Pvip:EasyAlign/-\+/{'da': c} Pvip:EasyAlign*/-\+/{'delimiter_align':'C'} Pvip:EasyAlign*/-\+/{'da': 'x'} 381Gpvip:EasyAlign/-\+/{'da':r} :let g:easy_align_delimiter_align = 'l' Pvip:EasyAlign/-\+/ Pvip:EasyAlign*/-\+/ :unlet g:easy_align_delimiter_align :let g:easy_align_delimiters['\'] = { 'pattern': '-\+', 'delimiter_align': 'c' } Pvip \Pvip *-\Pvip:EasyAlign *\\ {'da':l} Pvip:EasyAlign*\\ Pvip:EasyAlign*\\{'da': 'R'} 377GvipjyPvip:EasyAlign\ {'l': '@@@'} gv:EasyAlign 2 \ {'l': '{{{'} 507Gvipjygv:EasyAlign= Pvip:EasyAlign = {'idt': s} Pvip:EasyAlign= {'idt': d} Pvip:EasyAlign**={'indentation': 'd'} Pvip:EasyAlign!= Pvip:EasyAlign! **= {'indent': s} Pvip:EasyAlign!* = {'idt': D} Pvip:EasyAlign! ={'idt':'S'} 507GPvip:EasyAlign-={'idt':d} PA = 2j.j.j.j.vip:EasyAlign2={'idt': s} 507GPljjjj$:EasyAlign = {'idt': s} Pljjjj$:EasyAlign={'indent':d} Phhxxvip:EasyAlign={'idt':'s'} 525Gvipjy507GPPvip:EasyAlign*={'idt':s} Pvip:EasyAlign!**={'idt':s} Pvip:EasyAlign = {'idt': D} 525G^hhr1jr1jr1jr1jr1llkkkk$:EasyAlign = { 'idt': s } 513GvipjyPvip:EasyAlign*={'idt':n} Pvip:EasyAlign = { 'idt': N } Pvip:EasyAlign!*= {'idt': 'n'} 630Gvipjygv =Pvip =656Gvipjygv =Pvip *=Pvip **=Pvip **=Pvip:EasyAlign**= {'iu':0} Pvip =vip 2=vip -0 =818Gvipjygv =Pvip 2=Pvip *=Pvip **=Pvip **=Pvip -0=Pvip -0=855Gvip ** 860Gvip 2=}863Gvip 2=866Gvip 2=869Gvip 2=872Gvip *=875Gvip 2 878Gvip 2 881Gvip:EasyAlign**={'m': 'c','idt':s} ggjjj70Gvipjy883Gpvip *|vipjy893Gpvip:EasyAlign*|{'m': 'lcr'} 903Gpvip:EasyAlign**|{'m':'llc'} 913Gpvip:s/^|// vip:EasyAlign*|{'idt':n} vip:EasyAlign**|{'m':'cl'} 107GvipjyPvip  *=Pvip  *=975GVj 2=978Gvipjygv =Pvip =Pvip =Pvip =Pvip 2=993Gvip =996Gvip =999Gvip =1002Gvip =vipjyPvip =Pvip =1023Gvip =1026Gvip =1030Gvip =1033Gvip =1036Gvip 3=vipjyPvip 2=1044Gvip *,1052Gvipjygv:EasyAlign{'m':'lrc*'} 3 Pvip:EasyAlign{'mode_seq':'lrc**'} 2 Pvip:EasyAlign{'ms':'lccr**'} 1066Goa = 1 bb = 2 ccccc ddd = 3vipyvip =OPvip  = +4Gvipjyvip Pvip 2 Pvip * Pvip Pvip 2 Pvip * Pvip ** Pvip - Pvip -2 Pvip -1 Pvip ** 60zzvipjyvip *|Pvip *|Pvip **|80zzvip **|gv 3|vip *|90zzvip *,100zzvipjyvip =Pvip *=Pvip **=Pvip =vip 2=198Gvipjyvip =Pvip -=Pf:jj3E =209Gvip - 214zzvipjyvip #P:let g:easy_align_delimiters = { '#': {'pattern': '#\+', 'ignore_groups': ['String'] } } vip #227zzvip :239zzvip *=vipjyP:let g:easy_align_ignore_groups = [] vip *=:unlet g:easy_align_delimiters :unlet g:easy_align_ignore_groups 4Gvipy4GP7Gojkkvip:EasyAlign /1/{'ml':'{{', 'mr-r':'}}'} vipjyPvip:EasyAlign */../ 263zzvipjygv .Pvip *.Pvip * .Pvip .vip 2.Pvip **.Pvip **.Pvip -.G303zzvip .310zzvipjygv *|Pvip *|Pvip |gv -|gv **|gv *|gv **|jji jjjhi vip ** |339Gpvip:EasyAlign*|{'ml': 5, 'mrr': 0 } 349Gpvip:EasyAlign*/|/{'ml':'~', 'mrr': 4} 362G:let g:easy_align_delimiters = { 'd': { 'pattern': '\s\+\(\S\+\s*[;=]\)\@=', 'left_margin': 0, 'right_margin': 0 } } vip dgv =236GvipjyPvip :377Gvip gv 2 382Gvipjyvip:EasyAlign/-\+/ Pvip:EasyAlign2/-\+/ Pvip:EasyAlign*/-\+/ Pvip:EasyAlign*/-\+/{'da': L} Pvip:EasyAlign/-\+/{'da': c} Pvip:EasyAlign*/-\+/{'delimiter_align':'C'} Pvip:EasyAlign*/-\+/{'da': 'x'} 381Gpvip:EasyAlign/-\+/{'da':r} :let g:easy_align_delimiter_align = 'l' Pvip:EasyAlign/-\+/ Pvip:EasyAlign*/-\+/ :unlet g:easy_align_delimiter_align :let g:easy_align_delimiters['\'] = { 'pattern': '-\+', 'delimiter_align': 'c' } Pvip \Pvip *-\Pvip:EasyAlign *\\ {'da':l} Pvip:EasyAlign*\\ Pvip:EasyAlign*\\{'da': 'R'} 377GvipjyPvip:EasyAlign\ {'l': '@@@'} gv:EasyAlign 2 \ {'l': '{{{'} 507Gvipjygv:EasyAlign= Pvip:EasyAlign = {'idt': s} Pvip:EasyAlign= {'idt': d} Pvip:EasyAlign**={'indentation': 'd'} Pvip:EasyAlign!= Pvip:EasyAlign! **= {'indent': s} Pvip:EasyAlign!* = {'idt': D} Pvip:EasyAlign! ={'idt':'S'} 507GPvip:EasyAlign-={'idt':d} PA = 2j.j.j.j.vip:EasyAlign2={'idt': s} 507GPljjjj$:EasyAlign = {'idt': s} Pljjjj$:EasyAlign={'indent':d} Phhxxvip:EasyAlign={'idt':'s'} 525Gvipjy507GPPvip:EasyAlign*={'idt':s} Pvip:EasyAlign!**={'idt':s} Pvip:EasyAlign = {'idt': D} 525G^hhr1jr1jr1jr1jr1llkkkk$:EasyAlign = { 'idt': s } 513GvipjyPvip:EasyAlign*={'idt':n} Pvip:EasyAlign = { 'idt': N } Pvip:EasyAlign!*= {'idt': 'n'} 630Gvipjygv =Pvip =656Gvipjygv =Pvip *=Pvip **=Pvip **=Pvip:EasyAlign**= {'iu':0} Pvip =vip 2=vip -0 =818Gvipjygv =Pvip 2=Pvip *=Pvip **=Pvip **=Pvip -0=Pvip -0=855Gvip ** 860Gvip 2=}863Gvip 2=866Gvip 2=869Gvip 2=872Gvip *=875Gvip 2 878Gvip 2 881Gvip:EasyAlign**={'m': 'c','idt':s} ggjjj70Gvipjy883Gpvip *|vipjy893Gpvip:EasyAlign*|{'m': 'lcr'} 903Gpvip:EasyAlign**|{'m':'llc'} 913Gpvip:s/^|// vip:EasyAlign*|{'idt':n} vip:EasyAlign**|{'m':'cl'} 107GvipjyPvip  *=Pvip  *=975GVj 2=978Gvipjygv =Pvip =Pvip =Pvip =Pvip 2=993Gvip =996Gvip =999Gvip =1002Gvip =vipjyPvip =Pvip =1023Gvip =1026Gvip =1030Gvip =1033Gvip =1036Gvip 3=vipjyPvip 2=1044Gvip *,1052Gvipjygv:EasyAlign{'m':'lrc*'} 3 Pvip:EasyAlign{'mode_seq':'lrc**'} 2 Pvip:EasyAlign{'ms':'lccr**'} 1066Goa = 1 bb = 2 ccccc ddd = 3vipyvip =OPvip  =