vi には
英字バッファ、
数字バッファ と呼ばれる、とても便利なバッファがあります。
-------------------------------------------------------------------------------
編集バッファ
┌────────────────┐ 英字バッファ (aからzの26個)
|これは、画面に見えている、編集中| a┌───────┐
|の内容です。 | └───────┘
│ │ b┌───────┐
│ │ └───────┘
│ │ ...
│ │
│ │ 数字バッファ (1から9の9個)
│ │ 1┌───────┐
│ │ └───────┘
│ │ 2┌───────┐
│ │ └───────┘
│ │ ...
│ │
└────────────────┘
-------------------------------------------------------------------------------
英字バッファ
普通にコピーや削除したら、再びコピー・削除した場合、前のが消えます。
英字バッファという、aからzの26個のバッファがあります。これを使えば、ずっと取っておくことが可能です。
普通のコピーや削除のコマンドの前に "a〜"z を付けます。
例えば、英字バッファa に カーソルの乗っている行をコピーするには "aY、
取り出すには "ap とします。
英字バッファは、次元を超えて・・・ 複数のファイル間で共有されます。
通常、複数ファイルの同時編集で :n で次のファイルに移動した場合、英字でないバッファの内容は失われてしまいます。が、英字バッファだけは残っているのです。
詳しくは後ほど。
数字バッファ
編集バッファで1行以上の削除をすると、数字バッファ1 へその内容が保存されます。
次にまた 1行以上の削除をすると、それが数字バッファ1 へ、そして前に数字バッファ1 にあったものが数字バッファ2 へ移ります。
例えば、
aiueo
kakikukeko
sasisuseso
という 3行を、上から dd していきます。このとき、
数字バッファ1 … sasisuseso
数字バッファ2 … kakikukeko
数字バッファ3 … aiueo
と、新しく dd したものから順に、数字バッファ1、2、3に入っているのです。
ここで、
"1p とすると、1回前に dd した、数字バッファ1 の内容が、
"2p とすると、2回前に dd した、数字バッファ2 の内容が取り出されます。
便利でしょう?
ちなみに、数字バッファへのコピーはできません。 (できる vi もある)
ところで、何回前に dd したか、覚えてれば良いのですが、忘れたら?
"1p でバッファ1 を取りだしてみて、違ったら消し、"2p でバッファ2を取り出してみて、違ったら消し、…
を繰り返すのか? とっておきのテクがあります!
"1p ←数字バッファ1を取り出す
u ←取り出したのを やっぱ取り消す
. ←なぜか数字バッファ2が取り出される
u ←取り出したのを やっぱ取り消す
. ←なぜか数字バッファ3が取り出される
(見つかるまで u と . を繰り返す)
このテクは、どんな vi でも通用するはずです。
vi の種類でも、vim と呼ばれるやつは、exコマンド :dis でバッファの内容が見れますから、このテクを知る必要ないんですが・・・