カーソルが<Esc>の後の行の先頭に移動するのはなぜですか?


12

挿入モードで.txtファイルの行に沿って編集しているときに、キーシーケンスを使用した書き込みに続いてカーソルが行の先頭に移動することに気付きました。

<esc>:w

この動作変更して、カーソルが:writeの後の位置に留まるようにしたいと思います。これは可能ですか?カーソルを挿入モードのままにしておく必要はありません。書き込み後に最後の位置を維持したいだけです。

WindowsでgVim 7.4を使用しています。私の.vimrcは非常に基本的なものであり、私の動作のいずれかがこの動作を妨げるとは思わない。mswin.vimとexample.vimのソースを.vimrcから削除しました(公式のvim.org Windowsインストーラーにバンドルされています)。

以下のコメントを読んだ後、もう一度問題を確認しましたが、末尾の空白で完全に構成されている行を書き込んだ後、カーソルが左端にしかスライドしないことに気付きました。つまり、行がぶら下げインデントで、スペース以外の文字がない場合、カーソルはesc-:wで左端までスライドするだけです。.vimrcは、次の設定でインデント動作を処理しています。

set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set autoindent 

したがって、インデントされた行の下に作成された新しい行には、行の最初の4つのスペース(保持したい)として4つの末尾の空白が含まれます。「esc」キーを押すと、カーソルがバッファの左端にスライドします。

末尾の空白(インデントとして)で構成される行で、「esc」を押して通常モードに戻るときにカーソル位置を保持する方法はありますか?


3
どのプラットフォームのVimでもこの動作に気づきませんでした... gVimを次のように起動するとどうなりますgvim -u NONE -U NONEか(cmd.exeを使用するか、ショートカットを作成できます)?これにより、(g)vimrcファイルが読み込まれなくなります。
Martin Tournoij、2015

1
それはあなたの完全な vimrcファイルですか?私の最初の疑いは、vimrcファイルのautocmdが末尾の空白を削除していることです。vimrcファイルなしでgVimを起動すると、動作は変わりますか(上記のコメントを参照)?
Martin Tournoij、2015

上記は私の完全な.vimrcではありません。他の設定もあります。.vimrc(:scriptnamesは.vimrcまたは.gvimrcを表示しない)なしでgVimを実行すると、問題が解決します。あなたの言う通りです。私の.vimrcや、これを引き起こしている可能性のあるソースからの何かを調べる必要があります。
ジム

どうやらこの改行上の空白文字の削除は望ましい動作です。ここでは、ファイルに空白文字がないように保つことを目的としています。
ジム

それは新しい行を開くことについてです...ファイルへの書き込みについてではありませんか?
Martin Tournoij、2015

回答:


11

自動インデントのドキュメントを見ると、自動インデントを回避する理由と方法に関する答えがあります。:help 'autoindent'

新しい行を開始するとき(<CR> 挿入モードで入力するとき、または「o」または「O」コマンドを使用するとき)、現在の行からインデントをコピーします。あなたは除いて、新しい行に何も入力しない場合<BS>CTRL-D、次に入力する <Esc>CTRL-Oまたは<CR>インデントが再び削除され、。カーソルを別の行に移動しても、「I」フラグが「cpoptions」に含まれていない限り、同じ効果があります。

言い換えれば、あなたがしたい場合には、インデント、タイプ負けないように何かをし、それをバックスペースする前に打つEscと、先頭のスペースが残ります。

または、挿入モードに戻ったときにインデントレベルに戻したいだけで、それを'cindent'使用している場合Shift-Si、代わりにを使用します。これにより、(既に空の)行がクリアされ、適切なインデントレベルから開始されます。これは上記のような一般的な解決策ではありませんが、Cコードを作成するときは、ファイルが空白のみの行で実際に保存されないようにするために、これを好みます。


これは、元のドキュメントからの私の質問に対する決定的な回答です。要約と説明に感謝します-この情報のために:h autoindentを調べようとは思いませんでした。解決策につながる議論をしてくれた@Carpetsmokerにも感謝します。
ジム

これにより、挿入モードを終了せずにインデントを維持するためにoとOの再マッピングを伴う問題が解決されました。これはnnoremap o o <BS><Esc><DEL>nnoremap O O <BS><Esc><DEL>
、、

本当にありがとう!
Max Coplan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.