|
秀丸エディタの全置換(replaceall)での、「inselect」を指定して「選択し
た範囲内のみ」の置換をする場合、範囲選択が行単位でないとダメという制限が
あります。行単位で選択されてない場合は、選択された範囲を含む行全体が置換
対象に含まれます。
なので、今回のマクロはとにかく行単位でしか置換しないことになると思いま
す。
で、とりあえず僕の方でどうやったらいいか考えてみたんですけども、範囲選
択での全置換が行単位であるという制限を克服するための方法が2つあります。
1つは、置換したい範囲の前後を無理矢理改行で区切って置換させる方法、
もう1つは、HmJre.dllをロードして、それのReplaceRegularNoCaseSense関数
を使って置換の処理を編集の上で実行する方法です。
後者の方法がお勧めなのでそれのマクロの例を書きますと、以下のようになり
ます。
#x = x; #y = y;
golineend2;
$text = gettext( #x, #y, x, y );
moveto #x, #y;
loaddll "hmjre.dll";
#x = dllfunc("FindRegularNoCaseSense", "[a-z\\- ]", $text, 0);
if( #x >= 0 ) {
question "「英字、ハイフン、スペース;いずれも半角」を一括削除OK?";
if( result == yes ) {
$text2 = dllfuncstr("ReplaceRegularNoCaseSense"
, "[a-z\\- ]", $text, 0, "", 1);
beginsel;
golineend2;
begingroupundo;
delete;
insertfix $text2;
endgroupundo;
}
}
このマクロはカーソル位置から行末までの置換をして、それが終わったら
マクロも終わります。もしも置換が終わった後に次の行以降も確認付きで連続処
理したいってことでしたら、以下のマクロでいいと思います。
loaddll "hmjre.dll";
begingroupundo;
while(1) {
searchdown2 "[a-z\\- ]", regular;
if( !result ) {
break;
}
question "「英字、ハイフン、スペース;いずれも半角」を一括削除OK?";
if( result == yes ) {
#x = x;
#y = y;
golineend2;
$text = gettext( #x, #y, x, y );
moveto #x, #y;
$text2 = dllfuncstr("ReplaceRegularNoCaseSense"
, "[a-z\\- ]", $text, 0, "", 1);
beginsel;
golineend2;
begingroupundo;
delete;
insertfix $text2;
endgroupundo;
} else {
break;
}
}
endgroupundo 1; //1つずつやり直し可能
endmacro;
元のマクロとまったく違う物になってしまって申し訳ないですけど。
HmJre.dllの関数呼び出しについては、HmJre.dllと同じフォルダにあるHmJre.
chmファイル(ヘルプファイル)に書いてあります。そちらも参照お願いします。
|
|