使用自动成对关闭时,如何在Vim中设置自动插入新行和缩进

使用自动成对关闭时,如何在Vim中设置自动插入新行和缩进,vim,indentation,Vim,Indentation,我发现了一个名为的Vim自动配对插件。它和其他IDE一样工作得很好。例如,当您键入{时,它将为您提供{|}(“|”表示光标)。然后,如果按“回车”,则{|}将变为: { | } 这是我需要的,但不幸的是它禁用了我的中文输入法应用程序,所以我不得不放弃它 我尝试过其他自动关闭插件,但没有一个可以用这种方式自动关闭。我找到了一种方法使自动关闭像上面那样工作 :autocmd FileType c,java,javascript ino <buffer> { <C-

我发现了一个名为的Vim自动配对插件。它和其他IDE一样工作得很好。例如,当您键入
{
时,它将为您提供
{|}
(“|”表示光标)。然后,如果按“回车”,则
{|}
将变为:

{

      |

}
这是我需要的,但不幸的是它禁用了我的中文输入法应用程序,所以我不得不放弃它

我尝试过其他自动关闭插件,但没有一个可以用这种方式自动关闭。我找到了一种方法使自动关闭像上面那样工作

:autocmd FileType c,java,javascript ino <buffer> { <C-G>u{<CR>}<Esc>O<C-T>
:autocmd文件类型c、java、javascript ino{u{}O
但是shiftwidth有问题。例如,如果I
:set shiftwidth=4
{}
之间的新行将有8个空格的缩进。新行中的缩进是shiftwidth的两倍

我的问题是如何将新行的缩进设置为shiftwidth的相同空间缩进?

inoremap{{}kS
inoremap { {<CR><CR>}<C-o>k<C-o>S

似乎有效。

在vimrc中设置
设置ai
设置智能缩进后

使用以下命令

inoremap{{}O


应该可以。最后一个字符是
大写O
,不是零。

不可以。它不能插入新行自动缩进。我已经编辑了我的答案。我应该使用
S
而不是
。你也尝试过了吗?谢谢你更正我关于vim autoclose的英文Bug报告: