ペーストのアンドゥ

作者: 上村 郁夫

 [CTRL]+[K][U](ペーストのアンドゥ)は、[CTRL]+[Y](行・ブロック挿入)または[CTRL]+[K][C](行・ブロック複写)を取り消すマクロですが、VZ標準のマクロは不注意に使うと危険な動作をする可能性があります。
 たとえば[CTRL]+[L](検索文字列の取得)で1バイトを取得した直後に[CTRL]+[K][U]を押すと、ファイルの一部がばっさりと消えてしまうことがあります。あくまでペーストの直後にアンドゥすることを想定したマクロですから、仕方がないといえば仕方がないのですが、キーボードをマシンガンのように叩いているときにミスタッチすることだってあるでしょう。編集作業中に不意にファイルの一部が消えたときには、これが原因ではないかと疑ってください。復旧作業としては、[CTRL]+[J]を押すだけです。
 その点、UNPASTE.DEFなら安心です。多少マクロサイズが大きくなるため、一度も事故に遭ったことがない人は、掛け捨ての保険にはいるような気がするかもしれません。そこで、特典を用意しました。
 「挿入」をアンドゥする場合には問題ないのですが、「複写」をアンドゥした場合にはテキストスタックによぶんな行・ブロックが上乗せされることにお気づきでしょうか。

 ●[CTRL]+[J](挿入)と[CTRL]+[K][U](アンドゥ)

    ┌──────────┐
    │  編集テキスト      │
    ├──────────┤
    │          ┌────┤  挿入
    │          │ (^_^)  │←───
    │          └────┤        ┌──────────┐
    │                    │        │  テキストスタック  │
    └──────────┘        └──────────┘


    ┌──────────┐
    │  編集テキスト      │
    ├──────────┤
    │          ┌────┘アンドゥ            ┌────┐
    │          │          ───→            │ (^_^)  │
    │          └────┐        ┌─────┴────┤
    │                    │        │  テキストスタック  │
    └──────────┘        └──────────┘
          ↑
          └─ 実際には、アンドゥしたぶん後ろ側の文章がくりあがってきます。




 ●[CTRL]+[K][C](複写)と[CTRL]+[K][U](アンドゥ)

    ┌──────────┐
    │  編集テキスト      │
    ├──────────┤
    │          ┌────┤  複写              ┌────┐
    │          │ (^o^)  │←───            │ (^o^)  │
    │          └────┤        ┌─────┴────┤
    │                    │        │  テキストスタック  │
    └──────────┘        └──────────┘

  ※「複写」は、「挿入」と同様、テキストスタックのいちばん上の行・ブロック
      をカーソル位置に挿入しますが、テキストスタックの内容は保持したままです。

    ┌──────────┐
    │  編集テキスト      │               ┌─重複─┐
    ├──────────┤               ↓        ↓
    │          ┌────┘アンドゥ  ┌────┬────┐
    │          │          ───→  │ (^o^)  │ (^o^)  │
    │          └────┐        ┌┴────┴────┤
    │                    │        │  テキストスタック  │
    └──────────┘        └──────────┘

 UNPASTE.DEFなら、「複写」をアンドゥしても重複することはありません。
(「Vzマクロコレクション2」所収)

download
======== unpaste.def ======== by I.Kamimura
* M
89 ^KU  "ペーストのアンドゥ"
        (cm==48)? { mb=r, #y. }
        (cm==50)? { mb=r, ux[+, #y ux],. }
;*
;======== End of unpaste.def ========