web-dev-qa-db-ja.com

Vim Auto Indent with newline

新しい行で始まるブレース内にカーソルを置くにはどうすればいいですか?カーソル位置を示す:

class {
  |
}

今私の設定では、これだけを行います

class {
|}

私はこれを私の.vimrcファイルでautoindent shiftwidth = 2 tabstop = 2 noexpandtabに設定しました

基本的に、通常のIDEがインデントする方法を知りたいだけです。

更新:

inoremap { {<CR>}<Esc>Oでこれを行う方法を見つけました

40
Zen

これを.vimrcに入れてください:

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

autoindentsmartindentが正しく設定されていると仮定し、Ctrl + Return中括弧の間にカーソルを置きたい場所に置きます。

12
romainl

delimitMate は正確にあなたが説明したこと以上を行います(つまり、末尾の}を自動的に挿入します)。構成にlet delimitMate_expand_cr=1を追加してキャリッジリターンを展開するようにdelimitMateに指示する必要があることに注意してください。

私の観察では、これはまさにTextMateとSublimeTextで見られる動作です。

22
trkoch

Ubuntu 12.04を使用していますが、ホームディレクトリにvimrcファイルが見つかりませんでした。グローバルvimrcファイルは/etc/vim/vimrcにありました。
このファイルにはほとんど何もありませんでした。だから私にとっては、/etc/vim/vimrcの最後にこの3行を追加するように働きました

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

次に{と入力すると、{、Enter、}、up、end、Enterの組み合わせによって変更されます。 cindentおよびautoindentは、必要な量のタブを追加します。
PS私はvimを調整するのが苦手なので、いくつかの説明はそれほど正確ではないかもしれません。私はそれがどのように働くと思うかです。

21
Ndmitry

autoindentは、currentインデントレベルを後続の行に引き継ぐことを指します。構文に従ってインデントさせるには、smartindentcindentなどのフラグも指定する必要があります。

11

ファイルの最後に、私は使用しています:

# 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を使用します

0
Eduardo Cuomo

.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>
0
Vold Notz