last updated:2025/09/28
通常の変数はマクロ実行時のみ参照できますが、「静的な変数」を使うとマクロ終了後も内容を保持できます。ただし保存できるのは文字列のみです。
「静的な変数」のサイズ(設定による)や個数(32767個)は上限があります。「共有フラグ」の設定により、他の秀丸エディタから参照可能です。「共有フラグ」によっては、起動中の全ての秀丸エディタを終了しないとメモリが解放されないので、使用しなくなった「静的な変数」は必ず削除したり最低限の範囲で使用するようにしましょう。
setstaticvariable 文 は指定した名前の「静的な変数」へ書き込みを行います。
setstaticvariable 変数名,文字列値,共有フラグ
//共有フラグ 0 に設定された静的な変数を全て削除する。
setstaticvariable "", "", 0;
//共有フラグ 0 に設定された静的な変数 checkに値を保存する。
setstaticvariable "check", "hidemaru", 0;
//共有フラグ 0 に設定された静的な変数 checkを削除する。
setstaticvariable "check", "", 0;
// check.mac
setstaticvariable "check", currentmacrobasename, 0;
execmacro "check1.mac";
endmacro;
呼び出された側で「静的な変数」"check"を参照する。
// check1.mac
$a = getstaticvariable("check", 0);
message $a;
endmacro;
getstaticvariable 関数は、指定した名前の「静的な変数」から読み出しを行います。
$n = getstaticvariable(変数名,共有フラグ);
//共有フラグ 0 に設定された静的変数を全て列挙する。
message getstaticvariable("", 0);
名前が同じでも共有フラグが異なる場合は、別の「静的な変数」と認識されます。
setstaticvariable "check", "hidemaru editor", 0;
setstaticvariable "check", "秀丸エディタ", 1;
//名前は大文字小文字は区別されない
$n1 = getstaticvariable("CHECK", 0);
$n2 = getstaticvariable("CHECK", 1);
message $n1 + "\n" + $n2;
//後始末
setstaticvariable "check", "", 0;
setstaticvariable "check", "", 1;
endmacro;
「静的な変数」は外部DLLから取得・設定が可能です。共有フラグ「-1」だと、通常の文字変数と同じなので、外部DLLとのやり取りで使用するには都合がいいです。
「JavaScript対応」の「オブジェクトの有効範囲」でも説明しましたが、オブジェクト(変数、関数も含む)はウィンドウを閉じるまで保持されるので 共有フラグ = 0 と同じ状態です。
JavaScript側でグローバル変数として宣言しておけば、マクロ側から読み書き可能です。 (JavaScript側の実行環境や名前空間に注意)
JavaScript の場合、サイズや個数の制限はありません。数値をやり取りする場合は制限があります。「JavaScript対応」の「数値のやり取り」を参照。