Vz Editor
2007-04-11T06:20:12+09:00

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

番号記号初期キー機能
#23-^QU英大文字/小文字変換

s==0(編集モード)

カーソル位置以降の英字1語の大小を逆にする。大小どちらに変換するかはカーソル位置の1文字で判断される。つまり,カーソル位置が小文字なら,以降を大文字化する。語の途中で実行すると,カーソル位置より前は変化しない。なお,実行後のカーソル位置は変化しない。

戻り値r:常に0

マクロの中で使用することもできるが,カーソル位置の文字コードが60hよりも大きいのか小さいのか判定が必要になるので,何れかのバッファに取得して文字列関数&Su()あるいは&Sl()を使用した方が楽である。なお,入力された1文字を大文字にして他の処理に受け渡すには,関数&u()を使用するとよい。

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

編集モードと同じ

入力窓はこのコマンドを使用する際の作業用として使い易い。

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

編集モードと同じ

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

無効

s==4(メニュー)

無効

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

無効

マクロによる拡張

#23はその使い勝手に制限があるため,マクロでの拡張がよく行われたコマンドの代表でもある。次に掲げるような拡張が複数存在し,マクロでの手法も様々である。

全角英字も変換する拡張例

見米快之氏の拡張

23 ^QU "Word Case"      ;ykome          ; 【全角対応】
        (ck)?{                          ; カーソル位置が半角なら#23のみ実行
                (cd<'A'||cd>'z')?.    ; アルファベットでないなら終了
                a=cd>'Z',              ; a+大文字化  a-小文字化
                i=-1,                   ; ポインタ用カウンタを初期化
                #28                     ; ラインバッファへ入る(cpがlbuf指示)
        :A      i++,                    ; iは0から開始(cp..0がカーソル位置)
                c=cp..i,                ; cに文字コードを取得
                c!!,                    ; cを上位下位交換して演算可能な数値に
                (c=='_'||c=='$'||c>='0'&&c<='9')? >A
                ;特定の記号と数字をスキップして処理を停止させない
                (c>='A'&&c<='Z')?{    ; 大文字なら小文字化処理の対象
                        (a)?? cp..i=(c+$21)!!, >A
                }                       ;'a'($8281)-'A'($8260)=$21
                (c>='a'&&c<='z')?{    ; 小文字なら大文字化処理の対象
                        (a)? cp..i=(c-$21)!!, >A
                }                       ;演算後に上位下位を再交換して填め込む
        }
        #23

直前の語頭だけ大文字にする拡張例

1 ^^ "Capital" (s>2)?. #a &u(cd) mi[+, &o(r) mi], #f

H岡教授の語頭大文字化拡張例

= H_case.def =
* M
89^\"半角英文字列の先頭を大文字/小文字化"
        ?. mr[, &s lx[, ly[, #a #d ' ' #a #23 #d #g &y(0]) &x(0]) mr], &d &b(2)
*

m.gann師の拡張・英大文字/小文字変換

23 ^KW  ""      ;Word Case (63)         ;[\] Abc
        ?. #28 (r)?. &s cp[,            ;cp保存: 長い論理行での復帰のため
        (ct-6)?#a (ks&1)?{ (cd&32)?#23 #d }     ;#d (cd&32<1) } ?#23
        #23 cp], #?

行内をまとめて処理する例

m.gann師の論理行・英大文字/小文字変換

24 ^OW  ""      ;Case Lower (50)        ;[\] Upper
        ?. #? (r)?. wa..19.2-,          ;wa..19: bend, #?: view too
        (ks&1)?&Su(cp) ?&Sl(cp) #?

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