編集のやり直し

作者: 上村 郁夫

【概要】
 テキストにまちがえて文字入力したり、リターンキーで改行をいれてしまったときなど、ソロバンのようにすべて御破算にして、元に戻したいことがあります。VZ.DEFに最初から入っている[ESC][U](編集のやり直し)はそのためのマクロですが、カーソルはファイルの先頭に戻ってしまいますし、タブサイズ(オプションht)やテキストごとの画面幅(オプションwe)も初期化されてしまいます。
 UNDO.DEFを使えば、御破算にする前のカーソル位置、タブサイズ、画面幅を引き継いで、編集のやり直しができます。

【使用法】
 [ESC][U]を押してください。テキストが修正されている場合には「編集テキストを放棄しますか? (Y/N)」と問い合わせます。

 鷲鼻は所持品ではない
┌───────────┐              ┌───────────┐
│    編集中テキスト    │              │    編集中テキスト    │
├───────────┤              ├───────────┤
│〈ホームズの所持品〉  │              │〈ホームズの所持品〉  │
│鷲鼻                  │  =======>    │拡大鏡                │
│拡大鏡                │  [ESC][U]    │鳥打帽(挿絵家の創作)│
│鳥打帽(挿絵家の創作)│              │このように、……      │
└───────────┘              └───────────┘
           ↓                                     ↑
         破棄される                       ディスクの元ファイルをオープン
 ※ VZ.DEFの「7 [ESC]U @U "U 編集のやり直し"」と差し替えてください。
(「Vzマクロコレクション」所収)

download
======== undo.def by I.KAMIMURA ========
【より完璧な編集のやり直し】

* M
7  [ESC]U @U "Undo Edit"
        ?. #]                           ; ステータスラインを再表示
        (mr==1)? { &a(37) (r<1)?. }     ; 修正フラグが立っていたら問い合わせ
        &s y=ky, (Dn)? n=ld, ? n=ln,    ; 表示行番号/論理行番号
        e=we, t=ht,                     ; 画面幅/タブカラム数を記憶
        mr-, #L #P #m                   ; 同じファイル名でロードし直す
        we=e, ht=t,                     ; 画面幅/タブカラム数を復帰
        &#J(n) ky=y, &d #]              ; 破棄前の行番号へジャンプ
*
======== End of undo.def ========

【作者コメント】
「Vzマクロ道場」や「Vzマクロ博物館(別館)」で紹介したESC_U.DEFのより完璧版です。