|
範囲選択のみを対象にする方法は幾つかあるのですが、まずは普通の操作として行う
としたら、秀丸エディタヘルプ(マクロヘルプでない)の
[目次]→[コマンド]→[検索系コマンド]→[いろいろな検索例]→[特定の範囲内だけ
で検索したい場合]
のところに説明があります。
マクロの場合、これらの操作と同等の文として書くといいです。
選択した範囲を使う方法は、replaceallfastのパラメータのinselectで行単位、inse
lect2で文字単位にできます。
replaceallfastをすると選択が解除されるので、もう一度するには、selectinselect
([範囲内検索を選択]コマンド相当)を使います。
setcompatiblemode 0x20000;
disabledraw;
if(selecting){
replaceallfast "A","B",inselect2;
selectinselect;
replaceallfast "C","D",inselect2;
selectinselect;
}
endmacro;
部分編集を使う方法は、rangeeditin、rangeeditoutを使います。行単位のみです。
今回の例の場合、行単位だと思うので、これが一番簡単かもしれません。
setcompatiblemode 0x2000C;//0x000C=部分編集を使う
disabledraw;
if(selecting){
rangeeditin;
replaceallfast "A","B";
replaceallfast "C","D";
rangeeditout;
}
endmacro;
カラーマーカーを使う場合は、incolormarkerを使います。
手動操作の場合は手数が多くて面倒ですが、マクロにすると文字単位にできて、いち
いち選択し直さなても対象を維持できるのでやりやすい場合があります。
setcompatiblemode 0x20000;
//disabledraw;
if(selecting){
colormarker "#F00","#FF0", -1, 0, 0, "mylayer";
escape;
message "色を付けました";
settargetcolormarker "mylayer";
replaceallfast "A","B", incolormarker;
replaceallfast "C","D", incolormarker;
message "置換しました";
deletecolormarkerall "mylayer";
message "色を消しました";
}
endmacro;
このあたりの例を、秀丸エディタヘルプだけでなく、マクロヘルプのほうにもあった
ほうがよさそうなので書いておこうと思います。
文字列で@""の書き方を使うと、\でエスケープせずにそのまま"\\t"を@"\t"のように
書けます。
ただしダブルクォーテーション「"」そのものはそのまま書けないです。
\fの書き方を使わないようにするには、区切ごとに()でくくって、それを\1、\2…と
するといいです。
@"ABC\fDEF", @"\1"
だったとしたら、
@"(ABC)(DEF)", @"\2"
といった感じです。
まとめると、以下のような感じになります。(inselect2の場合)
title "―― ●マクロ実行中";
disabledraw;
setcompatiblemode 0x20000;
if( selecting ) {
message "範囲選択を処理します。";
#x=seltopx;
#y=seltopy;
replaceallfast @"^[ \t]+$" , @"" , regular, inselect2;
selectinselect; //再度inselect2
replaceallfast @"^[ ]+" , @"" , regular, inselect2;
selectinselect; //再度inselect2
replaceallfast @"(^)([^ ○§「◎『〈・[(<「■([◆★●※―〔【〒-][^$])"
, @" \2" , regular, inselect2;
escapeinselect; //inselect2状態を解除
message "字下げ総数は" +str(result)+ "個です。";
moveto #x, #y;
endmacro;
}
message "ファイル全体を処理します。";
//ここに従来の処理
endmacro;
|
|