Vim — закрыть открытые скобки
Тем кто пишет на Лиспе (Схеме) в Виме может быть интересен скрипт, закрывающий открытые скобки (unbalanced parens). Ничего особенного в нем нет — со своей работой справляется. Однако функция s:isInLispExpression() тупая как пробка, ее нужно еще тюнить и тюнить.
" Lisp stuff {{{
"" Close parens
function! s:isInLispExpression(linenr) " {{{
let result = 1
if a:linenr < 0
let result = 0
else
let line = getline(a:linenr)
if line == ""
let result = 0
endif
endif
return result
endfunction " }}}
function! s:LispCountOpenedParens(line) "{{{
let unbalanced = 0
let idx = 0
while idx < len(a:line)
if a:line[idx] == '('
let unbalanced += 1
elseif a:line[idx] == ')'
let unbalanced -= 1
endif
let idx += 1
endwhile
return unbalanced
endfunction "}}}
function! s:LispCloseParens(linenr) "{{{
let unbalanced = 0
let lineidx = a:linenr
while s:isInLispExpression(lineidx)
let line = getline(lineidx)
let unbalanced += s:LispCountOpenedParens(line)
let lineidx -= 1
endwhile
if unbalanced > 0
execute "normal ".unbalanced."A)\<ESC>"
endif
endfunction "}}}
command! LISPCloseParens call <SID>LispCloseParens(line('.'))
map <Leader>) :LISPCloseParens<CR>
"" }}}
Upd.
Написал улучшенный вариант “балансировки” скобок.
