長大文字列を秀丸エディタに反映する

概要

秀丸マクロでは、「変数の合計のメモリ使用量」が制限されています。
(デフォルトでは1M)
このため、長大な文字列をhmPeach内で構築した場合に、これを秀丸エディタへと反映するには面倒な手順が必要でした。

しかし、以下のような工夫をすることで、この制限を回避する手段があります。

長大文字列の秀丸本体への反映

  • 一時変数を利用しなければ、何かの関数の結果を、別の関数等の引数へと渡した際、 メモリ制限を受けない

ようになっています。
この性質を利用して、

mytest.mac
#PHP = loaddll( hidemarudir + @"\php\hmPeach.dll" );
#_ = dllfuncw( #PHP, "DoFile", currentmacrodirectory +@"\mytest.php" );

// 全て選択し
selectall;
// 秀丸エディタへと挿入する。この際に変数を介することなく、「dllfuncstrw」の返り値をそのまま引数として渡すことが重要。
insert dllfuncstrw( #PHP, "GetStrVar", "totalstring" );
 
freedll(#PHP);
mytest.php
<?php
$GLOBALS['totalstring'] = "長大な文字列";
?>

dllfuncstrwの返り値を一時変数で受け取らないことが重要です。
これにより、秀丸に存在する「変数のメモリ制限」という制約を受けなくて済むため、
hmPeachで長大な文字列を生成したものをそのまま秀丸へと反映できます。

例えば、次のようにしてしまうと、秀丸の「変数のメモリ制限(1つのマクロ内で使える全ての変数の合計量のメモリの制限)」の影響を受けてしまいます。

// 全て選択し
selectall;
// $retのように変数として受け取ってしまうと、秀丸マクロ自体が持つ「変数のメモリ制限」にひっかかる可能性があるため、長大な文字列を取り扱えなくなる。
$ret = dllfuncstrw( #PHP, "GetStrVar", "totalstring" );
insert $ret;

freedll( #PY );