|
はじめまして。
Byrdと申します。
秀丸マクロ集001に入っていた
以下のマクロを愛用させていただいていますが、
このマクロは同一のフォルダに入ったファイルだけしか
開けないので困っています。
ホームページなどで、複雑な構造のフォルダにたくさんの
ファイルが入っている場合にも使えるとありがたいのですが。
このマクロの改良版がどこかにあったら教えてください。
よろしくお願いいたします。
Byrd
********************
// 複数ファイルまとめて全置換マクロ
// multirep.mac
// このマクロは、まずgrepで置換元となる文字列を検索させて、そのgrepの結果で
// 一度全置換を実行し、その後このマクロを実行することによって、実際のファイ
// ル内の該当個所を置換していくものです。
// ファイル名に括弧が含まれている場合は使えません。
//
// 使い方
// − grepを実行する
// − grepした秀丸の中で全置換を実行する
// − このmultirep.macを実行する
//
// このマクロは多少危険なので、全置換する前のファイルをバックアップしてから
// 実行することをおすすめします。
#home = hidemaruhandle(0);
#width = windowwidth;
#height = windowheight;
$filenamePrev = "";
setwindowsize 1,1;
gofiletop;
Loop:
#x = x; #y = y;
golineend2;
$s = gettext( #x, #y, x, y );
if( strlen($s) > 4000 ) {
message "エラー: 1行の長さが長すぎて処理できません。";
goto Exit;
}
#kakko = strstr( $s, "(" );
#kakkoend = strstr( $s, ")" );
if( #kakko < 0 || #kakkoEnd < 0 ) {
message "エラー: 括弧が見つかりませんでした。";
goto Exit;
}
$filename = leftstr( $s, #kakko );
#lineno = val( midstr( $s, #kakko + 1, #kakkoend - #kakko - 1 ) );
if( #lineno <= 0 ) {
message "エラー: 行番号の取得に失敗しました。";
goto Exit;
}
$s = midstr( $s, #kakkoend + 3, 4000 );
if( $filenamePrev != ""
&& $filename != $filenamePrev ) {
call ClosePrevFile;
}
#handle = findhidemaru( $filename );
if( #handle < 0 ) {
openfile $filename;
if( filename != $filename && basename != $filename ) {
message "エラー: ファイル" + $filename + "が開けませんでした。";
goto Exit;
}
} else {
setactivehidemaru hidemaruorder(#handle);
}
movetolineno 1, #lineno;
if( lineno != #lineno ) {
message "エラー: 行が見つかりません。";
goto Exit;
}
beginsel;
golineend2;
delete;
insertfix $s;
setactivehidemaru hidemaruorder(#home);
$filenamePrev = $filename;
down;
if( code == eof ) {
message "正常終了";
goto Exit;
}
golinetop2;
goto Loop;
Exit:
setactivehidemaru hidemaruorder(#home);
setwindowsize #width, #height;
endmacro;
ClosePrevFile:
setactivehidemaru findhidemaru( $filenamePrev );
##prevfile = hidemaruhandle(0);
if( updated ) {
question $filenamePrev + ": 保存してもいいですか?(保存しない場合はマクロは
中断します)";
if( result == yes ) {
save;
} else {
goto Exit;
}
}
setactivehidemaru hidemaruorder(#handle);
closehidemaru hidemaruorder(##prevfile);
return;
|
|