挿入モードで元に戻す


23

挿入モード中に実行された最後の操作を取り消すコマンドはありますか?

を使用して間違ったレジスタからテキストを貼り付けたところ、次の<C-r>2つのオプションがあります。

  1. 貼り付けたものを手動で削除し、最初からやり直します。
  2. 通常モードに切り替え、ヒットuする前に入力したテキストをヒットして失います<C-r>

もっと良い方法はありますか?

回答:


16

Vimでは、Ctrl-G uコマンドで元に戻すことができる変更の範囲を指定する機能が制限されており、元に戻すシーケンスが中断されます。見る

:help i_CTRL-G_u

あなたの場合、解決策は次のように再マッピングすること<C-R>です。

:inoremap <C-R> <C-G>u<C-R>

次に、入力<C-O>uすると、入力後に行った変更のみが取り消され<C-R>ます。見る

:help i_CTRL-O

1
それは素晴らしいです、私はこのコマンドについて知りませんでした。入力<C-O>uしてから画面に結果が表示されるまでにかなりの遅延があります(約4秒)。
-zool

私もそれに気づきました。知りません; 私が見つけようとします。
ゲイリージョン

ちょっと、<CR>(ctrl-r)の代わりに<CR>(キャリッジリターン)を意味する可能性はありますか?
ダーウェント

いいえ。元の質問は<CR>の動作に関係していたため、マッピングで使用されます。ただし、そのマッピングで<CR>を<CR>に置き換えて、代わりに<CR>によって元に戻すシーケンスを中断することができます。その他の例はにあります:help i_CTRL-G_u
ゲイリージョン

6

挿入モードから:

  1. 貼り付けたテキストが1行よりも小さい場合(2番目のポイントが示すとおり)、単にヒット<C-u>して、現在の行のカーソルの前のすべての文字を削除します。

  2. 貼り付けられたテキストが複数行の場合、2番目のソリューションは次のように調整され、より適切に機能します<C-o>u

上記の両方のポイントは、挿入モードで開始および維持-または終了-します。それらは提案されたソリューションと実際には同じで、単に短くなりました:)


6

<C-w>(左の単語を削除する)または<C-u>(一度押すとカーソルの前の文字をクリアし、もう一度押すと改行を削除する)を試すことができます。:help i_CTRL-Wおよびを参照してください:help i_CTRL-U

レジスタから大量に貼り付ける場合、変更を元に戻すのはもちろん高速です。そのためにinsert-normal-modeを使用できます<C-o>(1つの通常モードコマンドを実行してから挿入モードに戻ります)。

一般に、通常モードに戻ることで編集を小さな断片に分割すると、きめ細かい取り消しの可能性が得られます。

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