「u」と「CTL-R」を使用する場合、vimは単一の「編集」のサイズをどのように決定しますか?


17

使用している場合uまたはCTL-R取り消しまたはvimの編集を再実行するために、私は、テキストだけでなく、最新のキーストロークのALTERチャンクに思えます。

単一の編集と見なされるチャンクのサイズを決定するものは何ですか?

回答:


19

の定義を探していますundo-blocks

から:h undo-blocks

通常、1つの元に戻すコマンドは、そのコマンドが何回変更されても、入力したコマンドを取り消します。この一連の取り消し可能な変更は、取り消しブロックを形成します。したがって、入力されたキーが関数を呼び出すと、関数内のすべてのコマンドが一緒に取り消されます。

同じブロックがに使用されredoます。から:h redo

最後の変更が記憶されます。上記の取り消しおよびやり直しコマンドを使用して、テキストを各変更前の状態に戻すことができます。変更を再度適用して、元に戻す前にテキストを戻すこともできます。


4
CTRL-G u挿入モードのコマンドを使用して、単一の元に戻すブロックを手動で分割することもできます。これは、挿入モードマクロがある場合に便利です。
fruglemonkey

8

Vimのモーダル編集は、しばしばと見ているオペレータ(例えばcd、...)の上に適用される運動を(例えばiww}、...)。すばらしい副産物として、Vimは大きなアンドゥを行います。他の編集者が多くの小さな取り消しを取り消しブロックにするために推測する必要があるのに対して、Vimはこれを自然に行います。別の副作用として、これは繰り返し演算子.(ドットコマンド)を提供します。

あなたの質問は特にキーストロークに言及しているので、挿入モードで小さな変更を元に戻す方法を知りたいと思います。答えは、これは「Vimの方法」ではないということです。「The Vim Way」は、一度に短いバーストの挿入モードになることを意味します。これは、挿入モードでミスがあった場合、通常モードを終了してテキストを修正するか、元に戻す、、uおよびテキストを書き換えるだけの場合が多いことを意味します。

挿入モードのときに、元に戻すブロックを分割する必要がある場合があります。これは<c-g>u、挿入モードで実行できます。:h :undojおよび:h undo-blocksを参照してください。

さらにヘルプが必要な場合は、以下をお勧めします。

:h undo-blocks
:h :undoj
:h undo-tree
:h persistent-undo
:h undo.txt

このテーマに関するいくつかのスクリーンキャストもあります。


「チャンキーアンドゥ」-私が見た中で最高の説明。
マットパーカー

6

このように考えることもできます。挿入モードでテキストを編集し、を押すたびにEscブロックが形成されます。そのブロックを取り消そうとすると、挿入モードに入る前に同じ位置に移動します。

したがって、挿入モードを時々終了するだけで、変更を「保存」できます。挿入モードに移動して関数を作成するとしましょう。コーディングを続けて次の機能に進むこともできますが、通常モードに戻って挿入モードに切り替えることが望ましい場合があります。そのようにして、簡単な方法でコードを構造化することができ、戻る必要がある場合は、どの位置で終わるかを知ることができます。

注:移動に矢印を使用する場合、Esc+ [ hjkl] を押した場合と同様です

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