簡體   English   中英

Vim 自動縮進換行

[英]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 進行更改。 cindentautoindent將添加所需數量的 Tab。
PS我不擅長調整vim,所以有些解釋可能不太准確。 這就是我認為它的工作方式。

我發現delimitMate完全符合您的描述以及更多(即自動插入結尾} )。 請注意,您必須通過在配置中添加let delimitMate_expand_cr=1來告訴 delimitMate 擴展回車符。

根據我的觀察,這正是 TextMate 和 SublimeText 中發現的行為。

把它放在你的 .vimrc 中:

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

假設autoindentsmartindent設置正確,在大括號之間鍵入Ctrl + Return會將光標置於您想要的位置。

autoindent縮進是指將當前縮進級別轉移到后續行中。 為了讓它根據語法縮進,你還需要指定一個像smartindentcindent這樣的標志。

我在我的.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM