From 2daae46a43f6e7b9022cbde1dd451d4f798f5f72 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Thu, 31 Oct 2013 12:31:55 +0900 Subject: [PATCH] Fix `indentation` option to work with hard tabs (#19) --- autoload/easy_align.vim | 23 ++++++++++++++++++----- test/interactive.vader | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/autoload/easy_align.vim b/autoload/easy_align.vim index b22a754..1405d04 100644 --- a/autoload/easy_align.vim +++ b/autoload/easy_align.vim @@ -422,11 +422,11 @@ function! s:do_align(todo, modes, all_tokens, all_delims, fl, ll, fc, lc, nth, r if a:nth == 1 let idt = d.indentation if idt ==? 'd' - let indent = repeat(' ', max.indent) + let indent = max.indent elseif idt ==? 's' - let indent = repeat(' ', min_indent) + let indent = min_indent elseif idt ==? 'n' - let indent = '' + let indent = 0 elseif idt !=? 'k' call s:exit('Invalid indentation: ' . idt) end @@ -439,9 +439,22 @@ function! s:do_align(todo, modes, all_tokens, all_delims, fl, ll, fc, lc, nth, r for [line, elems] in items(lines) let [nth, prefix, token, delim] = elems - let token = substitute(token, '^\s*', indent, '') + let tindent = matchstr(token, '^\s*') + while 1 + let len = s:strwidth(tindent) + if len < indent + let tindent .= repeat(' ', indent - len) + break + elseif len > indent + let tindent = tindent[0 : -2] + else + break + endif + endwhile + + let token = tindent . s:ltrim(token) if mode ==? 'c' - let token = substitute(token, '\s*$', indent, '') + let token = substitute(token, '\s*$', repeat(' ', indent), '') endif let [pw, tw] = [s:strwidth(prefix), s:strwidth(token)] let max.token_len = max([max.token_len, tw]) diff --git a/test/interactive.vader b/test/interactive.vader index 912f9ec..11eecb1 100644 --- a/test/interactive.vader +++ b/test/interactive.vader @@ -1465,6 +1465,24 @@ Expect: ccccc = 4=5 fff = 4=6 +Do (Left alignment with shallow indentation): + vip\\= + +Expect: + a = 1=3 + bbb = 2=4 + ccccc = 4=5 + fff = 4=6 + +Do (Center alignment with deep indentation): + vip\\\\\= + +Expect: + a = 1=3 + bbb = 2=4 + ccccc = 4=5 + fff = 4=6 + Given (hard-tab indentation - dictionary (#19)): ddict={'homePage':'360452', 'key':'TEST',