Vz Resources
Commands
2018-10-07T21:05:28+09:00

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

番号記号初期キー機能
#48#i^J [F09]行・ブロック挿入

【注】IBM-PC用VZIBMJ.DEFには@[INS]の起動で#iを実行するマクロが初期導入されている。

s==0(編集モード)

行・ブロック挿入

テキストスタックに最後に積んだ文字列をカーソル位置に挿入する。上書きモード時でも挿入される。

戻り値 r:挿入したブロックのモード

ブロックモードとr
rの値ブロックのモード
r == 01行挿入(非ブロック)
r == 1行ブロック挿入
r == 2文字ブロック挿入

見かけの動作としては,テキストスタックから「出す」。実際の動作はテキストスタックの最新の文字列(行/ブロック)を出力したのち,kp(テキストスタックエンドオフセット)を遡及的に更新する。つまり出力直後(新規に行/ブロックがスタックに積まれるまで)であれば,論理的にkpを戻すことで出力前に戻すことも可能である。現実には,初期導入マクロ「ブロック挿入のアンドゥ」を利用して切除/貼付すれば同様であるため,演習材料としては好適かもしれないが「よい子」は手を出さないだろう。

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

無効

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

無効

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

無効

s==4(メニュー)

戻り値rの内容

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

無効

マクロによる拡張

テキストスタックから出す「挿入(insert)」(#48/#i)と,「貼付(paste)」(#50)が別個のコマンドになっていることが理由と思われるが,これらのコマンドの拡張はあまり見られない。テキストスタックを自由に扱いたいのであれば,Emmett氏の stkmenu.def,高橋洋光氏の改造版 stkmenut.def を利用することが推奨される。

挿入後のカーソル位置変更

48 ^J ""        ;Ins[\Ek!]      H_ear
        ?. (ks&1)? ek!, #i ?. ek!,

編集スイッチEkはブロック挿入後のカーソル位置をブロックの先頭/末尾で切り替えるオプションである。Ekは初期設定では無効であり,ブロック方向にかかわらずブロック挿入後のカーソル位置はブロックの先頭に位置する。つまり挿入したブロック内に留まる。Ek+の場合は挿入を実行する前のカーソル行に留まる。

ブロック挿入した部分に編集を加える必要がなく,すぐに次行の編集にとりかかりときはEk+の方が都合がよい。あるいは,文字ブロックを続けて切除/複写したのち,もとの順序で連結的に挿入したい場合もEk+であるのがよい。

なお,非ブロックで行切除/複写したものの挿入時はEk+の影響を受けない。


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