last updated:2023/12/27
通常の変数はマクロ実行時のみ参照できますが、「静的な変数」を使うとマクロ終了後も内容を保持できます。ただし保存できるのは文字列のみです。
「静的な変数」のサイズ(設定による)や個数(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とのやり取りで使用するには都合がいいです。