如何让 Vim 自动放置大括号?
Posted
技术标签:
【中文标题】如何让 Vim 自动放置大括号?【英文标题】:How do I get Vim to automatically put ending braces? 【发布时间】:2010-10-27 08:58:57 【问题描述】:在编辑 .scm
文件时,如果 Vim 会在我开始 (
时自动放置结束大括号 )
,那就太好了。我该怎么做?
【问题讨论】:
【参考方案1】:您可以根据自己的喜好映射左大括号:
:imap ( ()<left>
【讨论】:
其他答案中提到的插件具有在键入相应的关闭“)”时表现“智能”的优势。如果不需要,那么我也会使用直线前进地图。 一些插件还: - 不要在注释和字符串上下文中扩展, - 定义一种用一对括号包围选择的方法, - 插入占位符/标记以跳过结束括号(与大多数 sn-ps/templates 扩展插件一致)。 有没有办法只在一行的末尾这样做?有时它比有用更烦人,但有了这个,我会很乐意使用它......【参考方案2】:尝试使用AutoClose插件。
【讨论】:
不要与蒂亚戈·阿尔维斯(Thiago Alves)的AutoClose 另一个不那么激进(也不那么烦人,IMO)混淆。 @AndrewMarshall +1,您列出的版本不那么烦人了。我来这里是为了寻找 Mykola 答案中的替代品,因为它有怪癖。 仅供参考,这个插件似乎工作正常,但对我来说,它引入了“滞后”<ESC>
行为。因此,如果您关心这一点,请避免。【参考方案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】:您可以尝试下载以下插件 AutoClose : Inserts matching bracket, paren, brace or quote
【讨论】:
【参考方案10】:https://github.com/vim-scripts/Auto-Pairs
测试了这个插件的undo redo。 2013 它只是工作。还有python-mode插件。
【讨论】:
【参考方案11】:cohama 有一个新插件:
lexima.vim
(github)
(尚未在 vim.org 上)
此插件支持.
command!
Afaik,这是唯一支持此功能的插件。
撤消/重做序列也有效。
【讨论】:
以上是关于如何让 Vim 自动放置大括号?的主要内容,如果未能解决你的问题,请参考以下文章
如何让 Visual Studio 为功能块自动生成大括号?