2010-12-18 192 views
33

如何让Vim将光标置于大括号内,即以一个新行开始,即|表示光标位置:Vim自动缩进换行

class { 
    | 
} 

现在我的设置它不仅会

class { 
|} 

我在.vimrc文件 设置自动缩进shiftwidth的= 2的制表位= 2得到这个noexpandtab

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

更新:

我发现如何与inoremap { {<CR>}<Esc>O

回答

9

把这个在你的.vimrc:

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

假设autoindentsmartindent设置正确,括号之间键入Ctrl + Return将会把光标移到您希望它是。

+0

谢谢!那工作:P – Zen 2010-12-18 07:56:19

+0

有反正它映射它进入寿?我有点习惯于按下输入键,因为我一直在使用eclipse。 – Zen 2010-12-18 07:58:09

+0

或无论如何将它集成在一个特定语言的缩进文件中? – Zen 2010-12-18 08:14:54

10

autoindent做到这指的是它携带在当前缩进级别到后续行。要根据语法将其缩进,您需要指定一个标记,如smartindentcindent

+0

压痕不一个概率,我只是想要一个换行符时自动插入当我输入正确的缩进 – Zen 2010-12-18 07:08:50

+0

我很困惑。你是否在插入模式之外?如果你按“我”然后“返回”,你是否得到你想要的行为? – 2010-12-18 07:10:59

+0

是的,我在插入模式下,我想要的是当我按{输入后{我希望vim把我放在结束时的新行}后,基本上是我的问题中的第一个块。 – Zen 2010-12-18 07:22:23

21

我发现delimitMate完全符合您的描述和更多(即自动插入结尾})。请注意,您必须通过将let delimitMate_expand_cr=1添加到您的配置中来告诉delimitMate扩展回车。

从我的观察,这正是TextMate和SublimeText中的行为。

+0

限定用户的FYI用户界面+ neocomplcache:如果使用默认的neocomplcache .vimrc设置,则需要调整映射以适应两种插件。更多信息[这里](https://github.com/Raimondi/delimitMate/issues/111)。我的.vimrc现在有'imap pumvisible()? neocomplcache#smart_close_popup():' delimitMateCR',并且两个插件都像我想要的那样工作 – bknoles 2014-02-12 21:10:05

+4

对于'delimitMate''expand_cr_1'最近还没有工作。相反,你可以使用'imap pumvisible()? “\ ”:“ delimitMateCR”'。 – 2014-11-26 17:21:28

17

我有Ubuntu 12.04,我在主目录中找不到vimrc文件。全球vimrc文件在/etc/vim/vimrc
这个文件几乎没有。所以对我来说它的工作这个3行添加到的/etc/vim/vimrc

set autoindent 
set cindent 
inoremap { {<CR>}<up><end><CR> 

结束的时候,你会键入{下次就会通过组合{改变,输入,},向上,结束,回车。 cindentautoindent将添加所需数量的Tab。
P.S.我不擅长调整vim,所以一些解释可能不太准确。这是我认为它的工作原理。

+0

我在最后一行的末尾添加了一个“”,使其缩进中间一行。即inoremap {{} Skurpi 2013-12-17 10:01:17

0

在该文件的底部,我使用:

# vim: ts=2 sw=2 sts=2 sr noet st ai si 

例如Dockerfile

FROM centos-7 
RUN ... 
CMD ... 

# vim: ts=2 sw=2 sts=2 sr noet st ai si 

如果你想只保留缩进,请使用# vim: st ai si