[ 新規に投稿する ]

replaceallfastとinselectNo.35062
pamino さん 16/06/10 15:50 [ コメントを投稿する ]
お世話になります。

『テキスト実践技法』という本を買って、なかのマクロをみたら、ひたすら、
replaceallfast "A","B",inselect,regular;
replaceallfast "C","D",inselect,regular;
replaceallfast "E","F",inselect,regular;
がずらずらと並んでいます。
さて、このマクロをテキストの範囲を選択して実行すると、最初のreplaceallfastは選択範囲のみで置換しますが、つぎのreplaceallfastからは、文書全体で置換してしまうようです。
これは仕様なのでしょうか?

[ ]
RE:35062 replaceallfastとinselectNo.35063
秀丸担当 さん 16/06/10 16:48 [ コメントを投稿する ]
 
inselectについては、最初のreplaceallfastで範囲選択が解除されるようになっ
ていて、こういう仕様になってしまいます。
その都度範囲選択されている必要があり、面倒だと思います。

簡単にするには、部分編集をすると簡単です。
rangeeditin;で部分編集になり、rangeeditout;で解除します。
部分編集を使うにはあらかじめsetcompatiblemodeを指定する必要があり、例え
ば以下のような感じになります。

setcompatiblemode 0x2000F;
rangeeditin;
replaceallfast "A","B",regular;
replaceallfast "C","D",regular;
replaceallfast "E","F",regular;
rangeeditout;
[ ]
RE:35063 replaceallfastとinselectNo.35064
pamino さん 16/06/10 17:47 [ コメントを投稿する ]
ありがとうございます。
つまり、1800円の本のマクロは、すべて間違っているわけですね。

>setcompatiblemode 0x2000F;
>rangeeditin;
>replaceallfast "A","B",regular;
>replaceallfast "C","D",regular;
>replaceallfast "E","F",regular;
>rangeeditout;
これだと、範囲を選択していないと、つまり、全文を対象にするとエラーになります。
あたまに、
if(selecting==0)selectall;
を付け加えても、うまくいきませんでした。
[ ]
RE:35062 replaceallfastとinselectNo.35065
でるもんたいいじま さん 16/06/10 17:58 [ コメントを投稿する ]
  秀丸ユーザの「でるもんた・いいじま」です。

> お世話になります。
>
> 『テキスト実践技法』という本を買って、
> なかのマクロをみたら、ひたすら、

これですか?
https://www.amazon.co.jp/s/?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&field-keywords=%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E5%AE%9F%E8%B7%B5%E6%8A%80%E6%B3%95

これは秀丸エディタの開発元であるサイトー企画さんとは全く無関係です。
ここで
> つまり、1800円の本のマクロは、すべて間違っているわけですね。
とサイトー企画さんを責めたてることはお門違いです。
[ ]
RE:35064 replaceallfastとinselectNo.35066
秀まるお2 さん 16/06/10 18:40 [ コメントを投稿する ]
   とりあえず僕の方で分かる範囲でコメントさせていただきます。

 範囲選択しないで実行した場合も想定してマクロを作るとしたら、例えば

setcompatiblemode 0x2000F;
#selecting = selecting;
if( #selecting ) {
    rangeeditin;
}
replaceallfast "A","B",regular;
replaceallfast "C","D",regular;
replaceallfast "E","F",regular;
if( #selecting ) {
    rangeeditout;
}

 のようにすればいいと思います。

 あるいは、rangeedit関係を使わずにあくまで範囲選択してinselect指定でっ
てことなら、ちょっと面倒ですが、例えば

#selecting = selecting;
if( selecting ) {
    #x1 = seltopx; #y1 = seltopy;
    #x2 = selendx; #y2 = selendy;
} else {
    #x1 = 0; #y1 = 0;
    gofileend;
    #x2 = x; #y2 = y;
}
moveto #x1, #y1; beginsel; moveto #x2, #y2; endsel;
replaceallfast "A","B",inselect,regular;
moveto #x1, #y1; beginsel; moveto #x2, #y2; endsel;
replaceallfast "C","D",inselect,regular;
moveto #x1, #y1; beginsel; moveto #x2, #y2; endsel;
replaceallfast "E","F",inselect,regular;

 ってマクロでおおよそうまく動くようではあります。ただ、置換によって行数
が変化してしまうケースでは、置換範囲が狂う可能性があります。(なので
rangeedit使った方がいいんだと思う)
[ ]
RE:35065 replaceallfastとinselectNo.35067
pamino さん 16/06/11 09:19 [ コメントを投稿する ]
>> つまり、1800円の本のマクロは、すべて間違っているわけですね。
>サイトー企画さんを責めたてることはお門違いです。
責め立てる気持ちはまったくありません。
出版社を責め立てる気持ちもまったくありません。
誤解をまねくような発言で、申し訳ありませんでした。

本来ならば、出版社(著者)に質問するような内容ですが、たびたびこちらでお世話になっているし、こちらのほうが専門家でありますから、ここで質問した次第です。
[ ]
RE:35066 replaceallfastとinselectNo.35068
pamino さん 16/06/11 11:45 [ コメントを投稿する ]
お世話になります。

rangeeditin、rangeeditoutというのを、初めて知りました!
うまくいきました。
ありがとうございました。
今後とも、よろしくお願いいたしますm(_._)m
[ ]

[ 新規に投稿する ]