[要望] 置換画面No.22951
る〜 さん 07/05/04 23:15
 
置換する画面で、検索する文字を置換側にコピーする機能がほしいです。

検索(S):  AAAAA CCCCC
           ↓
置換(E):  AAAAA CCCCC

例)
クリップボードの中には、BBBBB が、入っています。
文字列 AAAAA CCCCC をマウスで反転して、置換する画面を出します。

検索(S):  AAAAA CCCCC <<自動的に入ります。
           ↓
置換(E):  

AAAAA と CCCCC の間に BBBBBを入れて置換をしたいのです。
1ボタンで検索の文字を、置換にコピーすることができれば、クリップボードの中身
を張り付けするだけで簡単に入れられると思うのですが。

まだ、使いこなせてないため色々わからないので、すでに方法がありましたら申し訳
ございません。

[ ]
RE:22951 [要望] 置換画面No.22952
Arimac さん 07/05/05 18:27
 
自分は以下のマクロを使っています。
範囲選択が1行内であればその文字列を検索に取り込みます。
2行以上の場合はその選択範囲を検索置換対象にします。

#save_x = x;
#save_y = y;
$save_buf = searchbuffer;
#save_sel = selecting;

if (#save_sel && seltopy == selendy) {
  $sel1 = gettext(seltopx, seltopy, selendx, selendy);
} else {
  $sel1 = $save_buf;
}

$srch1 = input("検索文字列", $sel1);
#ret = result;
if (#ret == 0 || $srch1 == "") endmacro;

while (1) {
  $rep1 = input("置換文字列", $srch1);
  #ret = result;
  if (#ret == 0) endmacro;
  if ($rep1 != $srch1) break;
}

menu "単純置換", "単語置換", "正規表現";
#mode = result;
if (#mode == 0) endmacro;

disabledraw;
goscreentop;
#screentop_y = y;
moveto #save_x, #save_y;

if (#save_sel && seltopy != selendy) {
  if (#mode == 1) {
    replaceallfast $srch1, $rep1, casesense, inselect;
    #ret1 = result;
  } else if (#mode == 2) {
    replaceallfast $srch1, $rep1, word, casesense, inselect;
    #ret1 = result;
  } else if (#mode == 3) {
    replaceallfast $srch1, $rep1, regular, inselect;
    #ret1 = result;
  }
  escapeinselect;
} else {
  if (#mode == 1) {
    replaceallfast $srch1, $rep1, casesense;
    #ret1 = result;
  } else if (#mode == 2) {
    replaceallfast $srch1, $rep1, word, casesense;
    #ret1 = result;
  } else if (#mode == 3) {
    replaceallfast $srch1, $rep1, regular;
    #ret1 = result;
  }
}

moveto #save_x, #save_y;
enabledraw #screentop_y;

message str(#ret1) + "個置換しました。";

[ ]
RE:22951 [要望] 置換画面No.22953
白雲斎 さん 07/05/06 13:48
 
こんにちは“る〜”さん、白雲斎です。

要望の回答は秀丸担当殿を待っていただくとして
マクロ例解2:

if( selecting && (seltoplineno == selendlineno) )
    $sb = gettext(seltopx, seltopy, selendx, selendy, 1);
else
    $sb = "";

setsearch $sb, searchoption;
setreplace $sb;
replace;
endmacro;

[ ]
RE:22951 [要望] 置換画面No.22954
K'zawa さん 07/05/06 19:04
 
る〜さん、こんにちは。
K'zawa/ユーザーです。

おもしろそうなので、私も作ってみました。

$searchbuffer=searchbuffer;
$replacebuffer=replacebuffer;
if(selecting){
        if(seltoplineno==selendlineno){
                $searchword=gettext(seltopx,seltopy,selendx,selendy,1);
        }
        setsearch $searchword,searchoption;
        if($searchword!="") setreplace searchbuffer;
}else{
        getsearch;
        setreplace searchbuffer;
}
replace;
if(result==-2){
        setsearch $searchbuffer,searchoption;
        setreplace $replacebuffer;
}

[ ]
RE:22951 [要望] 置換画面No.22959
秀丸担当 さん 07/05/07 09:49
 

>AAAAA と CCCCC の間に BBBBBを入れて置換をしたいのです。
>1ボタンで検索の文字を、置換にコピーすることができれば、クリップボードの中身
>を張り付けするだけで簡単に入れられると思うのですが。
>
>まだ、使いこなせてないため色々わからないので、すでに方法がありましたら申し訳
>ございません。

クリップボード履歴を使うと、クリップボードの内容が変わってもすぐに前の状
態に戻すことができますが、どうでしょうか。
[その他]→[動作環境]→[常駐機能]で、「秀丸エディタの常駐」と「クリップ
ボード履歴を取る」を両方ONにしておくとできます。
ショートカットキーを割り当てておくと、どこのウィンドウにフォーカスがあっ
ても呼び出すことができます。


あるいは、正規表現を使うとコピーする必要無く検索文字列の内容を置換文字列
に使うことができます。

検索文字列「(AAAAA )(CCCCC)」
置換文字列「\1BBBBB\2」
正規表現 ON

括弧を付けたり\1,\2を付けたりで逆に面倒かもしれないですが。
もし正規表現を使われる場合は、詳しくはヘルプを参照してみてください。

[ ]
RE:22951 ありがとうございますNo.22961
る〜 さん 07/05/07 17:27
 
白雲斎さんのマクロが”要望通り”だったので使わせていただきます。
白雲斎さんありがとうございます。

皆様、回答ありがとうございました。

[ ]