所以我想我不是在寻找合适的东西,但是我想看看如何让VIM像Textmate一样,在编写一组花括号,parens或方括号时输入和你明白了Pipe表示光标。
function doSomething(){
|
}
#selector{
|
}
而不是这个垃圾
function doSomething(){
|}
#selector{
|}
我已经拥有了[{(当他们输入时只是收到对方并且缩进被压了。像往常一样,任何帮助都会受到赞赏。
答案 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插件时,其他答案的映射会干扰插件。幸运的是,通过设置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
我认为你做了什么?