6

スマートインデントをオンにしたvimでは:

  1. Enterif文を言ってから押す
  2. 入力してください{
  3. Enter2回押します
  4. 入力してください}
  5. ヒットして前の行に移動すると、空白行からインデントが削除されます。

vimのドキュメントでさえ、次のように述べています。

新しい行にまたは以外何も入力せずに,<BS>またはCTRL-Dを入力すると、インデントが再び削除されます。<Esc>CTRL-O<CR>

このインデントを削除せずに保持する方法はありますか?

4

4 に答える 4

8

Shift+を使用Sして、空白行から編集を開始します(明らかに、コマンドモードから)。これにより、期待されるレベルのインデントでカーソルが開始されます。


もう1つは、質問に答えないが、全体としてはより良い解決策である。

挿入モードで中括弧を入力すると、一致する中括弧のセットが挿入され、カーソルが中央の新しい行に残ります。

:imap { {<CR>}<Esc>O

同様に、これにより、一致する括弧と角かっこが自動的に挿入されます。

:imap ( ()<Left>
:imap [ []<Left>

:(に追加するときは、先頭を削除しvimrcます。)

ビクターの答えについてコメントしたように、Vimのインデント動作を変更すると、ファイル全体に余分なスペースを含む「空の」行が残ります。IMO、これは完全に耐えられません。

于 2009-07-07T19:53:41.843 に答える
2

これが発生した場合、ddko(またはddO)を使用して、十分なスペースのない行を削除し、正しいインデントで新しい行を開くことがあります。または、を押してから、正しいインデントに到達するのに十分な回数をA押します。Tab

于 2009-07-07T19:55:30.777 に答える
1

私の好みの方法は、数回のストローク{<CR>}<esc>shift+oで追い越すことです。{<CR><CR>}<esc>k shift+sしかし、私はそれでマンネリになり、S を使用する必要があるときに、空の行から適切にインデントされた新しい行を取得するために o または O を使用するだけになります。

つまり、ブレース構造をセットアップし、上に線を開きます。

if (true) {
}//cursor here, press shift-o

そして、期待どおりのインデントが得られます。

open-above のトリックは よりも少ないキープレスではありません<up><end><cr>が、エスケープを再マッピングし、シフトをコード化すると、非常に高速に投入できます。

また、手動のインデントのリセットとブロックの移動も忘れないでください。壊れた中括弧ブロックの内側にいる場合は、単に使用します={(または=i{、中括弧の 1 つの上にいる場合)。テキストをすぐに確認する必要があるグッド アイデアがある場合に使用します。

于 2009-07-10T23:32:30.430 に答える
1

ここの記事は、あなたがまったく同じ問題を抱えていること、そしてそれを修正するためにvimrcに何を入れるべきかについて語っています。

inoremap <CR> <CR><Space><BS>
nnoremap o o<Space><BS>
nnoremap O O<Space><BS>

私はこれを正確にテストしていません。

また、同じ記事は、より短い代替ソリューションへのリンクです。

于 2009-07-07T20:22:09.540 に答える