vim-users.jp

Hack #8: 作業の履歴を辿る

Posted at 2009/05/09
このエントリーをはてなブックマークに追加

undo/redoの基礎

テキストエディタにおいて、文章の変更の取り消しはもはや必須と言えます。当然Vimにもその機能はそなわっています。

uundo
CTRL-Rredo
U行の変更全てをundo

それぞれノーマルモードで実行することで文章を編集前の状態に戻したり(undo)、編集後の状態に戻したり(redo)することができます。Vimでは履歴をある一定数保持しているので、undoをくり返せばそれだけ履歴を逆昇ることができます。

Vimのundo/redoはインサートモードに入ってから抜けるまでが1つの変更とカウントされます。長い文章を入力する時は小まめにインサートモードを抜けると作業履歴が管理しやすくなります。

保存する履歴の数を指定する場合は:set undolevels=1000といった感じで設定します。デフォルトでは1000になっています。

undo-branches

上記で説明したuCTRL-Rは直線的にしか履歴を辿ることができません。

例えば「初期状態から文章を入力(state1)し、さらにもう一度入力(state2)、その状態から一度undoをしそのまま別の文章を入力(state3)した」とします。この場合、最後のstate3の状態からstate1の状態には戻れますが、state2の状態には戻れません。

state1--->state2
       |
       +->state3

Vim7からはこの様な複雑な履歴も辿れるように「undo-branches」が実装されました。

g-状態を1つ戻す
g+状態を1つ進める

上記2つのコマンドを使用するとstate1<->state2<->state3を自由に行き来できます。現時点での作業履歴を確認するには:undolistを使用します。

number changes time 2 2 19 seconds ago 3 2 16 seconds ago

:undolistの実行結果です。左のnumberが文章の状態番号でその番号を指定して指定された番号の状態まで戻ることもできます。

:undo 2

他にも時間で指定するコマンドもあります。

:earlier 10s 10秒前の状態に戻る
:earlier 10m 10分前の状態に戻る
:earlier 10h 10時間前の状態に戻る
:later 10s 10秒後の状態に戻る
:later 10m 10分後の状態に戻る
:later 10h 10時間後の状態に戻る

undo-branchesはちょっと複雑ですが、全ての作業履歴(undolevelsの指定内ですが)を記録しているので戻れない状態はありません。うまく使いこなしてみるといいでしょう。

ukstudio

もどる
blog comments powered by Disqus