18

行に移動してset autoindent
A を押すと<CR>、次の行に移動してインデントが挿入されます。ただし、 Esc を押すと、カーソルが行頭にジャンプし、インデントが消えます。
もう一度正しい場所に移動するには、タブを押して移動する必要があります。

私はヘルプが言うことを知っています:

If you do not type anything on the new line except <BS> or CTRL-D and then type
<Esc>, CTRL-O or <CR>, the indent is deleted again.

これを無効にする方法、または少なくとも回避策はありますか?

4

7 に答える 7

8

私は2日前までこの正確な問題を抱えていました。

これを無効にする方法はありませんが、幸いなことに、無効にする必要はありません。代わりに、次の理由があります。

Sまたはで挿入モードに入りますcc。で再度挿入モードにS入ると、適切なレベルのインデントで挿入モードになり、Vimがインデントを削除したという事実は重要ではなくなります。

注:このトリックはほとんどの場所で機能することがわかりました。しかし、何らかの理由で、Pythonファイルでは機能しませんでした。Pythonファイルタイプが独自のインデント関数をいじっている、またはそれらの線に沿った何かと関係があると思います。

編集:

別のトリックとして、インデントのある行にいてカーソルを移動した場合にインデントが保持されるようにcpoptionsを定義できます。これはすぐに打つという問題を解決することはできませんが、これもまたあなたを悩ませているかもしれない関連する問題です。Esc

于 2012-04-28T19:44:09.270 に答える
4

了解しました。これがわかりました。

Edan Maorの回答に基づくScc、適切なレベルのインデントで挿入モードに入る必要があります。
...そうでない場合を除いて:)

これは2つの状況で機能します。

  • cindent設定すると、Cフォーマットルールに基づいてインデントが挿入され
    ます。これは、Cに似ていないファイルを編集するときに煩わしい場合があります。
  • が設定されている場合indentexpr

私はこれが私のものであることが最善の解決策であることがわかりました.vimrc

set autoindent
set indentexpr=GetIndent()

function GetIndent()
   let lnum = prevnonblank(v:lnum - 1)
   let ind = indent(lnum)
   return ind
endfunction

Sまたはを押すccと、前の空白以外の行と同じインデントが挿入されます。

于 2012-04-30T08:45:45.887 に答える
4

簡単な方法は、「.」を押すことです。(または任意の文字)、エスケープし、x を押して文字を削除します。インデントは保持する必要があります。

于 2012-04-28T14:08:55.747 に答える
3

「o」を使用して改行を開始することを検討してください。以下の設定を _vimrc に追加します (「:set autoindent」があることに注意してください)

" ugly hack to start newline and keep indent
nnoremap o ox<BS>
nnoremap O Ox<BS>
于 2015-06-10T07:21:17.053 に答える
1

==テキストを入力し、その行で通常モードで押します

于 2012-04-28T18:37:52.057 に答える