秀丸エディタ用一括置換マクロ

今回は、ここ数年メインで使っている秀丸エディタの一括置換マクロです。
WZEditorから秀丸エディタに乗り換えたので、置換データの書式は同じです。
とはいえ、コメント行の説明だけでは置換データを書きにくいと思うので、次回は具体的な置換データの書き方を書こうと思います。

(tikan.mac)

//秀丸エディタ ver8.63-k
//置換文字列を別ファイルにまとめておいて,一括で確認しながら置換していくマクロ
// 2016/08/08 copyright by つかさ
// 2016/09/16 置換時のちらちらを抑えるようにした。
// 2017/03/29 relファイルの途中までしか置換しない現象を修正,置換終了時にカーソル位置を変更しない処理を追加。
// 2018/01/12 終了後,オプション値を元に戻す
// オプション
// 2019/12/18 置換時のオプションを変更。デフォルトで確認なしで置換。コメント行にariのある行は確認あり。
//置換用ファイル 名前.rel
//置換用ファイル 書式
// (行頭)置換文字列<TAB>検索文字列<TAB>コメント行
// ※1 検索・置換は,すべて正規表現使用です。
// ※2 コメント行に「ari」と入力すると,確認ありで置換します。
// コメント行に「nasi」があっても,なくても,確認なしで置換します。
// ※3 行頭に「#」または「?」があると,その行はコメント行
// ※4 確認ありのとき,2つ以上置換したい場合は「置換+次の行」を選ぶこと(WZバージョンとの違い)
// ※5 最後に置換した数を表示しない(WZバージョンとの違い)
setcompatiblemode 0x20000; //検索条件を変更しない
#c3=column; //base速記録の現在桁位置
#c4=lineno; //base速記録の現在行位置
$text2_filename=directory2 +"\\*.rel"; //H
#base = hidemaruhandle(0); //base速記録のウィンドウハンドル
openfile $text2_filename ; //ファイルを開く
showwindow 0; //2016/09/20 tkwファイルを非表示ちらちらがなくなる。
#tkw = hidemaruhandle(0); //tkwファイルのウィンドウハンドル
gofiletop;
if(#base != #tkw){ //ファイルが選択された場合
#c5=0; //#tkwカレント行の1行バイト数
#ef=0;
#count = linecount2; //tkwファイルの行数
//message "tkwの行数=" + str(#count); //デバッグ
#c2=1; //#tkwを1行ずつ処理するカウント
//ここからtkwファイル処理 activefile=#tkw
while(#c2<=#count){
$gyo = gettext2(0,lineno,linelen2,lineno); //1行取得
#c=1; //#tkwのksk1~3を取得するループのカウント。最初の1文字はchに取得するので,1から。
$ch = leftstr($gyo,1);//左の1文字を取得
if($ch=="#" || $ch=="?"){ //行頭が"#""?"のときはコメント行処理->何もしない
$ksk1="";
$ksk2="";
$ksk3="";
}else{ //ksk1,ksk2の取得,text2の1行分の処理
$ksk1=$ch;
$ksk2="";
$ksk3="";
#kf=1; //flag=ksk1
#c5 = linelen2;
while(#c <= #c5){
if(#c==1 && $ch =="\t"){ //行頭がタブのとき
$ksk1="";
#kf=2;
}else{
$ch= midstr($gyo,#c,1); //文字列gyoのc番目から1バイトの文字を返す
if($ch=="\t"){ //文字がタブなら
#kf = #kf + 1; //kfのflagを1つ進める
}else if(#kf==1){ //kf=ksk?に合わせて,文字列を組み立てていく
$ksk1=$ksk1 + $ch; //chは取得した文字
}else if(#kf==2){
$ksk2=$ksk2 + $ch;
}else if(#kf==3){
$ksk3=$ksk3 + $ch;
}
}
#c = #c+1;
}
setactivehidemaru #base; //activefile=#base
gofiletop;
if($ksk2!=""){
$flg = toupper(leftstr($ksk3,4)); //nasiがあるかのflag
title str(#c2) +"行目 検索= " + $ksk2 + " -> 置換= " + $ksk1 + " メモ= " + $ksk3;
if($flg !="ARI" ){
replaceallfast $ksk2,$ksk1,regular; //H
}else{
replaceallfast $ksk2,$ksk1,regular,ask; //H
}
}
}
setactivehidemaru #tkw; //activefile = #tkw
#c2 = #c2+1; //H
movetolineno 1, #c2;
}
setactivehidemaru #base;
movetolineno #c3+1,#c4; //base速記録の現在位置
closehidemaru #tkw;
}

いいなと思ったら応援しよう!