vimでは、編集モードを終了したときにキャレットが後退しないようにしますか?


8

何もしないで編集モードに入ったり抜けたりすると、キャレットは1文字左になります。そして、私が追加モードに入ったり出たりすると、キャレットは前方に移動してから後方に移動します。

このような場合にキャレットをそのままにするようにvimを設定する方法はありますか?

理想的には、常に追加モードに入りたいのですが、モードに入るときや出るときにキャレットを動かさないでください。

(現時点では、挿入時にキャレットの位置を乱すことがないため、通常は挿入モードを使用します。ただし、行末に追加する必要がある場合を除きます。 Escを押して追加モードに入ります。


1
この質問に対する答えはいいです。私が編集モードに移行するためにiを使用するという彼らの仮定が正しいとすれば、それが逆方向への移動を引き起こしている原因であることを指摘したいだけです。あなたが 'a'(Aではなく)を使うなら、それはあなたが期待するように働くでしょう。
johnny

@ johnny私はそうは思わない。私は通常「通常」モードで、ファイルやものを移動します。編集が必要な場合は、最初にキャレットを配置してから[a]を押すと、位置が間違っていることがわかります。右に移動するためです。私が編集時間の99%を現代の編集者に費やしていることを考えると、 "a"を押す前に1文字を左に置くことを忘れないでしょう。それが私がマクロか何かを望んでいた理由です。
RomanSt

それは習慣の問題です。本当に厄介ですが、最初の年だけです。あなたは最終的に押すことを学ぶでしょう i または a 考えなくてもいい sSci" 限定の代わりに i そして a
Luc Hermitte

1
私はあなたの欲求不満を理解していますが。代わりにあなたがしていることについて考えるようにしてください。 (Vimを通常のテキスト編集者として使用するよりも)それを行うより良い方法があるかどうか自分自身に尋ねてください。私はVimでいつもより良い方法、物事をやるためのVimの方法があることに気づいた。私たちは助けることができますが、問題が発生したときにあなたがしていることを知っておく必要があります。あなたが何かを削除したいとき、例えばあなたは編集モードに入りますか?しないでください、文字を削除するための 'x'があります。文字を置き換えたい場合は、「r」があります。達成したいことについて考えてください。
johnny

@ johnny私はあなたが何を言っているのか理解していますが、私にとって意味を成すにはあまりにも多くの再学習が必要です。私は編集時間の99%をVisual Studioで過ごしていて、とても気に入っています。これを再学習しないことを知っているだけなので、時間を無駄にすることはありません。
RomanSt

回答:


8

この質問は新しいvi / Vimユーザーの間で頻繁に聞かれます、そして答えは通常モードではカーソルは常に文字の "on"ですが、挿入モードではカーソルは常に2文字の "間"にあるということです行末は文字です。これはコンソールVimでも実際にはわかりませんが、GUIでは、挿入モードに入ると、通常モードのときには文字の上にブロックが表示されるのではなく、カーソルが2文字の間のバーになります。

つまり、挿入モードを終了するときにカーソルが1文字後ろに移動するのではなく、単に文字の上に移動するだけです。動きの唯一の安全な方向は左(または後ろ)です。したがって、挿入モードに入る方法は複数あります。

  • "a"は、カーソルが置かれていた文字と次の文字との間にカーソルを置いて挿入モードに入ります。
  • "i"は、カーソルが置かれていた文字と直前の文字の間にカーソル ""を置いて挿入モードに入ります。

この「動き」を抑制するために努力している人もいますが、プラグインや将来実行したい他のVimスクリプトを必然的に妨害します。

私の提案は、適切な状況で "a"と "i"(そして "A"と "I")コマンドを使うことに慣れることです。

"o"と "O"コマンドも学ぶのに役立ちます。見る:

:help a
:help i
:help A
:help I
:help o
:help O

編集:それでもこの動作を変更することを決心している場合は、次のヒントを試してください。 エスケープしてカーソルを1文字左に移動しない


1
私はあなたが言っていることを理解していますが、 "i" / "Esc" / "i" / "Esc"はキャレットの実際の全体的な純移動を引き起こします。私は本当にVIMは単に私のためではないと思います。
RomanSt

2
@romkyns:私はあなたがすべきことは使用であると思います a の代わりに i
Dennis Williamson

1
@Dennisは同意しました、 "a"はキャレットを行の最初の文字の前と最後の文字の後に置くことを可能にするので少し良くなります。しかし私はそれを試しました。何が起こるかというと、私は常に "a"を押す前にキャレットを置き忘れているので、キャレットをすぐに1つ左の位置に移動する必要があります。毎回。それは疲れたので、私は "i"に切り替えました。
RomanSt

@ヘプタイトムーブメントを抑制する何かのそのような欠陥のある実装を私に指摘してもらえますか?私が将来プラグインや他のスクリプトを使いたいと思う可能性は、基本的にゼロです。
RomanSt

1
@romkyns、それは両方の方法で動作します(しません)。再マッピング <esc> 実際にほとんどのプラグインの使用を妨げるでしょう <esc> 正常に動作するようにするだけでなく、同じ方法で通常モードに戻る他の標準機能を使用しているときにも煩わしさが続く <esc> します。オンザフライで正しいキーを使用することを学ぶことは、長期的には拡大縮小/機能するソリューションです。
Luc Hermitte

1

私はカラットとはあなたのカーソルを意味し、あなたが "i"を使っているならこれはあなたのカーソルがある場所に直接挿入されると思う。また、shift-i(I)は行頭に移動し、shift-a(A)は行末まで移動します。

私があなたの質問を誤解したならば、私は謝罪します。


1

再マッピング以降 <ESC> 「危険」と考えられている エスケープキーを避けます 私の中でアプローチし、次のように持っています .vimrc

 inoremap ii <ESC>l

注:行末にスペース文字がないことを確認してください。

シンプルだが完全に「私にはうまくいく」と認定されているので、それ以外は手で入力する必要があります。

私が使うかどうか a または i キャレットが振る舞いを遅らせる原因になっていますが、次に入力したいのは次のとおりではありません。 d$ 行末まで削除するなど


驚くほど簡単な解決策。私が出会った最高のもの。
Tyler Collier

1

これが私の解決策です:

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

それはおかしいです。 SO、SU、Unix + Linuxの3つのサイトすべてに同じ問題があります。


私はそれがおかしいとは思いません:)幸い私はナッツ(diakonos)を動かさないエディタを見つけました、それでこれはもはや問題ではありません。それでも、vimが好きな人には支持されています。
RomanSt
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.