選択部分の空白を記号に置換No.35891
柳絮 さん 17/07/10 20:46
 
いつもお世話になります。前に複数の英単語からなる選択しておいて、その選択部分
を墨付括弧【 】で囲む次のような方法をお教えいただきました。

setcompatiblemode 0x0F;
disabledraw;
getsearch;
replaceall searchbuffer, "【" + searchbuffer + "】";
endmacro;


今回はこの選択部分を【 】で囲まず、英単語の間にある半角空白を記号に置換しよ
うと思っています。スクリプトは次のとおりです。
setcompatiblemode 0x0F;
rangeeditin;
disabledraw;
getsearch;
replaceall " ", "♦" , regular, nocasesense, inselect, nohilight;
rangeeditout;
endmacro;

(i) しかしこれでは選択範囲の空白だけではなくその行すべての空白が置換されてし
まいます。(ii) また瞬間的に小窓が出るという現象が起きています。

置換を選択範囲内にとどめ、小窓が出ないようにするにはどのようにすればよいのか、
ご教示いただければ幸いです。範囲選択のrangeeditinと行単位のinselectというコ
マンドの抵触があるのかもしれませんがよくわかりません。

どうぞよろしくお願いします。

柳絮

[ ]
RE:35891 選択部分の空白を記号に置換No.35893
秀丸担当 さん 17/07/11 11:19
 

範囲選択して置換は、rangeeditin;を使う方法と、inselectオプションを使う方
法がありますが、いずれも行単位になるという仕様があります。

[検索]→[置換]の置換ダイアログに「追加の条件」があって、ここの「指定の範
囲/カラーマーカー内」を指定して、文字単位にする方法があります。

例えば、手動での操作の場合、範囲選択をした状態で、[検索]→[カラーマー
カー]→[一時的なカラーマーカー...]でカラーマーカーを付けます。(「編集し
たら削除」はOFFで)
次に、置換ダイアログの「追加の条件」は、『「一時的なカラーマーカー」の範
囲』にします。
これで置換すると、文字単位になります。
カラーマーカーは残ったままになってしまうので、[検索]→[カラーマーカー]→
[一時的なカラーマーカーを全て削除]で消します。

これをマクロにすると以下のような感じになります。

setcompatiblemode 0x20000;
disabledraw;
deletecolormarkerall;
colormarker 0xffffff,0xff,0,0,0;
settargetcolormarker "";
replaceallfast " ", "■"
    , regular, nocasesense, nohilight, incolormarker;
deletecolormarkerall;
endmacro;

一時的なカラーマーカーを例にしましたが、すべて検索での色付けの範囲や、複
数選択予約の範囲や、マクロの場合は任意のレイヤー名の指定なども指定する方
法もあります。

[ ]
RE:35893 選択部分の空白を記号に置換No.35895
柳絮 さん 17/07/11 17:33
 
秀丸担当様

ご回答有難う御座いました。行単位を乗り越える工夫があったのですね。試してみる
と希望していることが実現できました。

早速のご対応と詳しい説明をいただき本当に感謝です。

柳絮

[ ]