自动插入闭合大括号,将光标放在Vim中的大括号之间

自动插入闭合大括号,将光标放在Vim中的大括号之间,vim,plugins,Vim,Plugins,我在这上面找到了一些线索,但它们已经有三年历史了。有没有人推荐Vim的插件,这样当我键入{, 它将做到: { ::cursor here:: } 另一件有帮助的事情是 if(::cursor here::) 键入if后,我使用以下代码(php模板): function!EatChar() 设l:char=getchar(0) 返回“” 端功能 inoreabbrev函数\函数maa(){}`aa:调用EatChar() inoreabbrevif_uif(maa){}`aa:调用EatCha

我在这上面找到了一些线索,但它们已经有三年历史了。有没有人推荐Vim的插件,这样当我键入
{
, 它将做到:

{
::cursor here::
}
另一件有帮助的事情是

if(::cursor here::)
键入
if

后,我使用以下代码(php模板):

function!EatChar()
设l:char=getchar(0)
返回“”
端功能
inoreabbrev函数\函数maa(){}`aa:调用EatChar()
inoreabbrevif_uif(maa){}`aa:调用EatChar()
inoreabbrevifelse_uif(maa){}else{}`aa:调用EatChar()
inoreabbrev for_ufor(maa;;){}`aa:调用EatChar()
inoreabbrev foreach_uforeach(maa作为$key=>$value){}`aa:calleatchar()
inoreabbrev while_uwhile(maa){}`aa:调用EatChar()
inoreabbrev`aa:调用EatChar()
显示了一个简单的解决方案,并提供了指向一些更健壮的解决方案的链接

以下是该页面的部分解决方案:

inoremap {      {}<Left>
inoremap {<CR>  {<CR>}<Esc>O
inoremap {{     {
inoremap {}     {}
inoremap{{}
inoremap{{}O
inoremap{{
inoremap{}{}

有许多插件和ftplugins可以完成这项工作。大多数情况下,新的插件并不更好,因为它们经常在不考虑奇怪情况的情况下重新发明轮子

在“旧”的东西中,我有:

  • 这简化了映射的定义,目的是插入平衡的括号对,如字符
  • 这旨在简化定义演化(*)代码段(通常是控制语句)的任务
(*)在注释/字符串上下文中防止了映射/缩写的扩展,提供了C控制语句的几种周边形式,还支持一些风格选项(对于C控制语句,它们很容易转换为其他语言)

我使用。它以一种可配置且不烦人的方式处理此问题。

检查插件。它非常可定制。有一个很好的演示插件在运行

例如,在C中使用snipMate插件

if<Tab>

would produce:

if (::cursor:1::) {
    ::cursor:2::
}
if
将产生:
如果(::光标:1::){
::光标:2::
}
第一个将光标保留在::cursor:1::,第二个将带您到::cursor:2::


snipMate中的bash脚本应该有类似的功能,如果没有,添加一个就非常简单。

如果您不需要各种文本片段插件(或 不想弄清楚如何配置它们以满足您的需要) 并且只有几个简单的模板,您可以创建一个映射 对于每一个,例如:

:nmap <leader>b o{<cr>}<esc>O
:nmap b o{}o

我对这个插件很好奇(最好是通用的)。现在我习惯于键入
{}O
来获得同样的效果,这与Bash有什么关系?非常有用..尽管像上面那样设置一个{触发器(不需要For语句或类似语句),但似乎有一些问题您是否有幸做到这一点,或者只是使用提供的代码段?我通常使用默认代码段。但我确实尝试为“{”添加了一个代码段,它确实有效。我将此代码段添加到~/.vim/snippets/sh.snippets(Shell脚本代码段)。
:nmap <leader>b o{<cr>}<esc>O