[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

vim script



Добрый день!

Часто приходится сортировать питоновские списки в виме, например:
a = [
'aaa' , 'XXX', 'tttt','dsgrg', 'sdgsfdg', 'gfdgffg', 'dfgfdgw:swf', 'sdfsdg', 'sdfgsdg', 'sdgsg', 'sdgsfdg' , 'sdgdsg'
]

а получить нужно:
a = [
'aaa', 'dfgfdgw:swf', 'dsgrg', 'gfdgffg', 'sdfgsdg', 'sdfsdg',
'sdgdsg', 'sdgsfdg', 'sdgsfdg', 'sdgsg', 'tttt', 'XXX'
]
т.е. отступ двойной отступ, ширина не больше 80-ти символов

Методом тыка написал скрипт который работает по вим7
Но его наверняка можно упросить и хотелось бы что бы он работал и под 6-м вимом

Есть специалисты?

Сам скрипт:
===================================================
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>
===================================================


--
Pavel

PS: Сорри за оффтопик

Reply to: