vimでは、ヒットESC
してコマンドモードに戻ると、カーソルが1文字左に移動します。これは私が望んでいることではありません。たまにすぐl
にその場所に戻り、おそらくキャラクターを削除するためにヒットします。
この動作には理由がありますか?これは、私が見逃している使用パターンに便利ですか?
vimでは、ヒットESC
してコマンドモードに戻ると、カーソルが1文字左に移動します。これは私が望んでいることではありません。たまにすぐl
にその場所に戻り、おそらくキャラクターを削除するためにヒットします。
この動作には理由がありますか?これは、私が見逃している使用パターンに便利ですか?
回答:
挿入モードでは、カーソルは文字間、または最初の文字の前または最後の文字の後にあります。通常モードでは、カーソルは文字の上にあります(改行はこの目的のための文字ではありません)。これはやや珍しいことです。ほとんどのエディターは常にカーソルを文字の間に置き、ほとんどのコマンドがカーソルの後の(厳密に言えば、下ではない)文字に作用します。これはおそらく、部分的にGUIの前に、テキスト端末が常にあるという事実にある示した文字(アンダーラインやブロック、おそらく点滅)にカーソルを。この抽象化は挿入モードで失敗します。これはもう1つの位置(ポストとフェンス)が必要だからです。
モードを切り替えるには、いわばカーソルを半角移動させる必要があります。i
左のコマンドが動くと、それが終わった文字の前にカーソルを置くために。a
コマンドは右に移動します。挿入モードを解除すると(を押すとEsc)、可能であればカーソルが左に移動します(行の先頭にある場合は、代わりに右に移動します)。
Esc行動の種類は理にかなっていると思います。多くの場合、行の最後に入力しているので、Esc左にしか行けません。したがって、一般的な動作は最も一般的な動作です。
カーソルの下の文字を最後の興味深い文字と考え、挿入コマンドをと考えてくださいa
。a Escカーソルを動かさずに繰り返すことができます。ただし、空でない行の先頭から開始すると、1つ右に移動します。
視覚的には、gvimではより意味があります。
だから、本当にただであることから、文字を戻っていないとの r
とs
ことに上 r
m
...通常モードに戻ったときにハイライト表示されたままにしてください
ここで回答したように、この動作は編集可能ですが、停止して、何が起こっているのかを少し考えてください。挿入モードの場合、実際には文字の上ではなく、文字の間です。何かを挿入すると、カーソルは挿入したものの最後にジャンプし、次に挿入されるものがその後になります。次に、文字を入力しただけで、それに対して何かをしたい場合を考えます。ヒットEscすると、選択したカーソルが最後に挿入した文字の上に直接置かれます。これを行わなかった場合、実際にはかなり厄介です。
おそらく考えている状況は、挿入モードで、通常モードであるかのように動き回ってから切り替わるときです。その場合、カーソルは1文字戻るように見えますが、そのように考えると、挿入モードで最後に行ったのは挿入ではなかったことを示しています。たぶん、あなたは通常モードでもっと時間を過ごすべきですか?
i
と、ESC
キー押下を?
i
が続くESC
の関数であるi
との完全に独立していますESC
。具体的には、i
vimに文字を挿入するように要求しています。これは、定義上、「a
この文字の後に文字を追加する」ではなく、「現在の文字の前に文字を挿入する」ことを意味します。
入力Alt+ Lコマンドモードに戻ります。
再マッピングやvim設定の変更は必要ありません。ほとんどのターミナルエミュレータではAlt+がKEY送信EscされるためKEY(xtermではXterm*metaSendsEscape: true
〜/ .Xdefaultsファイルに行を追加する必要がある場合があるため)動作します。この動作により、Alt+ Sから+ など、すぐに使用できる他の挿入モードの組み合わせを「作成」することもできますBackspace。
ところで、今書いた文字の上にカーソルを置くことは非常に不便です。たとえば、Escdw挿入したテキストに続く単語は削除しません。
Esc d e
前の単語を削除するために入力できます。頭に既にエンコードされている他の動作を変更したと感じたため、デフォルトの動作に戻しました。
これが私の解決策です。
これについては、wikiaページで提供されるソリューションのより簡潔なバージョンです。
au InsertLeave * call cursor([getpos('.')[1], getpos('.')[2]+1])