Usr_32
Nvim :help
ページは、このスクリプト によって ソース から tree-sitter-vimdoc パーサーを使用して生成されています。
VIM ユーザーマニュアル - Bram Moolenaar 著
アンドゥツリー
Vim は複数レベルのアンドゥを提供します。 いくつかの変更をアンドゥしてから新しい変更を加えると、アンドゥツリーに分岐が作成されます。 このテキストは、分岐間を移動する方法について説明します。
ファイル書き込みまでアンドゥ
いくつかの変更を加えた後、最後にファイルを書き込んだ時点に戻りたい場合があります。 次のコマンドでこれを実行できます。
:earlier 1f
ここで "f" は "file" を表します。
このコマンドを繰り返して過去にさらに遡ることができます。 または、1 以外のカウントを使用してより速く遡ることができます。
戻りすぎた場合は、次のコマンドで前に戻ります。
:later 1f
これらのコマンドは実際に時系列で動作することに注意してください。 これは、いくつかの変更をアンドゥした後に変更を加えた場合に重要です。 次のセクションで説明します。
また、ここではテキストの書き込みについて説明していることに注意してください。 アンドゥ情報をファイルに書き込む方法については、
undo-persistence を参照してください。
セクション
02.5 では、アンドゥ/リドゥの 1 行のみを説明しました。 しかし、分岐することも可能です。 これは、いくつかの変更をアンドゥしてから新しい変更を加えた場合に発生します。 新しい変更はアンドゥツリーの分岐になります。
テキスト "one" から始めましょう。 最初の変更は " too" を追加することです。 そして、最初の 'o' に移動して 'w' に変更します。 これにより、2 つの変更(番号 1 と 2)と 3 つのテキストの状態が得られます。
one
| 変更 1 |
one too
| 変更 2 |
one two
ここで 1 つの変更をアンドゥして "one too" に戻し、"one" を "me" に変更すると、アンドゥツリーに分岐が作成されます。
one
| 変更 1 |
one too
/ \ 変更 2 変更 3 | |
one two me too
これで
u コマンドを使用してアンドゥできます。 これを 2 回行うと "one" になります。
CTRL-R を使用してリドゥすると、"one too" に戻ります。 もう一度
CTRL-R を使用すると "me too" になります。 したがって、アンドゥとリドゥは、最後に使用された分岐を使用してツリー内を上下に移動します。
ここで重要なのは、変更が行われた順序です。 アンドゥとリドゥはこのコンテキストでは変更とは見なされません。 各変更後、テキストの新しい状態になります。
変更のみに番号が付けられ、上記のツリーに示されているテキストには識別子が付いていないことに注意してください。 それらは主に、その上の変更の番号によって参照されます。 しかし、特にツリー内を上に移動するときには、どの変更がアンドゥされたかがわかるように、下の変更のいずれかの番号によって参照されることもあります。
では、どのようにして "one two" に戻るのでしょうか? 次のコマンドを使用できます。
:undo 2
これでテキストは "one two" になり、変更 2 の下にいます。
:undo コマンドを使用して、ツリー内の任意の変更の下にジャンプできます。
ここで別の変更を加えます。 "one" を "not" に変更します。
one
| 変更 1 |
one too
/ \ 変更 2 変更 3 | |
one two me too
| 変更 4 |
not two
ここで気が変わって "me too" に戻りたいとします。
g- コマンドを使用します。 これは時間を遡ります。 したがって、ツリーを上下に歩くのではなく、前に行われた変更に移動します。
g- を繰り返すと、テキストの変更が表示されます。
me too
one two
one too
one
g+ を使用して時間を進めます。
one
one too
one two
me too
not two
:undo を使用すると、ジャンプしたい変更がわかっている場合に便利です。
g- と
g+ は、変更番号が正確にわからない場合に便利です。
g- と
g+ の前にカウントを入力して繰り返すことができます。
しばらくテキストを編集していると、ツリーが大きくなります。 その後、数分前のテキストに移動したい場合があります。
アンドゥツリーにどのような分岐があるかを確認するには、次のコマンドを使用します。
:undolist
番号 変更 時刻
3 2 16 秒前 4 3 5 秒前
ここで、各分岐の末端の番号と変更が行われた時刻を確認できます。 変更 4 の下、"not two" にいると仮定すると、次のコマンドで 10 秒前に戻ることができます。
:earlier 10s
変更にかけた時間に応じて、ツリー内の特定の位置に移動します。
:earlier コマンドの引数は、分の場合は "m"、時間の場合は "h"、日場合は "d" を使用できます。 最後まで遡るには、大きな数字を使用します。
:earlier 100d
再び時間を先に移動するには、
:later コマンドを使用します。
:later 1m
引数は
:earlier と同様に "s"、 "m"、 "h" です。
さらに詳細な情報が必要な場合、または情報を操作したい場合は、
undotree() 関数を使用できます。 戻り値を確認するには、次のようにします。
:echo undotree()