Vz Resources
Commands
2018-10-17T12:07:26+09:00

コマンド拡張で学ぶVZマクロ入門 #47

番号記号初期キー機能
#47#y^Y [F08]行・ブロック切除

【注】IBM-PC用VZIBMJ.DEFには@[DEL]の起動で#47を実行(シフト起動で#49の複写を実行)するマクロが初期導入されている。

s==0(編集モード)

行・ブロックの切除

戻り値 r:常に0

行切除の範囲は,行内のカーソル位置にかかわらず,論理行頭から改行コードを含む論理行末までになる。

関係するオプションと動作

切除された行/ブロックはテキストスタックに保存される。ステータスラインにシステム情報を表示するオプション(Ds)を有効にした環境では,(括弧)内にテキストスタックの使用状況が表示される。

テキストスタックに格納しきれない大きさのブロックを切除しようとした場合は,先頭から格納できる部分のみ切除され,残りの部分はブロック選択された状態のままで残される。このとき「ブロックが大きすぎます」という警告がメッセージラインに表示される。残ったブロックを切除すると,直前の切除によりテキストスタックに格納した部分は押し出されて消滅する。

テキストスタックフル時の警告オプション(Ex)を有効(+)にすると,大きなブロックを切除する際にテキストスタックに格納されている文字列を押し出してしまいそうなときは,「テキストスタックを消去しますか? (Y/N)」の警告を表示する。これに'y'で応答するとテキストスタックの内容を削除(押し出す)してブロックを切除し,'n'で否とすると切除コマンドの実行を中止する。

その他のオプションとして,DOSコマンドの実行前にテキストスタックをクリアするスイッチSkがある。

意図してテキストスタックをクリアしたい場合は,コマンド関数&#51(p)を使用する。

大きなブロックを切除する場合は,カーソルをテキストの先頭に近い側に置くと,より高速に切除が行える。この理由は,ブロック指定の向き(xcで確認可能)に関わらずブロックの先頭から順に処理されるため,処理の都度カーソルをブロック範囲の先頭にジャンプしなければならないからだ。テキストの末尾に向かって大きなブロック指定したときは,#B(ブロックマークとカーソル位置の交換)でカーソル位置を変更しておくとよい。

なお,マクロ実行中にサイレントモードで行単位(mb==0)の切除を繰り返すと,テキストスタックの内容が損傷するバグが報告されている。非サイレントモードであれば問題ないが,動作が丸見えでは支障があるというときは,#< #b #> #d #y のように改行を含む文字ブロックを切除するなどの工夫をすればよい。

s==1(文字列入力モード)

無効

s==2(コマンドラインモード)

無効

s==3(ファイラーモード)

無効

s==4(メニュー)

戻り値rの内容

s==4(1文字入力モード)

無効

マクロによる拡張

完全消去

47 ^Y ""        ;Cut[\ux+]      H_ear
        ?. (ks&1)? ux[+, #y ?. ux],

シフト起動で実行すると,切除したブロック/行をテキストスタックに格納しない。つまり完全に消去する。


コマンド拡張で学ぶVZマクロ入門 #47
The VZ resources, valid XHTML 1.0 Strict. ©2007-2018 by mezala.