←前へ 次へ→ 機能別Q&A 質問番号順Q&A 秀丸エディタQ&A集トップ

[HME0095A]

●検索した単語を全て強調表示したい

Q. 検索した単語を、そのテキスト(秀丸ウィンドウ)全体で強調表示する方法はありますか?。

A. 検索またはgrepダイアログで検索した後、以下のマクロを実行すると、その検索文字列を(一時的な設定として「特に強調表示2」に加えることによって)全て強調表示することができます。

 ただし、強調表示では、
  1. あいまい検索が指定できない
  2. 改行、タブ文字が扱えない
という制限があります。そののためにあいまい検索をすると、全てのオプションを OFF にした状態で強調表示に登録しますので、検索結果が一致しない場合があります。また検索文字列に改行やタブ文字が含まれていると、殆ど検索結果が一致しないだけでなく、エラーになることも有ります。

//検索文字列を「特に強調表示2」に加える
//あいまい検索は、強調表示にその扱いが無いので全ての option OFF の扱い
call GetLightChar;
$$hilightChar = $$return;
if(!hilightstate){
config "y+";
$$return = "";
}
else{
if(hilighttitle == "" || hilighttitle == "hilight0.tmp")
call HilightTitle;
else $$return = hilighttitle;
}
if( $$return == "" ){
if(hilighttitle != "hilight0.tmp")savehilight "hilight1.tmp";
$$return = "hilight1.tmp";
}
call MakeHilight $$return, $$hilightChar;
loadhilight "hilight0.tmp",0;
endmacro;

MakeHilight://DLL 無し版

##main = hidemaruhandle(0);
if($$1 == "")openfile "/h ";
else openfile "/h " + hidemarudir + "\\" + $$1,sjis;
showwindow 0;
gofileend;
insert $$2 + "\n";
saveas hidemarudir + "\\hilight0.tmp",sjis;
##highlight = hidemaruhandle(0);
setactivehidemaru ##main;
closehidemaru ##highlight;
return;

GetLightChar:
##option = 0;
$$string = searchbuffer;
if(searchoption&32){
##option = 8;
call TOUPPER $$string;
$$string = $$return;
}
else{
if(searchoption&1)##option = ##option|32;
if(searchoption&2 == 0)##option = ##option|8;
if(searchoption&16)##option = ##option|16;
if(searchoption&2 == 0 && searchoption&16 == 0){
call TOUPPER $$string;
$$string = $$return;
}
}
##option = ##option|67;
return str(##option) + "," + $$string;

GetType:

//「C言語ソースファイル」等と file type が決まっていない場合は "" を返す
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\" + filetype;
if(result){
$$type=getregstr("");
closereg;
}
else $$type="";
return $$type;

HilightTitle:

if(filetype == "new" )
openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\Default";
else if(filetype == "exeresult" || filetype == "grep")
openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\" + filetype;
else{
call GetType;
if($$return == "")
openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\Default";
else openreg "CURRENTUSER","Software\\Hidemaruo\\Hidemaru\\Config\\" + $$return;
}
$$HilightTitle = getregstr("HilightTitle");
closereg;
return $$HilightTitle;

TOUPPER://小文字を大文字に変換 (半角文字のみ)

##char=0x61;
while(##char<=0x7A){
call ChangeCharacter $$1,char(##char),char(##char-0x20);
$$1=$$return;
##char=##char+1;
}
return $$1;

ChangeCharacter://buff 中の文字列を置換

//$$1:buff
//$$2:検索文字列
//$$3:置換文字列
##change_char=strlen($$2);
$$string = "";
while(1){
##number = strstr($$1, $$2);
if(##number == -1)break;
else{
##long = strlen($$1);
$$string = $$string + leftstr($$1, ##number) + $$3;
$$1 = rightstr($$1, ##long - ##number - ##change_char);
}
}
return $$string + $$1;

もし、検索やgrepのダイアログ表示まで1つのマクロで実行したい場合は、(上記のマクロ名を sethilight.mac とすると)以下のマクロで可能です。

<検索ダイアログ表示→強調表示>
find;
if (result) execmacro "sethilight.mac";
endmacro;

<grepダイアログ表示→強調表示>
grepdialog;
if (result) execmacro "sethilight.mac";
endmacro;


←前へ 次へ→ 機能別Q&A 質問番号順Q&A 秀丸エディタQ&A集トップ