mirror of
https://github.com/sheerun/vim-polyglot.git
synced 2025-11-13 14:03:50 -05:00
Update
This commit is contained in:
124
autoload/csv.vim
124
autoload/csv.vim
@@ -14,7 +14,7 @@ endif
|
||||
" Some ideas are taken from the wiki http://vim.wikia.com/wiki/VimTip667
|
||||
" though, implementation differs.
|
||||
|
||||
let s:csv_numeric_sort = v:version > 704 || v:version == 704 && has("patch341")
|
||||
let s:csv_numeric_sort = v:version > 704 || v:version == 704 && has("patch951")
|
||||
if !s:csv_numeric_sort "{{{2
|
||||
fu! csv#CSVSortValues(i1, i2) "{{{3
|
||||
return (a:i1+0) == (a:i2+0) ? 0 : (a:i1+0) > (a:i2+0) ? 1 : -1
|
||||
@@ -222,6 +222,15 @@ fu! csv#LocalSettings(type) "{{{3
|
||||
endif
|
||||
endfu
|
||||
|
||||
fu! csv#RemoveAutoHighlight() "{{{3
|
||||
exe "aug CSV_HI".bufnr('')
|
||||
exe "au! CursorMoved <buffer=".bufnr('').">"
|
||||
aug end
|
||||
exe "aug! CSV_HI".bufnr('')
|
||||
" Remove any existing highlighting
|
||||
HiColumn!
|
||||
endfu
|
||||
|
||||
fu! csv#DoAutoCommands() "{{{3
|
||||
" Highlight column, on which the cursor is
|
||||
if exists("g:csv_highlight_column") && g:csv_highlight_column =~? 'y'
|
||||
@@ -233,12 +242,7 @@ fu! csv#DoAutoCommands() "{{{3
|
||||
" Set highlighting for column, on which the cursor is currently
|
||||
HiColumn
|
||||
else
|
||||
exe "aug CSV_HI".bufnr('')
|
||||
exe "au! CursorMoved <buffer=".bufnr('').">"
|
||||
aug end
|
||||
exe "aug! CSV_HI".bufnr('')
|
||||
" Remove any existing highlighting
|
||||
HiColumn!
|
||||
call csv#RemoveAutoHighlight()
|
||||
endif
|
||||
" undo autocommand:
|
||||
let b:undo_ftplugin .= '| exe "sil! au! CSV_HI'.bufnr('').' CursorMoved <buffer> "'
|
||||
@@ -539,7 +543,7 @@ fu! csv#WColumn(...) "{{{3
|
||||
let temp=getpos('.')[2]
|
||||
let j=1
|
||||
let ret = 1
|
||||
for i in sort(b:csv_fixed_width_cols, s:csv_numeric_sort ? 'n' : 'csv#CSVSortValues')
|
||||
for i in sort(b:csv_fixed_width_cols, s:csv_numeric_sort ? 'N' : 'csv#CSVSortValues')
|
||||
if temp >= i
|
||||
let ret = j
|
||||
endif
|
||||
@@ -549,6 +553,9 @@ fu! csv#WColumn(...) "{{{3
|
||||
call setpos('.',_cur)
|
||||
return ret
|
||||
endfu
|
||||
fu! csv#ValidComment() "{{{3
|
||||
return b:csv_cmt != ['', ''] && !empty(b:csv_cmt[0])
|
||||
endfu
|
||||
fu! csv#MaxColumns(...) "{{{3
|
||||
let this_col = exists("a:1")
|
||||
"return maximum number of columns in first 10 lines
|
||||
@@ -561,8 +568,10 @@ fu! csv#MaxColumns(...) "{{{3
|
||||
endif
|
||||
|
||||
" Filter comments out
|
||||
let pat = '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
call filter(l, 'v:val !~ pat')
|
||||
if csv#ValidComment()
|
||||
let pat = '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
call filter(l, 'v:val !~ pat')
|
||||
endif
|
||||
if !empty(l) || this_col
|
||||
break
|
||||
else
|
||||
@@ -606,8 +615,10 @@ fu! csv#ColWidth(colnr, row, silent) "{{{3
|
||||
endif
|
||||
endif
|
||||
let b:csv_list=getline(skipfirst+1,last)
|
||||
let pat = '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
call filter(b:csv_list, 'v:val !~ pat')
|
||||
if csv#ValidComment()
|
||||
let pat = '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
call filter(b:csv_list, 'v:val !~ pat')
|
||||
endif
|
||||
call filter(b:csv_list, '!empty(v:val)')
|
||||
call map(b:csv_list, 'split(v:val, b:col.''\zs'')')
|
||||
endif
|
||||
@@ -898,7 +909,7 @@ fu! csv#Columnize(field) "{{{3
|
||||
return result
|
||||
else
|
||||
" right align
|
||||
return printf("%*S", width+1 , a:field)
|
||||
return printf("%*S", width , a:field)
|
||||
endif
|
||||
endfun
|
||||
fu! csv#GetColPat(colnr, zs_flag) "{{{3
|
||||
@@ -912,15 +923,15 @@ fu! csv#GetColPat(colnr, zs_flag) "{{{3
|
||||
let pat='\%' . b:csv_fixed_width_cols[-1] . 'v.*'
|
||||
else
|
||||
let pat='\%' . b:csv_fixed_width_cols[(a:colnr - 1)] .
|
||||
\ 'c.\{-}\%' . b:csv_fixed_width_cols[a:colnr] . 'v'
|
||||
\ 'c.*\%<' . (b:csv_fixed_width_cols[a:colnr] + 1) . 'v'
|
||||
endif
|
||||
endif
|
||||
elseif !exists("b:csv_fixed_width_cols")
|
||||
let pat=b:col
|
||||
else
|
||||
let pat='\%' . b:csv_fixed_width_cols[0] . 'v.\{-}' .
|
||||
let pat='\%' . b:csv_fixed_width_cols[0] . 'v.*' .
|
||||
\ (len(b:csv_fixed_width_cols) > 1 ?
|
||||
\ '\%' . b:csv_fixed_width_cols[1] . 'v' :
|
||||
\ '\%<' . (b:csv_fixed_width_cols[1] + 1) . 'v' :
|
||||
\ '')
|
||||
endif
|
||||
return pat . (a:zs_flag ? '\zs' : '')
|
||||
@@ -1115,7 +1126,12 @@ fu! csv#MoveCol(forward, line, ...) "{{{3
|
||||
let pat=csv#GetColPat(1, 0)
|
||||
else
|
||||
" Move backwards
|
||||
let pat=csv#GetColPat(maxcol, 0)
|
||||
if cpos == 1 && (exists("a:1") && a:1)
|
||||
" H move to previous line
|
||||
let pat=csv#GetColPat(maxcol, 0)
|
||||
else
|
||||
let pat='\%1v'
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
else
|
||||
@@ -1149,9 +1165,13 @@ fu! csv#MoveCol(forward, line, ...) "{{{3
|
||||
" of a field.
|
||||
let epos = getpos('.')
|
||||
if getline('.')[col('.')-1] == ' '
|
||||
call search('\S', 'W', line('.'))
|
||||
if getpos('.')[2] > spos
|
||||
call setpos('.', epos)
|
||||
if !exists("b:csv_fixed_width_cols")
|
||||
call search('\S', 'W', line('.'))
|
||||
if getpos('.')[2] > spos
|
||||
call setpos('.', epos)
|
||||
endif
|
||||
elseif cpos > b:csv_fixed_width_cols[colnr]
|
||||
call search('\%'. b:csv_fixed_width_cols[colnr]. 'v', 'W', line('.'))
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
@@ -1246,8 +1266,10 @@ fu! csv#CopyCol(reg, col, cnt) "{{{3
|
||||
endfor
|
||||
endif
|
||||
" Filter comments out
|
||||
let pat = '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
call filter(a, 'v:val !~ pat')
|
||||
if csv#ValidComment()
|
||||
let pat = '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
call filter(a, 'v:val !~ pat')
|
||||
endif
|
||||
|
||||
if !exists("b:csv_fixed_width_cols")
|
||||
call map(a, 'split(v:val, ''^'' . b:col . ''\zs'')[col-1:cnt_cols]')
|
||||
@@ -1288,10 +1310,9 @@ fu! csv#MoveColumn(start, stop, ...) range "{{{3
|
||||
endif
|
||||
|
||||
" Swap line by line, instead of reading the whole range into memory
|
||||
|
||||
for i in range(a:start, a:stop)
|
||||
let content = getline(i)
|
||||
if content =~ '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
if b:csv_cmt != ['',''] && content =~ '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
" skip comments
|
||||
continue
|
||||
endif
|
||||
@@ -1359,13 +1380,9 @@ fu! csv#DupColumn(start, stop, ...) range "{{{3
|
||||
" skipping comment lines (we could do it with a single :s statement,
|
||||
" but that would fail for the first and last column.
|
||||
|
||||
let commentpat = '\%(\%>'.(a:start-1).'l\V'.
|
||||
\ escape(b:csv_cmt[0], '\\').'\m\)'. '\&\%(\%<'.
|
||||
\ (a:stop+1). 'l\V'. escape(b:csv_cmt[0], '\\'). '\m\)'
|
||||
|
||||
for i in range(a:start, a:stop)
|
||||
let content = getline(i)
|
||||
if content =~ '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
if csv#ValidComment() && content =~ '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
" skip comments
|
||||
continue
|
||||
endif
|
||||
@@ -1429,10 +1446,12 @@ fu! csv#AddColumn(start, stop, ...) range "{{{3
|
||||
" skipping comment lines (we could do it with a single :s statement,
|
||||
" but that would fail for the first and last column.
|
||||
|
||||
let commentpat = '\%(\%>'.(a:start-1).'l\V'.
|
||||
\ escape(b:csv_cmt[0], '\\').'\m\)'. '\&\%(\%<'.
|
||||
\ (a:stop+1). 'l\V'. escape(b:csv_cmt[0], '\\'). '\m\)'
|
||||
if search(commentpat)
|
||||
if b:csv_cmt != ['','']
|
||||
let commentpat = '\%(\%>'.(a:start-1).'l\V'.
|
||||
\ escape(b:csv_cmt[0], '\\').'\m\)'. '\&\%(\%<'.
|
||||
\ (a:stop+1). 'l\V'. escape(b:csv_cmt[0], '\\'). '\m\)'
|
||||
endif
|
||||
if !empty(commentpat) && search(commentpat)
|
||||
for i in range(a:start, a:stop)
|
||||
let content = getline(i)
|
||||
if content =~ '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
@@ -1611,7 +1630,7 @@ fu! csv#MaxColumn(list) "{{{3
|
||||
endtry
|
||||
call add(result, str2float(nr))
|
||||
endfor
|
||||
let result = sort(result, s:csv_numeric_sort ? 'n' : 'csv#CSVSortValues')
|
||||
let result = sort(result, s:csv_numeric_sort ? 'N' : 'csv#CSVSortValues')
|
||||
let ind = len(result) > 9 ? 9 : len(result)
|
||||
if has_key(get(s:, 'additional', {}), 'distinct') && s:additional['distinct']
|
||||
if exists("*uniq")
|
||||
@@ -1672,7 +1691,7 @@ fu! csv#DoForEachColumn(start, stop, bang) range "{{{3
|
||||
endif
|
||||
let t = g:csv_convert
|
||||
let line = getline(item)
|
||||
if line =~ '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
if b:csv_cmt!=['',''] && line =~ '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
" Filter comments out
|
||||
call add(result, line)
|
||||
continue
|
||||
@@ -1736,7 +1755,7 @@ fu! csv#FoldValue(lnum, filter) "{{{3
|
||||
for item in values(a:filter)
|
||||
" always fold comments away
|
||||
let content = getline(a:lnum)
|
||||
if content =~ '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
if b:csv_cmt != ['',''] && content =~ '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
return 1
|
||||
elseif eval('content' . (item.match ? '!~' : '=~') . 'item.pat')
|
||||
let result += 1
|
||||
@@ -1898,7 +1917,7 @@ fu! csv#GetColumn(line, col, strip) "{{{3
|
||||
" Return Column content at a:line, a:col
|
||||
let a=getline(a:line)
|
||||
" Filter comments out
|
||||
if a =~ '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
if csv#ValidComment() && a =~ '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
return ''
|
||||
endif
|
||||
|
||||
@@ -1979,7 +1998,7 @@ fu! csv#AnalyzeColumn(...) "{{{3
|
||||
let res[item]+=1
|
||||
endfor
|
||||
|
||||
let max_items = reverse(sort(values(res), s:csv_numeric_sort ? 'n' : 'csv#CSVSortValues'))
|
||||
let max_items = reverse(sort(values(res), s:csv_numeric_sort ? 'N' : 'csv#CSVSortValues'))
|
||||
" What about the minimum 5 items?
|
||||
let count_items = keys(res)
|
||||
if len(max_items) > topn
|
||||
@@ -2057,6 +2076,7 @@ fu! csv#InitCSVFixedWidth() "{{{3
|
||||
endif
|
||||
" Turn off syntax highlighting
|
||||
syn clear
|
||||
call csv#RemoveAutoHighlight()
|
||||
let max_line = line('$') > 10 ? 10 : line('$')
|
||||
let t = getline(1, max_line)
|
||||
let max_len = max(map(t, 'len(split(v:val, ''\zs''))'))
|
||||
@@ -2118,8 +2138,8 @@ fu! csv#InitCSVFixedWidth() "{{{3
|
||||
endw
|
||||
let b:csv_fixed_width_cols=[]
|
||||
let tcc=0
|
||||
let b:csv_fixed_width_cols = sort(keys(Dict), s:csv_numeric_sort ? 'n' : 'csv#CSVSortValues')
|
||||
let b:csv_fixed_width = join(sort(keys(Dict), s:csv_numeric_sort ? 'n' : 'csv#CSVSortValues'), ',')
|
||||
let b:csv_fixed_width_cols = sort(keys(Dict), s:csv_numeric_sort ? 'N' : 'csv#CSVSortValues')
|
||||
let b:csv_fixed_width = join(sort(keys(Dict), s:csv_numeric_sort ? 'N' : 'csv#CSVSortValues'), ',')
|
||||
call csv#Init(1, line('$'))
|
||||
|
||||
let &l:cc=_cc
|
||||
@@ -2200,7 +2220,7 @@ fu! csv#CSVMappings() "{{{3
|
||||
call csv#Map('nnoremap', '<C-Right>', ':<C-U>call csv#MoveCol(1, line("."))<CR>')
|
||||
call csv#Map('nnoremap', 'L', ':<C-U>call csv#MoveCol(1, line("."))<CR>')
|
||||
try
|
||||
if g:csv_bind_B == 1
|
||||
if get(g:, 'csv_bind_B', 0) == 1
|
||||
call csv#Map('nnoremap', 'B', ':<C-U>call csv#MoveCol(-1, line("."))<CR>')
|
||||
else
|
||||
call csv#Map('nnoremap', 'E', ':<C-U>call csv#MoveCol(-1, line("."))<CR>')
|
||||
@@ -2431,7 +2451,7 @@ fu! csv#NewDelimiter(newdelimiter, firstl, lastl) "{{{3
|
||||
let line=a:firstl
|
||||
while line <= a:lastl
|
||||
" Don't change delimiter for comments
|
||||
if getline(line) =~ '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
if csv#ValidComment() && getline(line) =~ '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
let line+=1
|
||||
continue
|
||||
endif
|
||||
@@ -2476,7 +2496,7 @@ fu! csv#DuplicateRows(columnlist) "{{{3
|
||||
let i = 1
|
||||
let content = getline(line)
|
||||
" Skip comments
|
||||
if content =~ '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
if csv#ValidComment() && content =~ '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
continue
|
||||
endif
|
||||
let cols = split(content, b:col. '\zs')
|
||||
@@ -2532,7 +2552,11 @@ fu! csv#Transpose(line1, line2) "{{{3
|
||||
let TrailingDelim = getline(1) =~ b:delimiter.'$'
|
||||
endif
|
||||
|
||||
let pat = '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
if b:csv_cmt != ['','']
|
||||
let pat = '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
else
|
||||
let pat = ''
|
||||
endif
|
||||
|
||||
try
|
||||
let columns = csv#MaxColumns(a:line1)
|
||||
@@ -2544,7 +2568,7 @@ fu! csv#Transpose(line1, line2) "{{{3
|
||||
let matrix = []
|
||||
for line in range(a:line1, a:line2)
|
||||
" Filter comments out
|
||||
if getline(line) =~ pat
|
||||
if !empty(pat) && getline(line) =~ pat
|
||||
continue
|
||||
endif
|
||||
let r = []
|
||||
@@ -3033,10 +3057,12 @@ fu! csv#SumCSVRow(line, nr) "{{{3
|
||||
endif
|
||||
let line=getline(ln)
|
||||
" Filter comments out
|
||||
let pat = '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
if line =~ pat
|
||||
call csv#Warn("Invalid count specified")
|
||||
return
|
||||
if csv#ValidComment()
|
||||
let pat = '^\s*\V'. escape(b:csv_cmt[0], '\\')
|
||||
if line =~ pat
|
||||
call csv#Warn("Invalid count specified")
|
||||
return
|
||||
endif
|
||||
endif
|
||||
let func='csv#SumColumn'
|
||||
let cells=split(line, b:col.'\zs')
|
||||
|
||||
Reference in New Issue
Block a user