[英]Vim Auto Indent with newline
如何讓 vim 將光標放在從新行開始的大括號內,即使用 | 表示光標位置:
class {
|
}
現在使用我的設置,它只能做到這一點
class {
|}
我在我的 .vimrc 文件 set autoindent shiftwidth=2 tabstop=2 noexpandtab 中得到了這個
基本上我只想要一個普通的 IDE 如何縮進它。
更新:
我發現如何使用inoremap { {<CR>}<Esc>O
我有 Ubuntu 12.04,但在主目錄中沒有找到vimrc
文件。 全局vimrc
文件在/etc/vim/vimrc
。
該文件中幾乎沒有任何內容。 所以對我來說,將這 3 行添加到/etc/vim/vimrc
的末尾是有效的
set autoindent
set cindent
inoremap { {<CR>}<up><end><CR>
當您下次鍵入{
時,它將通過組合{
, Enter, }
, up, end, Enter 進行更改。 cindent
和autoindent
將添加所需數量的 Tab。
PS我不擅長調整vim,所以有些解釋可能不太准確。 這就是我認為它的工作方式。
我發現delimitMate完全符合您的描述以及更多(即自動插入結尾}
)。 請注意,您必須通過在配置中添加let delimitMate_expand_cr=1
來告訴 delimitMate 擴展回車符。
根據我的觀察,這正是 TextMate 和 SublimeText 中發現的行為。
把它放在你的 .vimrc 中:
imap <C-Return> <CR><CR><C-o>k<Tab>
假設autoindent
和smartindent
設置正確,在大括號之間鍵入Ctrl + Return
會將光標置於您想要的位置。
autoindent
縮進是指將當前縮進級別轉移到后續行中。 為了讓它根據語法縮進,你還需要指定一個像smartindent
或cindent
這樣的標志。
我在我的.vimrc
寫了這個
inoremap <expr> <CR> InsertMapForEnter()
function! InsertMapForEnter()
if pumvisible()
return "\<C-y>"
elseif strcharpart(getline('.'),getpos('.')[2]-1,1) == '}'
return "\<CR>\<Esc>O"
elseif strcharpart(getline('.'),getpos('.')[2]-1,2) == '</'
return "\<CR>\<Esc>O"
else
return "\<CR>"
endif
endfunction
上面的代碼首先檢查您是否使用Enter
來確認代碼完成,如果不是,它會在您輸入Enter
時縮進{|}
。 此外,它還提供 html 標簽自動縮進。
對於您的問題:
class {|}
按Enter
,你會得到
class {
|
}
<html>|<html>
按Enter
,你會得到
<html>
|
</html>
在文件的底部,我正在使用:
# 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.