Hello!
I have to sort python's list quite often, so i want to make a script to
do that
for example i have:
a = [
'aaa' , 'XXX', 'tttt','dsgrg', 'sdgsfdg', 'gfdgffg',
'dfgfdgw:swf', 'sdfsdg', 'sdfgsdg', 'sdgsg', 'sdgsfdg' , 'sdgdsg'
]
and i need:
a = [
'aaa', 'dfgfdgw:swf', 'dsgrg', 'gfdgffg', 'sdfgsdg', 'sdfsdg',
'sdgdsg', 'sdgsfdg', 'sdgsfdg', 'sdgsg', 'tttt', 'XXX'
]
left margin = 2 tab, textwidth=80, sorted case insensitive
i wrote script with "cut-and-paste" method, so i guess it can be optimized
and now it works only in vim7, but i think it can be written in vim6
compatible mode, right?
script:
===================================================
func! StrICmp(str1, str2)
if (a:str1 <? a:str2)
return -1
elseif (a:str1 >? a:str2)
return 1
else
return 0
endif
endfunction
let s:cmpref = function( 'StrICmp' )
fun! PySort()
let ai_revert = 0
let tw_revert = 0
let ignorecase_revert = 0
if ! &autoindent
let ai_revert = 1
set autoindent
endif
if &textwidth == 0
let tw_revert = 1
set textwidth=80
endif
normal! gv"ay
let text = matchstr(@a, '\s*\zs.*\ze\s*')
let list = split(text, '\_s*,\_s*')
call sort(list, s:cmpref)
let @a = join(list, ', ')
normal! gv"ap
normal! >>
normal! >>
normal! gqq
if ai_revert
set noautoindent
endif
if tw_revert
set textwidth=0
endif
endfun
map <C-S> :call PySort()<CR>
===================================================
Please, comment!
--
Pavel