Vim 魔术结束括号

发布于 2024-11-09 00:16:07 字数 241 浏览 0 评论 0原文

如果我可以在 vim 中输入 ] (或其他一些字符,可能是 )并让它自动插入正确关闭的括号,那就太好了开口支架。例如。如果我的缓冲区中有这个:

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

然后我按 ]]],字符 ]}) 将被插入。一个人怎样才能做到这一点呢?

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 I press ]]], the characters ]}) would be inserted. How might one accomplish this this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

小红帽 2024-11-16 00:16:07

这是您可能想要的草图。内置函数 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>

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

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.

白云不回头 2024-11-16 00:16:07

结合autoclose插件,可以设置:

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

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

这是我能达到的最接近我所说的你所要求的:“让我每次都按相同的键来跳过输入正确的括号,无论该括号是什么”。我不会对此进行 imap ] (不带修饰符),但如果您想尝试一下,没有什么可以阻止您。

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.

疯到世界奔溃 2024-11-16 00:16:07

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

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

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

inoremap ( ()<Left>
inoremap [ []<Left>
inoremap { {}<Left>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文