141

この答えは言う:

Vimの元に戻す/やり直しシステムは無敵です。何かを入力し、元に戻し、他の何かを入力します。Vimはスタックではなく元に戻るツリーを使用するため、最初に入力したものを元に戻すことができます。他のほとんどすべてのプログラムでは、この状況で最初に入力したものの履歴が失われます。

これは私がこれを聞いた最初のものです。ツリーに沿ってバックトラックするにはどうすればよいですか?

4

8 に答える 8

154

:h undo-redoすべてのコマンドとその使用法をリストした、 も参照してください。

元に戻るツリーをトラバースするには2つの方法があります。1つは、「過去にさかのぼる」ことです。 g+ツリー内のすべてのノードを時系列または逆時系列でトラバースしg-ます(元にされるブランチ間を任意にジャンプできるため、少し混乱する可能性がg-ありますが、十分な時間があれば、常に必要な場所に移動できます最終的)。 またはのような時間記述子:earlierを取ります。繰り返しますが、これは元に戻るブランチ間を任意にジャンプできます。:later7m1h

もう1つの方法は、アクションの番号である:undo nwhereを使用して、ツリー内の特定のノードにジャンプすることです。n(すべてのアクション、つまりテキストの追加、削除、置換は、実行時に順番に番号が付けられます。)を使用して、元に戻るツリーの葉のアクションの数を調べることができます:undolist。これにより、ブランチ間を簡単にジャンプできます。u次に、とを使用Ctrl-Rしてそのブランチを上下に移動できます。

Vimヘルプにはいくつかの良い例があります。これがどのように機能するかを理解するための最良の方法は、少し遊んでみることです。

于 2009-07-06T20:09:07.523 に答える
73

私はパーティーに少し遅れてい
ますが、Vim用のundoツリー視覚化プラグインを書いたことに言及したいと思いました:
https ://github.com/sjl/gundo.vim

個人的には、このようにツリーをグラフ化することが、それを理解できる唯一の方法であることがわかりました。

于 2010-10-18T22:24:16.513 に答える
18

このページでは、知っておくべきことをすべて説明しています。

http://vimdoc.sourceforge.net/htmldoc/usr_32.html

于 2009-07-06T19:48:42.977 に答える
17

vimを使用している場合は、次を使用して元に戻るツリーをナビゲートできます。

  • u:(元に戻す)元に戻すツリーに戻ります
  • Ctrl+R:(やり直し)元に戻るツリーで前に進む

ドキュメントを時間内に戻したり進めたりする他の方法:

  • :earlier 15m:15分前に戻る
  • :later 15m:時間15分で前に移動します
于 2009-07-06T20:12:59.170 に答える
12

この質問に答えられたことは承知していますが、例を追加したいと思いました。

新しいファイルを作成し、次のように入力します。

this is a line

undol元に戻すツリーが表示されます。この時点では、何も元に戻していない

:undol

number changes  when               saved
     1       1  14:50:36

次にESCを押して、行を次のように変更します。

this is a old line

通常モードに切り替えてu(元に戻す)を押すと、「古い」が削除されます。チェックする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+は何もしません(あなたは葉っぱにいます)。「old」を押すg-と削除されます(最初の元に戻るツリーをトラバースしています)。つまり、「old」を削除してもう一度g-押すg+と、「old」がやり直されます。

入力した場合

:u 3

2番目のundoブランチのリーフにジャンプすると、次のように表示されます。

this is a new line
于 2014-05-25T22:15:49.910 に答える
8

これの多くはここに要約されています:

http://vim.wikia.com/wiki/Using_undo_branches

于 2012-01-16T23:21:47.740 に答える
4

gundo.vimを使用する以外に、私は言及したいと思いg+ますg-

于 2014-01-30T09:00:02.173 に答える
4

パッケージundotreeは純粋なvimscriptで記述されているため、要件はありません。

手遅れになる前にこれをvimrcに追加してください:

  set nobackup
  set noswapfile
  set nowritebackup
  set undolevels=10000         " use many levels of undo
  set history=10000    " After nocompatible

  if has('persistent_undo')
    set undodir=$HOME/.vim/undo
    set undofile 
  endif 

ここに画像の説明を入力してください

于 2019-12-10T15:16:19.407 に答える