使用换行符Vim自动缩进

Zen*_*Zen 41 vim indentation

如何让vim将光标放在从新行开始的大括号内,即使用| 表示光标位置:

class {
  |
}
Run Code Online (Sandbox Code Playgroud)

现在我的设置只会这样做

class {
|}
Run Code Online (Sandbox Code Playgroud)

我在我的.vimrc文件中设置了autoindent shiftwidth = 2 tabstop = 2 noexpandtab

基本上我只想要一个普通的IDE如何缩进它.

更新:

我找到了如何做到这一点 inoremap { {<CR>}<Esc>O

trk*_*och 22

我发现delimitMate正是你所描述的和更多(即自动插入结尾}).请注意,您必须通过添加let delimitMate_expand_cr=1到配置来告诉delimitMate扩展回车.

根据我的观察,这正是TextMate和SublimeText中的行为.

  • 对于`delimitMate`,expand_cr_1`最近没有工作.相反,你可以使用`imap <expr> <CR> pumvisible()?"\ <cy>":"<Plug> delimitMateCR"`. (4认同)

小智 21

我有Ubuntu 12.04,我vimrc在主目录中找不到任何文件.全球vimrc档案在/etc/vim/vimrc.
这个文件几乎没有.所以对我来说,它最终添加了3行/etc/vim/vimrc

set autoindent
set cindent
inoremap { {<CR>}<up><end><CR>
Run Code Online (Sandbox Code Playgroud)

当您{下次输入时,它将通过组合{,Enter },up,end,Enter 进行更改.cindent并且autoindent将添加选项卡的需要量.
PS我不善于调整vim所以一些解释可能不那么准确.这就是我认为它的工作原理.


Jus*_*ers 12

autoindent指的是它将当前的压痕水平带到后续的线上.要根据语法缩进它,您需要指定一个smartindent或多个标志cindent.


rom*_*inl 12

把它放在.vimrc中:

imap <C-Return> <CR><CR><C-o>k<Tab>
Run Code Online (Sandbox Code Playgroud)

假设autoindent并且smartindent设置正确,Ctrl + Return在大括号之间键入将把光标放在你想要的位置.

  • 这是一个略微变化,与重新映射<Tab>`imap <C-Return> <CR> <CR> <Co> k <Ct>的插件更兼容 (3认同)