vimの `ESC`がカーソルを元の位置に戻すのはなぜですか?

vimの `ESC`がカーソルを元の位置に戻すのはなぜですか?

vimでクリックしてESCコマンドモードに戻ると、カーソルは1文字左に移動します。私が望んでいたわけではなく、時にはl文字を削除したり、その場所にすぐに戻ることもありました。

このような行動に理由がありますか?私が見逃した使用パターンにこれは便利ですか?

答え1

挿入モードでは、カーソルは文字の間、最初の文字の前、または最後の文字の後にあります。通常モードでは、カーソルは文字の上にあります(改行はこの目的に使用される文字ではありません)。これは少し珍しいです。ほとんどの編集者は常に文字の間にカーソルを置き、ほとんどのコマンドは文字に対して機能します。後ろに(厳密には言わない。下に) カーソル。これは、GUIが出現する前に常にテキスト端末が使用されていたためです。見せるカーソルが文字(下線またはブロック、点滅する可能性があります)の上にあります。この抽象化は、1つ以上の位置(柱とフェンス)が必要なため、挿入モードで失敗します。

モードを切り替えるには、カーソルを文字の半分だけ移動する必要があります。このiコマンドは左に移動し、カーソルを終了文字の前に置きます。a右に移動するように指示します。可能であれば、挿入モードを終了すると(キーを押してEsc)、カーソルが左(または行の先頭にある場合は右)に移動します。

私はこのようなEsc行動が意味があると思います。通常、行の末尾に入力してEsc左側にのみ入力できます。したがって、一般的な行動が最も一般的な行動です。

カーソルの下の文字を最後の面白い文字として扱い、挿入コマンドをその文字として扱いますa。カーソルを移動せずに繰り返すことができますが、a Esc空ではない行の先頭から始めると、右に1つの位置に移動します。

答え2

視覚的にはgvimでより意味があります。

編集すると、カーソルは文字の間にあります。
ここに画像の説明を入力してください。

通常モードでは、最後の文字の上にあります。
ここに画像の説明を入力してください。

したがって、実際には文字を返しません。〜サイ rそしてsなる存在する r

答え3

この動作は編集可能です。ここに答えたようにでも、止まって何が起きているのか考えてみてください。挿入モードでは、実際には文字の上にあるのではなく、文字の間にあります。何かを挿入すると、挿入してから項目が後ろにあるようにカーソルが挿入した端に移動します。それでは、文字を入力してその文字で何かをしたいと思います。クリックすると、Esc挿入した最後の文字に直接選択カーソルが置かれます。そうでなければ、むしろもっと恥ずかしかったでしょう。

あなたが考えることができるのは、挿入モードにあるときに通常モードのように動いてから切り替えることです。この場合、カーソルは文字を返しますが、そうすると、挿入モードにあり、最後に行った操作は挿入ではありません。たぶん、通常モードでより多くの時間を費やす必要がありますか?

答え4

私の解決策は次のとおりです。

以下は、提供されたソリューションのよりクリーンなバージョンです。これに関するwikiページ

au InsertLeave * call cursor([getpos('.')[1], getpos('.')[2]+1])

関連情報