开发者

Vim magic closing bracket

开发者 https://www.devze.com 2023-03-07 22:33 出处:网络
It would be great in vim if I could type ] (or some other character, maybe <C-]>) and have it automatically insert whichever bracket properly closes the opening bracket.Eg. if I have this in my

It would be great in vim if I could type ] (or some other character, maybe <C-]>) and have it automatically insert whichever bracket properly closes the opening bracket. Eg. if I have this in my buffer:

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

And 开发者_如何学PythonI press ]]], the characters ]}) would be inserted. How might one accomplish this this?


Here's a sketch of what you probably wanted. The builtin functions searchpair and searchpairpos are of enormous help for various text editing tasks :)

" 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

To use it comfortably, make an imap of it:

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

Edit: over-escaped the search regexp so \ got included in the search. One less problem now.


Combined with the autoclose plugin, you can set:

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

Autoclose will insert the matching bracket, then ctrl-L will skip over it without leaving insert mode. Ctrl-L makes more sense to me than ctrl-].

This is as close as I can get to what I'd say you're asking for: "let me just press the same key every time to skip entering the correct bracket, no matter what that bracket is". I'd not imap ] (without modifier) to this, but there's nothing stopping you if you want to try it out.


You can add that to your .vimrc and it will autoclose brackets

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号