制作Vim Curly Braces,Square Braces,Parens就像Textmate一样

时间:2011-05-20 00:42:25

标签: vim

所以我想我不是在寻找合适的东西,但是我想看看如何让VIM像Textmate一样,在编写一组花括号,parens或方括号时输入和你明白了Pipe表示光标。

      function doSomething(){
          |
      }

      #selector{
          |
      }

而不是这个垃圾

      function doSomething(){
      |}

      #selector{
      |}

我已经拥有了[{(当他们输入时只是收到对方并且缩进被压了。像往常一样,任何帮助都会受到赞赏。

7 个答案:

答案 0 :(得分:25)

我在.vimrc中使用了以下映射:

inoremap {<cr> {<cr>}<c-o>O<tab>
inoremap [<cr> [<cr>]<c-o>O<tab>
inoremap (<cr> (<cr>)<c-o>O<tab>

所以当我输入时:

function foo(){<cr>

我明白了:

function foo(){
    |
}

(<cr>[<cr>类似。

答案 1 :(得分:4)

这是我对Randy Moris的回答的修改,对我来说效果更好:

inoremap {<cr> {<cr>}<c-o><s-o>
inoremap [<cr> [<cr>]<c-o><s-o>
inoremap (<cr> (<cr>)<c-o><s-o>

答案 2 :(得分:4)

delimitMate用户的注释

使用delimitMate插件时,其他答案的映射会干扰插件。幸运的是,通过设置delmitMateExpansion选项,此行为已在delimitMate中可用(但默认情况下已禁用)。例如。添加

let delimitMate_expand_cr = 1

.vimrc

答案 3 :(得分:0)

我的解决方案是将这个小函数(带有相应的插入模式映射)放在我的.vimrc中:

fun! MyCR()
    if strpart(getline('.'), col('.') - 2, 2) == '{}'
        return "\<CR>\<CR>\<Up>\<Tab>"
    endif
    return "\<CR>"
endfun
autocmd FileType c,cpp inoremap <CR> <C-R>=MyCR()<CR>

您可以更改autocmd,使其适用于您首选的文件类型。

它在插入模式下重新映射<CR>以检查光标当前是否在花括号内,并在适当的位置添加额外的行和缩进。

答案 4 :(得分:0)

如果你喜欢Text make,你应该检查Vim plugin, snipMate,如tarek11011所示。

对于C / C ++,它默认具有功能片段

# Function
snippet fun
   ${1:void} ${2:function_name}(${3}) {
      ${4:/* code */}
   }

,这将解决花括号问题。

答案 5 :(得分:0)

我的.vimrc

上有以下内容
  imap {<Space> {<Space><Space>}<left><left>
  imap { {<CR>}
  imap {<CR> {<CR><CR>}<Up>;<Esc>==i

  imap ( ()
  imap () ()
  inoremap <silent> (. ().<C-x><C-o>
  inoremap <silent> (- ()-><C-x><C-o>
  imap (<space> (<space><space>)<left><left>

  imap [ []
  imap [<space> [<space><space>]<left><left>

  inoremap " ""<left>
  inoremap "" ""
好的,解释: 当你点击{,有时你想要打破一条线并且放弃和结束},但有时你只想留在同一条线上,就像:a = {1,2,3};

#表示光标所在的位置:

所以,当你点击{之后,你就会遇到空间 - &gt; { # } 当你在一点延迟之后点击{或者使用除空格之外的其他任何东西时,该线将会中断 当您在输入后点击{时,代码将为:

foo(){
   #
}

当您点击(.结果().<call to omnicomplete> Just line namespace :: Singleton :: Create()。

您必须将inoremap"一起使用,以避免无限的“”“”“”“”“”“”“”“”“”“”“”“”

答案 6 :(得分:-2)

我的vimrc中有set ai我认为你做了什么?