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

Reply via email to