You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
2.0 KiB

2 years ago
function! GetColumn()
let l:line = getline(line('.'))[0:col('.')]
let l:count = count(l:line,b:div) + 1
return l:count
endfunction
function! SortByColumn(...)
execute "normal! mm"
let l:column = GetColumn()
let l:column= l:column - 1
let reverse= get(a:, 1, 0)
if reverse == "!"
execute '2,$sort! /\(^\([^'.b:div.']*'.b:div.'\)\{'.l:column.'}\)\@<=[^'.b:div.']*/ r'
" execute '2,$sort! /\([^'.b:div.']*'.b:div.'\)\{'.column.'}/'
else
execute '2,$sort /\(^\([^'.b:div.']*'.b:div.'\)\{'.l:column.'}\)\@<=[^'.b:div.']*/ r'
" execute '2,$sort /\([^'.b:div.']*'.b:div.'\)\{'.column.'}/'
endif
execute "normal! `m"
endfunction
command! -nargs=0 -bang Sort :call SortByColumn("<bang>")
function! Align()
execute "normal! :Tabularize /" . b:div . "/l0\<CR>"
endfunction
command! Align :call Align()
function! UnAlign()
execute "normal!
\:%s/ \\zs \\+\\ze//g\<CR>
\:%s/\\zs \\ze".b:div."//g\<CR>
\:noh\<CR>"
endfunction
command! UnAlign :call UnAlign()
function! MoveColumn(col)
let l:target = a:col
let l:current = GetColumn()
if l:current < l:target
let l:target = l:target - 1
endif
if l:current != l:target
execute "normal! ggF".b:div."l\<C-v>Gf".b:div."x0"
if a:col > 1
execute "normal! f".b:div
if a:col > 2
execute "normal! " . repeat(";", a:col - 2)
endif
execute "normal! l"
endif
execute "normal! P"
endif
endfunction
command! -nargs=1 MoveColumn :call MoveColumn(<f-args>)
execute "normal! :nnoremap <buffer> <tab> /" . b:div . "<CR>l:noh<CR>\<CR>"
execute "normal! :nnoremap <buffer> <s-tab> /" . b:div . "<CR>NNl:noh<CR>\<CR>"
" imap <buffer> <Esc> <Esc>mm:Align<CR>`m
nnoremap <buffer> <leader>s :Sort<CR>
nnoremap <buffer> <leader>S :Sort!<CR>
nnoremap <buffer> <leader>m1 :MoveColumn 1<CR>
nnoremap <buffer> <leader>m2 :MoveColumn 2<CR>
nnoremap <buffer> <leader>m3 :MoveColumn 3<CR>
nnoremap <buffer> <leader>m4 :MoveColumn 4<CR>
nnoremap <buffer> <leader>m5 :MoveColumn 5<CR>
nnoremap <buffer> <leader>m6 :MoveColumn 6<CR>