矢印キーを使用した後、以前に挿入したテキストがリセットされるのはなぜですか?


7

ヘルプから:help i_ctrl-a

CTRL-A      Insert previously inserted text.  {not in Vi}

空のバッファがあり、通常モードになっているとします。
入力iして挿入モードにします。
と入力して()から、カーソル<C-h><left>挿入モードでマップしたもの)を押してカーソルを1文字左に移動しfoo、と入力して、エスケープを押して通常モードに戻ります。

バッファには次のものが含まれています。(foo)
誤って、以前に挿入されたテキストはそうで(foo)あると考えましたが、そうではありません。
以前に挿入されたテキストは、挿入モードでもう一度foo入力:registers .またはヒットすることで確認できます<C-a>

矢印キーを押すと、以前に挿入したテキストがリセットされるのはなぜですか?
矢印キーを押しても最後に挿入モードになったときに挿入されたすべてのテキストをドットレジスタに保存する方法はありますか?

回答:


6

挿入モードでは、左矢印キーが実際に挿入モードを終了し、カーソルを移動してから、挿入モードに再び入ります。これにより、変更が挿入()と挿入の2つの変更に分割されますfoo。この動作については、

:help ins-special-special

解決策は、左矢印キーを再マップしてを含めることCTRL-G Uです。Vimリファレンスマニュアルの例は、直接タグ付けされていないため、見つけるのが困難です。最初に行く

:help i_CTRL-G_U

次に、42行を下にスクロールして[An example for using CTRL-G U:] を表示します。左矢印キーの場合は、次のマッピングを使用します。

inoremap <Left> <C-G>U<Left>

動作しているようですが.:registersコマンドを実行した後のレジスタの表示は、(foo)例を実行すると奇妙に見えます。私のWindowsマシンでは、次のようになります。

".  ()^GU<80>klfoo

1
どうもありがとうございました !それは長い間私を悩ませていて、解決策を見つけることができませんでした。私はvimrcをinoremap <C-h> <C-g>U<Left>とで変更しましたが、inoremap <C-l> <C-g>U<Right>あなたのソリューションは完全に機能します!ちなみに、私のLinuxマシンでは、:registersコマンドと同じように奇妙な出力が表示されるため、Windowsからの出力ではありません。
saginaw 2015

2
<c-g>U最近のパッチが付属しています。これが、今まで見逃していた理由の説明になるかもしれません。
Luc Hermitte、2015

Ctrl + Right / Leftでも機能させる方法はあると思いますか?私は類似のマッピングを試みましたが、それらは機能していないようです。
Patryk Czachurski、2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.