Vim魔术关闭支架

时间:2011-05-21 07:24:49

标签: vim

如果我可以键入](或其他一些字符,可能是<C-]>),并且让它自动插入正确关闭开括号的任何一个括号,那么在vim中会很棒。例如。如果我在缓冲区中有这个:

object(function(x) { x+[1,2,3

然后按]]],将插入字符]})。一个人怎么可能做到这一点?

3 个答案:

答案 0 :(得分:10)

这是你可能想要的草图。内置函数searchpairsearchpairpos对各种文本编辑任务有很大帮助:)

" Return a corresponding paren to be sent to the buffer
function! CloseParen()
    let parenpairs = {'(' : ')',
                   \  '[' : ']',
                   \  '{' : '}'}

    let [m_lnum, m_col] = searchpairpos('[[({]', '', '[\])}]', 'nbW')

    if (m_lnum != 0) && (m_col != 0)
        let c = getline(m_lnum)[m_col - 1]
        return parenpairs[c]
    endif
    return ''
endfun

要轻松使用它,请制作imap

imap <C-e> <C-r>=CloseParen()<CR>

修改:对搜索正则表达式进行了过度转义,因此\已包含在搜索中。现在少了一个问题。

答案 1 :(得分:3)

结合autoclose插件,您可以设置:

imap <c-l> <c-o>l

Autoclose将插入匹配的括号,然后ctrl-L将跳过它而不离开插入模式。 Ctrl-L对我来说比ctrl - ]更有意义。

这就像我能说到你要求的那样接近:“让我每次都按相同的键跳过进入正确的支架,无论支架是什么”。我不是imap](没有修饰符),但如果你想尝试一下,没有什么能阻止你。

答案 2 :(得分:1)

您可以将其添加到.vimrc中,它会自动关闭括号

inoremap ( ()<Left>
inoremap [ []<Left>
inoremap { {}<Left>