長大文字列を秀丸エディタに反映する概要秀丸マクロでは、「変数の合計のメモリ使用量」が制限されています。 しかし、秀丸エディタ v8.30以降では、改善されたため、以下のような工夫をすることで、この制限を回避する手段があります。 長大文字列の秀丸本体への反映秀丸エディタ v8.30以降では、
ようになっています。 #PY = loaddll( hidemarudir + @"\hmPY.dll" ); if ( !#PY ) { message("hmPy.dllが導入されていません"); endmacro; } #_ = dllfuncw(#PY, "DoString", R"IRONPYTHON( totalstring = "なんらかの手段によって、長大な文字列を構成" # 現在のアクティブな(同じプロセスの)全テキストを取得 )IRONPYTHON" ); // 全て選択し selectall; // 秀丸エディタへと挿入する。この際に変数を介することなく、「dllfuncstrw」の返り値をそのまま引数として渡すことが重要。 insert dllfuncstrw( #PY, "GetStrVar", "totalstring" ); freedll( #PY ); dllfuncstrwの返り値を一時変数で受け取らないことが重要です。 例えば、次のようにしてしまうと、秀丸の「変数のメモリ制限(1つのマクロ内で使える全ての変数の合計量のメモリの制限)」の影響を受けてしまいます。 // 全て選択し selectall; // $retのように変数として受け取ってしまうと、秀丸マクロ自体が持つ「変数のメモリ制限」にひっかかる可能性があるため、長大な文字列を取り扱えなくなる。 $ret = dllfuncstrw( #PY, "GetStrVar", "totalstring" ); insert $ret; freedll( #PY ); 長大文字列とUnicode文章が長大化すればするほど、cp932(sjis)では取り扱えない文字が混入する可能性が高まります。 |