この答え 言う:
Vimの元に戻す/やり直しシステムは無敵です。 Vimはスタックではなく元に戻すツリーを使用するため、何かを入力し、元に戻す、別の何かを入力しても、最初に入力したものを戻すことができます。他のほとんどすべてのプログラムでは、この状況では最初に入力したものの履歴が失われます。
これは私がこれを聞いた最初のものです。ツリーに沿ってバックトラックするにはどうすればよいですか?
すべてのコマンドとその使用法をリストした:h undo-redo
も参照してください。
元に戻すツリーをトラバースするには2つの方法があります。 1つは「過去に戻る」ことです。 g+
およびg-
は、時系列または逆時系列でツリー内のすべてのノードをトラバースします(元に戻すブランチ間で任意にジャンプできるため、少し混乱する可能性がありますが、g-
十分な長さで、最終的にどこに行く必要があるかを常に把握できます。 :earlier
および:later
は、7m
または1h
などの時間記述子を取ります。繰り返しますが、これは元に戻すブランチ間で任意にジャンプできます。
もう1つの方法は、:undo n
を使用してツリー内の特定のノードにジャンプすることです。ここで、n
はアクションの番号です。 (すべてのアクション、つまり、テキストの追加、削除、置換は、それらに順番に番号が付けられます。):undolist
を使用して、元に戻すツリーの葉のアクションの数を調べることができます。これにより、ブランチ間を簡単にジャンプできます。その後、u
とCtrl-R
を使用して、そのブランチを上下に移動できます。
Vimヘルプにはいくつかの良い例があります。これがどのように機能するかを理解する最良の方法は、少し試してみることです。
私はパーティーに少し遅れましたが、私はVim用のアンドゥツリー視覚化プラグインを書いたことに言及したと思いました: http://bitbucket.org/sjl/gundo.vim/
個人的に、このようにツリーをグラフ化することが、それを理解できる唯一の方法であることがわかりました。
このページはあなたが知る必要があるすべてを説明します:
Vimを使用している場合、次を使用して元に戻すツリーをナビゲートできます。
u
:(元に戻す)元に戻すツリーに戻るCtrl+R
:(やり直し)元に戻すツリー内を前方に移動します文書を時間内に前後に戻す他の方法:
:earlier 15m
:15分前に戻ります:later 15m
:15分前に移動しますこの質問には答えられていることは承知していますが、例を追加すると思いました。
新しいファイルを作成して、次を入力します。
this is a line
undol
は、元に戻すツリーを表示します。この時点では、何も元に戻していません
:undol
number changes when saved
1 1 14:50:36
eSCを押して、行を次のように変更します。
this is a old line
通常モードに切り替えてu(元に戻す)を押すと、「old」が削除されます。 undol
をチェックすると、この時点ではまだ1つのブランチしかありません。
次のように行を変更します:
this is a new line
:undol
が表示されます:
number changes when saved
2 2 87 seconds ago
3 2 3 seconds ago
次のように入力して、最初のブランチに切り替えることができます
:u 2
これにより、番号2に関連付けられたブランチの最後に移動します。g+
およびg-
を使用して、このブランチに沿って移動できます。この時点では、g+
は何もしません(あなたはリーフにいます)。 g-
を押すと「old」が削除されます(最初の元に戻すツリーをたどっています)。つまり、g-
で「old」を削除し、もう一度g+
を押すと、「old」やり直します。
入力した場合
:u 3
2番目の元に戻すブランチのリーフにジャンプすると、次のように表示されます。
this is a new line
これの多くはここに要約されます:
Gundo.vimを使用するほかに、g+
およびg-