Hack #8: 作業の履歴を辿る
Posted at 2009/05/09ツイート
undo/redoの基礎
テキストエディタにおいて、文章の変更の取り消しはもはや必須と言えます。当然Vimにもその機能はそなわっています。
u | undo |
---|---|
CTRL-R | redo |
U | 行の変更全てをundo |
それぞれノーマルモードで実行することで文章を編集前の状態に戻したり(undo)、編集後の状態に戻したり(redo)することができます。Vimでは履歴をある一定数保持しているので、undoをくり返せばそれだけ履歴を逆昇ることができます。
Vimのundo/redoはインサートモードに入ってから抜けるまでが1つの変更とカウントされます。長い文章を入力する時は小まめにインサートモードを抜けると作業履歴が管理しやすくなります。
保存する履歴の数を指定する場合は:set undolevels=1000
といった感じで設定します。デフォルトでは1000になっています。
undo-branches
上記で説明したuとCTRL-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