【问题标题】:How do I get Vim to automatically put ending braces?如何让 Vim 自动放置大括号?
【发布时间】:2010-10-27 08:58:57
【问题描述】:

在编辑 .scm 文件时,如果 Vim 会在我开始 ( 时自动放置结束大括号 ),那就太好了。我该怎么做?

【问题讨论】:

    标签: vim autocomplete


    【解决方案1】:

    您可以根据自己的喜好映射左大括号:

    :imap ( ()<left>
    

    【讨论】:

    • 其他答案中提到的插件具有在键入相应的关闭“)”时表现“智能”的优势。如果不需要,那么我也会使用直线前进地图。
    • 一些插件还: - 不要在注释和字符串上下文中扩展, - 定义一种用一对括号包围选择的方法, - 插入占位符/标记以跳过结束括号(与大多数 sn-ps/templates 扩展插件一致)。
    • 有没有办法只在一行的末尾这样做?有时它比有用更烦人,但有了这个,我会很乐意使用它......
    【解决方案2】:

    尝试使用AutoClose插件。

    【讨论】:

    • 不要与蒂亚戈·阿尔维斯(Thiago Alves)的AutoClose 另一个不那么激进(也不那么烦人,IMO)混淆。
    • @AndrewMarshall +1,您列出的版本不那么烦人了。我来这里是为了寻找 Mykola 答案中的替代品,因为它有怪癖。
    • 仅供参考,这个插件似乎工作正常,但对我来说,它引入了“滞后”&lt;ESC&gt; 行为。因此,如果您关心这一点,请避免。
    【解决方案3】:

    最简单的答案是包含地图。例如:

    :inoremap ( ()<left>
    

    问题是您需要为每个要自动关闭的符号添加一个条目('{'、'['、'"'等)。此外,插件通常更智能,提供诸如检测“关闭”字符而不是重复它。

    上述解决方案和大多数插件的问题在于它们倾向于破坏撤消序列(gundo任何人?),如:help ins-special-special中所述。

    这里是执行您所要求的插件列表(来自vimtips):

    • delimitMate by Israel Chauca Fuentes(可配置,不会破坏撤消/重做/重复,但 - 破坏 iabbr)也在 GitHub
    • AutoClose Karl Guertin(自动关闭特定的硬编码字符,但不会中断撤消/重做/重复)
    • AutoClose by Thiago Alves(可配置,但会中断撤消/重做/重复)
    • auto-pairs Auto Pairs by Miaojiang(可配置,但会中断 undo/redo/repeat)
    • ClosePairs Edoardo Vacchi(可配置,但会中断撤消/重做/重复)
    • smartinput by Kana Natsuno(可配置,但会中断撤消/重做/重复)

    除了vimtips,网上还有another nice explanation of the issue

    【讨论】:

    • 对于将来发现此问题的其他人,我刚开始使用自动配对,除非我理解术语错误,否则它不会破坏我的撤消或历史记录。此列表中最好的一个!它还处理退格键删除对!
    • 哪个 Vim 版本?上次我检查时仍然没有解决方案让撤消/重做/重复在 Vim 7.4 及更高版本中自动关闭时正常工作。一些插件使用了在早期 Vim 版本中工作的 setline()。
    【解决方案4】:

    我也需要一个,我已经尝试了一些插件:

    自动关闭,http://www.vim.org/scripts/script.php?script_id=1849,有点激进。

    简单对,http://www.vim.org/scripts/script.php?script_id=2339,依赖于 Python。如果您在 Linux 上,这不是问题,但在 Windows 上,将 Vim 版本与您拥有的 Python 解释器匹配可能会很麻烦。

    我的建议是 ClosePairs,您可以在 http://www.vim.org/scripts/script.php?script_id=2373 找到它,这对我来说非常有效。简单实用。

    【讨论】:

      【解决方案5】:

      关于这个主题有很多提示和插件。查看 vimtips 站点中的relevant entry

      【讨论】:

        【解决方案6】:

        我目前正在使用auto-pairs,效果非常好。

        插件破坏撤消/重做/重复的问题似乎在上面列出的一些插件中仍然存在,但我认为这不是什么大问题(嗯,至少目前对我来说不是)。

        不过,请注意,在撰写本文时,我无法使用 :helptags 生成带有此插件的帮助文件。

        【讨论】:

          【解决方案7】:

          查看这个新插件:vim-autoclose by Townk。前面提到的AutoClose 具有攻击性,有时表现得不受欢迎。

          【讨论】:

            【解决方案8】:

            使用这个有问题(通过 imap 或脚本之一)。您将无法使用. 命令重复完整的编辑。

            e.g. (foo) with . only gets you foo, without the brackets.

            如果你把括号作为两个字符正常插入就可以了。

            【讨论】:

              【解决方案9】:

              【讨论】:

                【解决方案10】:

                https://github.com/vim-scripts/Auto-Pairs

                测试了这个插件的undo redo。 2013 它只是工作。还有python-mode插件。

                【讨论】:

                  【解决方案11】:

                  cohama 有一个新插件:

                  lexima.vim (github)

                  (尚未在 vim.org 上)

                  此插件支持.command!
                  Afaik,这是唯一支持此功能的插件。

                  撤消/重做序列也有效。

                  【讨论】:

                    猜你喜欢
                    • 2015-01-14
                    • 2011-09-10
                    • 2021-09-04
                    • 2021-09-17
                    • 2011-05-30
                    • 2017-09-29
                    • 1970-01-01
                    • 2011-04-11
                    • 1970-01-01
                    相关资源
                    最近更新 更多