使Vim curl 的括号,方括号,父母像Textmate的行为

bvjveswy  于 11个月前  发布在  其他
关注(0)|答案(8)|浏览(100)

所以我想我不是在寻找正确的东西,而是在寻找如何让Vim像Textmate一样工作,当它编写一组花括号,圆括号或方括号时,按Enter键,你会得到这个。

function doSomething(){
          |
      }

      #selector{
          |
      }

字符串
而不是这些垃圾

function doSomething(){
      |}

      #selector{
      |}


我已经有了[{(关闭对方时,他们键入只是返回和缩进是顶。像往常一样,任何帮助将不胜感激。

t3psigkw

t3psigkw1#

我在.vimrc中使用以下Map:

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>

3b6akqbq

3b6akqbq2#

delimitMate用户须知

当使用delimitMate插件时,其他答案的Map会干扰插件。幸运的是,通过设置delmitMateExpansion选项,这种行为已经在delimitMate中可用(但默认情况下禁用)。例如,add

let delimitMate_expand_cr = 1

字符串
到您的.vimrc

xxls0lw8

xxls0lw83#

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

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

字符串

2mbi3lxu

2mbi3lxu4#

我的解决方案是将这个小函数(带有相应的插入模式Map)放在我的.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,使其适用于您首选的文件类型。
它在插入模式下重新Map<CR>,以检查光标当前是否在花括号内,并在适当的地方添加额外的行和缩进。

rdrgkggo

rdrgkggo5#

如果你喜欢Text make,你应该选中Vim plugin, snipMate,如tarek 11011所示。
对于C/C++,默认情况下它有一个函数片段

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

字符串
,这将解决花括号问题。

ugmeyewa

ugmeyewa6#

我的.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};
#表示光标所在的位置:
因此,当你点击{,然后点击空格-> { # },当你点击{,经过一点延迟或使用空格以外的任何东西时,当你在回车后点击{时,这一行将被打破,代码将是:

foo(){
   #
}


当你点击(.时,结果是().<call to omnicomplete>只是行namespace::Singleton::Create()。
您必须将inoremap"一起使用,以避免无限“”

pxyaymoc

pxyaymoc7#

这是我的密钥Map。

inoremap <expr><Cr> "<Cr>" . (strpart(getline('.'), col('.') - 2, 2) =~# '\[\]\<Bar>{}\<Bar>()' ? "<Esc>O" : "")

字符串

  1. strpart(getline('.'), col('.') - 2, 2)表示获取周围的字符。例如,{|}(其中|是插入模式下的光标)将返回{}
  2. '\[\]\<Bar>{}\<Bar>()'是VimSript中的正则表达式,表示匹配[]{}()。我使用<Bar>来进行转义。
    1.在我的例子中,O将有自动缩进,所以我使用一个简单的<Esc>O。你可以调整它以适应你的要求。
jdzmm42g

jdzmm42g8#

我有set ai在我的vimrc,我相信你想要什么?

相关问题