当在大括号内部时,vim自动换行和缩进?

15
例如,如果我正在vim中编写jQuery代码,并且在插入模式下有以下内容(“|”表示当前光标位置):
$('#something').click(function(){|})

当我按下回车键时,我希望得到这个:

$('#something').click(function(){
    |
})

...目前我得到的是这样的:

$('#something').click(function(){
|})

在PHP中,函数定义也会出现同样的情况。有没有办法在括号内按下回车时自动插入额外的新行并缩进光标位置呢?

(如果之前已经问过这个问题,我很抱歉——似乎这是一个常见的需求,但我搜索了一段时间也没有找到答案。)

4个回答

7

我最终将其硬编码到.vimrc中,如下所示

" Make it so that a curly brace automatically inserts an indented line
inoremap {<CR> {<CR>}<Esc>O<BS><Tab>

似乎<BS><Tab>这部分并不必要,但由于某种原因它不能像通常的O命令一样正确缩进,所以我不得不添加它。

嘿,有没有办法让光标不停留在花括号后面,除非我们实际按下“Enter”键?例如:if(true) {如果我按下 foo = 10,它会变成if(true) f{oo = 10} - krehwell

2

这是一个很棒的插件,我用它替换了delimitMate。 - rodorgas

1

我使用 javascript.vim,它(几乎)可以满足您对 JavaScript 代码的需求。

还有一个 php.vim,但我没有测试过。


嗯,我已经尝试使用javascript.vim但没有成功。你需要做些额外的工作才能让额外的换行符起作用吗? - Mike Crittenden
@Mike:首先,你使用的是与提到的版本相同的版本吗?并且你把它放在了正确的位置吗(我的位置在~/.vim/indent)?其次,你的.vimrc文件中是否有“set smartindent”和“autoindent”? - Marcel Korpel
如果你感兴趣的话,可以查看这个链接:https://github.com/mikecrittenden/vimstuff(当然你不必要) - Mike Crittenden
@Mike:嗯,看起来我在我的~/.vim中也有detectindent.vim,但我不确定它是否会有所作用。 - Marcel Korpel
@Mike - 在我的 /usr/share/vim/vim73 目录下有一个名为 indent.vim 的文件,但那是 Vim 自己的文件,所以应该已经包含在内了。 - Marcel Korpel

0

我的版本类似,但使用<C-o>而不是<Esc>,因为它会触发JavaScriptLint.vim的验证。

此外,我并不想让每个{}都在多行上,所以将其映射到ctrl +

inoremap <C-Return> <CR><CR><C-o>k<Tab>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接