おぎろぐはてブロ

なんだかんだエンジニアになって10年以上

(PHP)プログラマのためのVIM (5) - undo

undo

  • オリジナルのviは1回しかundoできない
  • vimは無限 (メモリによる制限のみ)
  • undolevelsを好みの値に設定してください (デフォルトは1000)
  • 簡単なケース: u - undo, CTRL-R - redo
  • vim7では、branched undoが登場
    • 何かをundoして、そこから変更を加えると、ブランチが作成される
    • g-, g+ - 古い/新しい text stateへ移動する (through branches)
  • 時間で移動できる
    • :earlier Ns,m,h - N秒(s)、分(m)、時間(h)前に戻る
    • :later Ns,m,h - 同じように先へ進む
  • :earlier 10m - 10分前、レッドブルを飲んでやってしまったバカな変更の前に戻そう。ふう。

[補足] undo branchについて

いまいち、動きがわからなかったので、:help undo-branchesの例を見てみました。

ここからはじめる:

        one two three ~

xを3回押して、oneを削除:

        ne two three ~
        e two three ~
         two three ~

で、uを3回押して、undoする (ここでブランチができる):

        e two three ~
        ne two three ~
        one two three ~

2番目の単語(two)をxを3回押して削除:

        one wo three ~
        one o three ~
        one  three ~

で、今度はg-を3回押して、undoする:

        one o three ~
        one wo three ~
         two three ~

3回目のg-で最初のundo branch (oneを削除した後)に戻る。
さらに、g-を続けて、最初の状態まで持ってくる。

        e two three ~
        ne two three ~
        one two three ~

テキストだけ眺めていても、やっぱりなんだか分からない!ので、図を書いてみました。(動きには関係ないので、見やすさを考慮して、文字の位置は揃えてます)

oneを削除して、undoして、さらにtwoを削除しようとしたところ(オレンジ色の線)のところで、ブランチが作成されます。uCTRL-Rでの操作だと、twoを削除しはじめた時点で、oneを削除した方(青文字側)には戻れなくなってしまうのですが、g-/g+で移動すれば、そっちにも帰れるよということですね。

まだ、35ページ/全77ページ

意味が分かんなかったので理解するのに手こずった。次は、visual modeあたり