Vim — закрыть открытые скобки

2008-08-01 11:41; Tags: , ,

Тем кто пишет на Лиспе (Схеме) в Виме может быть интересен скрипт, закрывающий открытые скобки (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.
Написал улучшенный вариант “балансировки” скобок.

Leave a Reply

Powered by WordPress