summaryrefslogtreecommitdiffstats
path: root/ftplugin/csv.vim
diff options
context:
space:
mode:
authorAdam Stankiewicz <sheerun@sher.pl>2015-02-11 11:27:11 -0800
committerAdam Stankiewicz <sheerun@sher.pl>2015-02-11 11:27:11 -0800
commit6cd2d5417d728ea96c5c52b34629c944a89eec60 (patch)
treef6d49573e7a22b1ede56055d3952707eab085c18 /ftplugin/csv.vim
parentb7a30b1f1a963902d9743ae229a1f9d18b887e17 (diff)
downloadvim-polyglot-1.11.4.tar.gz
vim-polyglot-1.11.4.zip
Updatev1.11.4
Diffstat (limited to 'ftplugin/csv.vim')
-rw-r--r--ftplugin/csv.vim99
1 files changed, 70 insertions, 29 deletions
diff --git a/ftplugin/csv.vim b/ftplugin/csv.vim
index 95b609c9..e7455cb1 100644
--- a/ftplugin/csv.vim
+++ b/ftplugin/csv.vim
@@ -41,7 +41,9 @@ fu! <sid>Warn(mess) "{{{3
echohl Normal
endfu
-fu! <sid>Init(startline, endline) "{{{3
+fu! <sid>Init(startline, endline, ...) "{{{3
+ " if a:1 is set, keep the b:delimiter
+ let keep = exists("a:1") && a:1
" Hilight Group for Columns
if exists("g:csv_hiGroup")
let s:hiGroup = g:csv_hiGroup
@@ -56,10 +58,12 @@ fu! <sid>Init(startline, endline) "{{{3
exe "hi link CSVHeaderLine" s:hiHeader
" Determine default Delimiter
- if !exists("g:csv_delim")
- let b:delimiter=<SID>GetDelimiter(a:startline, a:endline)
- else
- let b:delimiter=g:csv_delim
+ if !keep
+ if !exists("g:csv_delim")
+ let b:delimiter=<SID>GetDelimiter(a:startline, a:endline)
+ else
+ let b:delimiter=g:csv_delim
+ endif
endif
" Define custom commentstring
@@ -579,7 +583,15 @@ fu! <sid>ColWidth(colnr) "{{{3
if !exists("b:csv_fixed_width_cols")
if !exists("b:csv_list")
- let b:csv_list=getline(1,'$')
+ " only check first 10000 lines, to be faster
+ let last = line('$')
+ if !get(b:, 'csv_arrange_use_all_rows', 0)
+ if last > 10000
+ let last = 10000
+ call <sid>Warn('File too large, only checking the first 10000 rows for the width')
+ endif
+ endif
+ let b:csv_list=getline(1,last)
let pat = '^\s*\V'. escape(b:csv_cmt[0], '\\')
call filter(b:csv_list, 'v:val !~ pat')
call filter(b:csv_list, '!empty(v:val)')
@@ -646,15 +658,40 @@ fu! <sid>ArrangeCol(first, last, bang, limit) range "{{{3
else
let ro = 0
endif
- exe "sil". a:first . ',' . a:last .'s/' . (b:col) .
- \ '/\=<SID>Columnize(submatch(0))/' . (&gd ? '' : 'g')
- " Clean up variables, that were only needed for <sid>Columnize() function
- unlet! s:columnize_count s:max_cols s:prev_line
- if ro
- setl ro
- unlet ro
+ let s:count = 0
+ let _stl = &stl
+ let s:max = (a:last - a:first + 1) * len(b:col_width)
+ let s:temp = 0
+ try
+ exe "sil". a:first . ',' . a:last .'s/' . (b:col) .
+ \ '/\=<SID>Columnize(submatch(0))/' . (&gd ? '' : 'g')
+ finally
+ " Clean up variables, that were only needed for <sid>Columnize() function
+ unlet! s:columnize_count s:max_cols s:prev_line s:max s:count s:temp s:val
+ if ro
+ setl ro
+ unlet ro
+ endif
+ let &stl = _stl
+ call winrestview(cur)
+ endtry
+endfu
+
+fu! <sid>ProgressBar(cnt, max) "{{{3
+ if get(g:, 'csv_no_progress', 0)
+ return
+ endif
+ let width = 40 " max width of progressbar
+ if width > &columns
+ let width = &columns
+ endif
+ let s:val = a:cnt * width / a:max
+ if (s:val > s:temp || a:cnt==1)
+ let &stl='%#DiffAdd#['.repeat('=', s:val).'>'. repeat(' ', width-s:val).']'.
+ \ (width < &columns ? ' '.100*s:val/width. '%%' : '')
+ redrawstatus
+ let s:temp = s:val
endif
- call winrestview(cur)
endfu
fu! <sid>PrepUnArrangeCol(first, last) "{{{3
@@ -706,9 +743,7 @@ fu! <sid>CalculateColumnWidth() "{{{3
endtry
" delete buffer content in variable b:csv_list,
" this was only necessary for calculating the max width
- unlet! b:csv_list
- unlet! s:columnize_count
- unlet! s:decimal_column
+ unlet! b:csv_list s:columnize_count s:decimal_column
endfu
fu! <sid>Columnize(field) "{{{3
@@ -725,6 +760,7 @@ fu! <sid>Columnize(field) "{{{3
if exists("s:prev_line") && s:prev_line != line('.')
let s:columnize_count = 0
endif
+ let s:count+=1
let s:prev_line = line('.')
" convert zero based indexed list to 1 based indexed list,
@@ -733,8 +769,8 @@ fu! <sid>Columnize(field) "{{{3
" let width=get(b:col_width,<SID>WColumn()-1,20)
" is too slow, so we are using:
let colnr = s:columnize_count % s:max_cols
- let width=get(b:col_width, colnr, 20)
- let align='r'
+ let width = get(b:col_width, colnr, 20)
+ let align = 'r'
if exists('b:csv_arrange_align')
let align_list=split(get(b:, 'csv_arrange_align', " "), '\zs')
try
@@ -747,9 +783,10 @@ fu! <sid>Columnize(field) "{{{3
\ align isnot? 'c' && align isnot? '.') || get(b:, 'csv_arrange_leftalign', 0))
let align = 'r'
endif
+ call <sid>ProgressBar(s:count,s:max)
let s:columnize_count += 1
- let has_delimiter = (a:field =~# b:delimiter.'$')
+ let has_delimiter = (a:field[-1:] is? b:delimiter)
if align is? 'l'
" left-align content
return printf("%-*S%s", width+1 ,
@@ -1910,7 +1947,8 @@ fu! <sid>CommandDefinitions() "{{{3
call <sid>LocalCmd("UnArrangeColumn",
\':call <sid>PrepUnArrangeCol(<line1>, <line2>)',
\ '-range')
- call <sid>LocalCmd("InitCSV", ':call <sid>Init(<line1>,<line2>)', '-range=%')
+ call <sid>LocalCmd("InitCSV", ':call <sid>Init(<line1>,<line2>,<bang>0)',
+ \ '-bang -range=%')
call <sid>LocalCmd('Header',
\ ':call <sid>SplitHeaderLine(<q-args>,<bang>0,1)',
\ '-nargs=? -bang')
@@ -2232,6 +2270,10 @@ fu! <sid>NrColumns(bang) "{{{3
endfu
fu! <sid>Tabularize(bang, first, last) "{{{3
+ if match(split(&ft, '\.'),'csv') == -1
+ call <sid>Warn("No CSV filetype, aborting!")
+ return
+ endif
let _c = winsaveview()
" Table delimiter definition "{{{4
if !exists("s:td")
@@ -2307,10 +2349,7 @@ fu! <sid>Tabularize(bang, first, last) "{{{3
call <sid>Warn('An error occured, aborting!')
return
endif
- if get(b:, 'csv_arrange_leftalign', 0)
- call map(b:col_width, 'v:val+1')
- endif
- if b:delimiter == "\t" && !get(b:, 'csv_arrange_leftalign',0)
+ if getline(a:first)[-1:] isnot? b:delimiter
let b:col_width[-1] += 1
endif
let marginline = s:td.scol. join(map(copy(b:col_width), 'repeat(s:td.hbar, v:val)'), s:td.cros). s:td.ecol
@@ -2335,12 +2374,14 @@ fu! <sid>Tabularize(bang, first, last) "{{{3
call append(a:first + s:csv_fold_headerline, marginline)
let adjust_last += 1
endif
+ " Syntax will be turned off, so disable this part
+ "
" Adjust headerline to header of new table
- let b:csv_headerline = (exists('b:csv_headerline')?b:csv_headerline+2:3)
- call <sid>CheckHeaderLine()
+ "let b:csv_headerline = (exists('b:csv_headerline')?b:csv_headerline+2:3)
+ "call <sid>CheckHeaderLine()
" Adjust syntax highlighting
- unlet! b:current_syntax
- ru syntax/csv.vim
+ "unlet! b:current_syntax
+ "ru syntax/csv.vim
if a:bang
exe printf('sil %d,%ds/^%s\zs\n/&%s&/e', a:first + s:csv_fold_headerline, a:last + adjust_last,