Vim魔术关闭支架

luq*_*qui 13 vim

如果我可以输入](或者其他一些字符<C-]>)并且自动插入任何支架正确关闭开口支架,那么在vim中会很棒.例如.如果我在缓冲区中有这个:

object(function(x) { x+[1,2,3
Run Code Online (Sandbox Code Playgroud)

我按]]],]})将插入字符.怎么可能实现这个呢?

unp*_*680 10

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

" 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
Run Code Online (Sandbox Code Playgroud)

为了舒适地使用它,请使用imap它:

imap <C-e> <C-r>=CloseParen()<CR>
Run Code Online (Sandbox Code Playgroud)

编辑:过度转义搜索正则表达式,因此\包含在搜索中.现在少一个问题.

  • @progo:这太棒了.我已经对它进行了一些改进并将其作为插件发布[这里](https://github.com/idbrii/vim-endoscope).你在[MIT许可证](http://opensource.org/licenses/MIT)下提出它有什么问题吗? (2认同)