秀丸マクロテクニック


 「秀丸マクロ」は色々と奥が深いです。「こんなこともできるの?」ってこともできたりします。

 ここでは、「秀丸マクロ」で知っていると便利なちょっとしたテクニックを紹介してい きます。

● 現在オープンしているファイルと同フォルダのファイルリストを取得

//----------------------------------------------------------------------
//	ファイルリスト取得
grep "^",$Filter,"",regular,filelist,icon;
                        //グレップでファイルリスト作成
replaceallfast "\\(.*\\)","",regular;   //高速全置換
        
 実は「グレップでこんなこともできます」という実例です。「正規表現」をオンにしておいて、「^」(先頭文字)のみで検索すると各ファイルの最初の1行だけが全て抜き出されます。

 これはその仕組みを利用したファイルリスト一覧取得のテクニックです。たった2行でファイル一覧を簡単に取得することができます。
● 現在オープンしているファイルのフォルダ以下のファイルリストを取得

//----------------------------------------------------------------------
//	ファイルリスト取得
grep "^",$Filter,"",regular,filelist,icon,subdir;
                        //グレップでファイルリスト作成
replaceallfast "\\(.*\\)","",regular;   //高速全置換
        
 前述のテクニックの応用です。さらに「サブフォルダも検索」をオンにすると、今開いているファイル以下の全てのフォルダのファイルリスト一覧を取得することができます。

 マクロを作る際だけでなく、結構普段でも使うと便利なことが多いので、覚えておくと便利です。取得した一覧は、塚本牧生様の「ソートマクロ」を使いキレイに整えると良いです。

 「ソートマクロ」は「秀丸エディタのマクロライブラリ」から入手することが可能です。
● 擬似バイナリーファイル判定

//----------------------------------------------------------------------
//	疑似バイナリーファイル判定
gofiletop;              //ファイルの先頭に移動
searchdown "[\\x01|\\x04-\\x05|\\x07-\\x08|\\x0c-\\x0d|
    \\x10|\\x12-\\x15|\\x1a|\\x1c-\\x1f]",regular;
                        //擬似バイナリー判定
if( !result )endmacro;  //なければマクロの終了
        
 マクロを使って色々ファイルを開いているときに、開いたファイルがテキストでなかった場合にウッカリ色々操作して保存してしまったら大変です。

 そんなことにならないようにする安全弁がこの擬似バイナリーファイル判定です。

 やってることは簡単です。テキストに使われない文字コードを検索して、見つかったら終了しているだけです。終了の変わりに違う処理を入れればプログラムを続行することができます。

※ searchdown の行が2行になっているのは表示上の都合です。実際使う場合は1行にして使ってください。
● ファイルの拡張子の取得

//----------------------------------------------------------------------
//	ファイルの拡張子の取得
$nFILE = filename2;
$FileType = "";   //拡張子の初期化
#FILELen = strlen($nFILE);  //FILEの文字長を設定
#a = #FILELen;    //一時変数の設定
while( #a > 0 ){
    if( midstr($nFILE,#a,1) == "."){
        $FileType = midstr( $nFILE,#a,#FILELen-#a );
                  //拡張子の取得
        break;    //ループ終了
    }
    #a = #a-1;    //一時変数の減算
}
        
 非常に単純な拡張子の取得方法です。どちらかと言うと「型」の方に入れた方が良い内容なのですが、次のテクニックと合わせて使うために、ここに掲載しておきます。
● 拡張子に関連付けられたソフトでそのファイルを開く

//----------------------------------------------------------------------
//	拡張子のレジストリー内参照先をレジストリーから検索
openreg "CLASSESROOT",$FileType;    //レジストリーを開く
$RegPath = getregstr("");   //標準を取得
closereg;           //レジストリーを閉じる

//----------------------------------------------------------------------
//	拡張子の参照先をレジストリーから検索
openreg "CLASSESROOT",$RegPath+"\\shell\\open\\command";
                    //レジストリーを開く
$ExePath = getregstr(""); //標準を取得
closereg;           //レジストリーを閉じる

//----------------------------------------------------------------------
//	「"%1"」を削除
#a = strlen($ExePath);  //一時変数の設定
while( #a >= 0 ){
    if( midstr($ExePath,#a,1)==" " )break;  //スペース探し
    #a = #a-1;      //一時変数減算
}
$ExePath = midstr($ExePath,0,#a); //ソフトのパスを設定

//----------------------------------------------------------------------
//	指定のソフトでそのファイルを開く
run $ExePath+" \""+filename2+"\"";  //ファイルを開く
        
 これは、レジストリの知識がないと良く分からないと思います。レジストリが良く分からない方は、「こうすれば開く」ぐらいに思っておいてください。「コピー&ペースト」でちゃんと動きますのでそのまま使ってください。

 何をやっているかと言うと、(1)レジストリに拡張子のリストを見に行って、(2)レジストリからどのプログラムがその拡張子に関連付けられているかを探し、(3)そのプログラムをコマンドライン引数つきで呼び出しています。

Cronus Crown(クロノス・クラウン)のトップページに戻る
(c)2002-2024 Cronus Crown (c)1997-2024 Masakazu Yanai
ご意見・お問い合わせはサイト情報 弊社への連絡までお願いします
個人情報の取り扱い、利用者情報の外部送信について