番号 | 記号 | 初期キー | 機能 |
---|---|---|---|
#48 | #i | ^J [F09] | 行・ブロック挿入 |
【注】IBM-PC用VZIBMJ.DEFには@[INS]の起動で#i
を実行するマクロが初期導入されている。
行・ブロック挿入
テキストスタックに最後に積んだ文字列をカーソル位置に挿入する。上書きモード時でも挿入される。
戻り値 r:挿入したブロックのモード
rの値 | ブロックのモード |
---|---|
r == 0 | 1行挿入(非ブロック) |
r == 1 | 行ブロック挿入 |
r == 2 | 文字ブロック挿入 |
見かけの動作としては,テキストスタックから「出す」。実際の動作はテキストスタックの最新の文字列(行/ブロック)を出力したのち,kp(テキストスタックエンドオフセット)を遡及的に更新する。つまり出力直後(新規に行/ブロックがスタックに積まれるまで)であれば,論理的にkpを戻すことで出力前に戻すことも可能である。現実には,初期導入マクロ「ブロック挿入のアンドゥ」を利用して切除/貼付すれば同様であるため,演習材料としては好適かもしれないが「よい子」は手を出さないだろう。
無効
無効
無効
無効
テキストスタックから出す「挿入(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+
の影響を受けない。