日本語化したアプリケーションではよく「元に戻す」という感じの名前が付いているのだが、 その名の通り直前の入力・削除操作を取り消す操作である。 操作自体は極めて簡単。編集モードで次のように打てばよい。
u
・・・気が遠くなるほどに簡単である。 たったこれだけで直前の入力操作がキャンセルされる。 簡単すぎるのだが、一つ覚えるべきことがある。 それは「直前の操作」がどこからどこまでを指すのかである。 切り取りや貼り付け、削除といった操作は1コマンド単位であり、悩むこともない。 問題は普通に文字入力を行った場合である。 入力一文字ごとに1操作と見なされるのだろうか。
解答を言うと、入力操作は「viモードに移動して、再び編集モードに戻るまで」が1操作とみなされる。 では例を示す。
MAPIRO MAHAMA DIROMAT!!
この文を次の2パターンの打ち方で入力してみる。
<i>MAPIRO <ESC><a>MAHAMA DIROMAT!!<ESC>
<i>MAPIRO <ESC><a>MAHAMA <ESC><a>DIROMAT!!<ESC>
<i>、<a>はviモードへの移動、<ESC>は編集モードへの移動である。 最後の「MAHAMA DIROMAT!!」を一息で打っているか、二度に分けて打っているかの違いでしかない。 それぞれの場合で「u」と入力し、Undoさせてみると・・・。
MAPIRO
MAPIRO MAHAMA
どちらのパターンも最後の<a>〜<ESC>が取り消されている。
ところで、続けてもう一度uと入力したら2つ前の操作までキャンセルされるのであろうか。 昨今のエディタであれば、無限Undo、無限Redoぐらいできて当たり前であるが・・・? これはどのviを使用しているかによる。
生粋のviは、不便なことに直前の操作しか取り消せない。 Undo後続けて「u」を入力するとUndoのUndo、ということでUndoが取り消されてUndo前の状態に戻る。 と自分で書いていてわけがわからない。 とにかく一つ手前までしか取り消せないのだ。
しかし、比較的新しいviクローンでは無限Undo(Redo)を実装している場合があるので、 こういったものを使っているのであればuを入力するたびに2つ前、3つ前・・・の操作をキャンセルしていく。 この場合は「U」を入力することでUndoの取り消しになる。 例えば3回「u」を入力すると3つ前の操作まで取り消されるが、 そのあと「U」を入力すれば3回目のUndoが取り消されて、 2つ前の操作まで取り消した状態になる。
Undoの反対の操作で、日本語アプリケーションでは「やり直し」といった名前になっている。 直前の入力、削除操作を繰り返すというものである。 viではこの機能をかなり格好いいインターフェースで使用できる!! さぁ、見て驚け。
.
以上。 おっと、あまりに簡単すぎて操作だけでなく見た目まで簡潔になりすぎてしまった。 いやぁ、困ったものだ。 これはいわゆる「ドット」である。 右手の薬指を一段下に落とすだけでRedo。 なんと素敵なインターフェースか・・・。
それでは操作例を。 まず、次のように入力する。
TREBOR SUX<return>
最後の<return>は改行しているだけである。
この後ESCキーを叩いて編集モードに戻って、.
を2回打つと・・・。
TREBOR SUX
TREBOR SUX
TREBOR SUX
というふうに、入力動作が改行込みで二回繰り返されるのである。
削除に対してもかなり有効である。 実は、上記「TREBOR SUX」の「SUX」は「くそったれ!」といった意味の実に汚い言葉である。 紳士として、かような粗野で下品な単語を3つも並べてはおけないのである。 削ってしまいたいのである。 かといって、たかが3行、置換コマンドを叩くのも面倒くさい。 とすると、やりかたとしては
TREBOR SUX
TREBOR SUX
TREBOR SUX
と、消したい単語の先頭にカーソルを移動させて、d$
のように入力すれば・・・。
TREBOR
TREBOR SUX
TREBOR SUX
一つ削った。
いちおうおさらいしておくと、d$
は「行末までカット」というコマンドであり、
今回は単なる削除操作として使っている。
では、あと二つ残っているので、
カーソルを一行下に移動させて、
同じ操作を繰り返すだけ・・・つまり、Redoの出番だ。
普通にやると、jd$
と2回打つ必要があるが、
Redoを利用すれば
j.
で・・・。
TREBOR
TREBOR
TREBOR SUX
もう一発j.
。
TREBOR
TREBOR
TREBOR
という具合に削除処理が繰り返されるわけである。 まったくもって楽である。