2010-12-18 131 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