+ Tabbi
git-svn-id: https://vimsuite.svn.sourceforge.net/svnroot/vimsuite/trunk@195 eb2d0018-73a3-4aeb-bfe9-1def61c9ec69
This commit is contained in:
parent
39d73fa09a
commit
8bc36a154b
97
vimfiles/plugin/tabbi.vim
Normal file
97
vimfiles/plugin/tabbi.vim
Normal file
@ -0,0 +1,97 @@
|
||||
"Vim plugin for aligning text
|
||||
"Version: 1.1
|
||||
"Last Change: Oct 17, 2010
|
||||
"Author: Daniel Schemala
|
||||
"Report bugs to: sehrpositiv@web.de
|
||||
"Usage: type :Tabbi for aligning the text, a range before the command and visual mode are supported
|
||||
|
||||
if exists("loaded_tabbi")
|
||||
finish
|
||||
endif
|
||||
let loaded_tabbi=1
|
||||
|
||||
command! -range Tabbi call s:Tabbi(<line1>, <line2>)
|
||||
|
||||
function! s:Tabbi(line1, line2) range
|
||||
let s:liste = []
|
||||
let s:ersteZ = a:line1
|
||||
let s:letzteZ = a:line2
|
||||
if s:letzteZ <= s:ersteZ
|
||||
let s:ersteZ = 1
|
||||
let s:letzteZ = line("$")
|
||||
endif
|
||||
for s:zeile in getline(s:ersteZ, s:letzteZ)
|
||||
let s:wa = -1
|
||||
let s:we = -1
|
||||
let s:tabsp = 0
|
||||
while 1
|
||||
let s:wa = s:we==-1 ? 0 : match(s:zeile, '\s\S', s:we+1)
|
||||
if s:wa==-1
|
||||
break
|
||||
endif
|
||||
let s:wa = match(s:zeile, '\S', s:wa)
|
||||
if s:wa==-1
|
||||
break
|
||||
endif
|
||||
let s:we = match(s:zeile, '\S\(\s\s\|\t\|\s*$\)', s:wa)
|
||||
if s:tabsp >= len(s:liste)
|
||||
call add(s:liste, s:we-s:wa+1)
|
||||
else
|
||||
let s:liste[s:tabsp] = max([s:liste[s:tabsp], s:we-s:wa+1])
|
||||
endif
|
||||
let s:tabsp += 1
|
||||
endwhile
|
||||
endfor
|
||||
|
||||
if &expandtab
|
||||
call s:TabbiS(s:ersteZ, s:letzteZ)
|
||||
else
|
||||
call s:TabbiT(s:ersteZ, s:letzteZ)
|
||||
endif
|
||||
endfunction
|
||||
|
||||
function! s:TabbiT(ersteZ, letzteZ)
|
||||
for s:zn in range(a:ersteZ, a:letzteZ)
|
||||
let s:zeile = getline(s:zn)
|
||||
let s:wa = -1
|
||||
let s:we = -1
|
||||
let s:neuzei = ""
|
||||
for s:li in s:liste
|
||||
let s:wa = s:we==-1 ? 0 : match(s:zeile, '\s\S', s:we+1)
|
||||
if s:wa==-1
|
||||
break
|
||||
endi
|
||||
let s:wa = match(s:zeile, '\S', s:wa)
|
||||
let s:we = match(s:zeile, '\S\(\s\s\|\t\|\s*$\)', s:wa)
|
||||
let s:mb = (s:li % &ts)==&ts-1 ? s:li+&ts+1 : s:li+&ts-(s:li % &ts)
|
||||
let s:wb = s:we-s:wa+1
|
||||
let s:at = ((s:wb%&ts)==0 ? 0 : 1) + (s:mb-s:wb)/&ts
|
||||
let s:neuzei = s:neuzei.strpart(s:zeile, s:wa, s:wb).repeat("\t", s:at)
|
||||
endfor
|
||||
let s:neuzei = substitute(s:neuzei, "\t*$", "", "g")
|
||||
call setline(s:zn, s:neuzei)
|
||||
endfor
|
||||
endfunction
|
||||
|
||||
function! s:TabbiS(ersteZ, letzteZ)
|
||||
for s:zn in range(a:ersteZ, a:letzteZ)
|
||||
let s:zeile = getline(s:zn)
|
||||
let s:wa = -1
|
||||
let s:we = -1
|
||||
let s:neuzei = ""
|
||||
for s:li in s:liste
|
||||
let s:wa = s:we==-1 ? 0 : match(s:zeile, '\s\S', s:we+1)
|
||||
if s:wa==-1
|
||||
break
|
||||
endif
|
||||
let s:wa = match(s:zeile, '\S', s:wa)
|
||||
let s:we = match(s:zeile, '\S\(\s\s\|\t\|\s*$\)', s:wa)
|
||||
let s:mb = (s:li % &ts)==&ts-1 ? s:li+&ts+1 : s:li+&ts-(s:li % &ts)
|
||||
let s:wb = s:we-s:wa+1
|
||||
let s:neuzei = s:neuzei.strpart(s:zeile, s:wa, s:wb)
|
||||
let s:neuzei = s:neuzei.repeat(" ", s:mb-s:wb)
|
||||
endfor
|
||||
let s:neuzei = substitute(s:neuzei, '\s*$', "", "g")
|
||||
call setline(s:zn, s:neuzei)
|
||||
endfor
|
||||
endfunction
|
Loading…
x
Reference in New Issue
Block a user