選択範囲への連続置換と inselectNo.24904
RVR さん 08/05/12 21:09
 
(昨日から秀丸マクロを習い始めました。正式な文法やテクニックは書籍やネットで
少しずつ学ぶ計画ですが, とりあえず簡単な実行マクロを作りたくて, キーボードマ
クロを保存してそれを修正して試しています。)

文書の一部の文字列(複数行)の中に含まれる空白や特定の記号を, それぞれ一定の対
応する記号に連続置換しようとして, 予め秀丸上で範囲を指定した後に:

replaceallfast " ", "_", inselect;
replaceallfast ": ", "★", inselect;
replaceallfast "; ", "◇", inselect;

という内容のファイルをマクロとして実行したところ, 指定範囲だけでなく文書全体
が置換の対象になってしまいました。
最初の1行だけ実行するように書き換えた場合は上手く動作しました。
inselect の効果は1回だけで解除されてしまうのでしょうか.
指定範囲に対する複数回の置換を連続して行う(簡単な)テクニックをお教えいただき
たく, 初心者状態を顧みずお願いする次第です。

[ ]
RE:24904 選択範囲への連続置換と inselecNo.24905
K'zawa さん 08/05/12 21:56
 
RVRさん、こんにちは。
K'zawa/ユーザーです。

>inselect の効果は1回だけで解除されてしまうのでしょうか.

その通りです。

>指定範囲に対する複数回の置換を連続して行う(簡単な)テクニックをお教えいただき
>たく, 初心者状態を顧みずお願いする次第です。

せっかく範囲選択をしたのですから、そのまま部分編集に突入してしまうのが
手っ取り早いです(要 Ver6以上)

[ ]
RE:24905 選択範囲への連続置換と inselecNo.24906
RVR さん 08/05/12 23:12
 
K'zawa さん、こんばんは。
ご回答をいただきまして有り難うございます。

やはり inselect は1回限りなのですね(ちょっと残念)。

>せっかく範囲選択をしたのですから、そのまま部分編集に突入してしまうのが
>手っ取り早いです(要 Ver6以上)
お教えいただいた方法で確かに選択範囲のみ(ただし, 文字単位ではなく, 行単位に
なってしまいますが, これは秀丸の仕様なのですね)一気に複数の置換をマクロで実
現できました。ありがとうございます。

ただ、文書のあちこちを頻繁に範囲指定して置換したい場合には、Alt+[ でその都度
部分編集に入るのは少し手間を感じました。

範囲選択状態で起動すればすぐに処理が完了するようなマクロは、やはり面倒な処理
を必要とするのでしょうか・・・。

[ ]
RE:24906 選択範囲への連続置換と inselecNo.24907
h-tom さん 08/05/12 23:44
 

h-tom です。

>ただ、文書のあちこちを頻繁に範囲指定して置換したい場合には、Alt+[ でその都度
>部分編集に入るのは少し手間を感じました。
部分編集の設定、解除もマクロで行えばいいのでは?

>範囲選択状態で起動すればすぐに処理が完了するようなマクロは、やはり面倒な処理
>を必要とするのでしょうか・・・。
replaceallfastを複数回使うなら、面倒な処理(範囲の再設定)が必要になるで
しょうね。

1)範囲選択中なら、forceinselect 1 を指定
2)検索・置換バッファを直接書き換えて、finddown を複数回実施
とか使う方法もありますが、やはりそれなりに面倒です。

部部編集で済むなら、部部編集を使うのが、お手軽だと思いますよ。

[ ]
RE:24907 選択範囲への連続置換と inselecNo.24909
秀丸担当 さん 08/05/13 09:31
 

>ただ、文書のあちこちを頻繁に範囲指定して置換したい場合には、Alt+[ でその都度
>部分編集に入るのは少し手間を感じました。

h-tomさんも言われる通り、マクロでrangeeditin;とすれば範囲選択の部分を部
分編集にできるので、それでできるのではないかと思います。
ちなみにマクロヘルプのキーワード検索で「部分編集」としたら出てこなかった
のでキーワードに追加しておこうと思います。

[ ]
RE:24909 選択範囲への連続置換と inselecNo.24918
RVR さん 08/05/15 11:56
 
h-tom様, 秀丸担当様, ご指摘とアドバイスを有り難うございます。

皆様に教えていただいた情報と, このフォーラム内の検索を元に, まことに稚拙で不
完全なものながら, 指定範囲(文字単位)で連続置換を実現できるマクロが出来ました.

流れとしては:
01. 部分編集と折りたたみ処理を受け入れる宣言(setcompatiblemode 0x000f)
02. 選択範囲の位置をエディタ的に取得し(seltopcolumn, seltoplineno, selendcol
umn, selendlinenoを使用), それを利用して選択範囲の前後に改行コードを挿入(ins
ert "\n")
03. 02.で区切られた選択範囲を部分編集モードにする(beginsel を実行した後, mov
etolineno でカーソルを移動し, rangeeditin を実行)
04. 全置換を複数回実行(replaceall 文使用. マクロ処理の中心部分)
05. 部分編集を解除した後(rangeeditout)カーソルを移動して, 02.で挿入した2つの
改行コードを削除
というものになりました.

改めて K'zawa様, h-tom様, 秀丸担当様方に御礼申し上げますとともに, ご報告まで,
 投稿致します.

[ ]
RE:24904 選択範囲への連続置換と inselecNo.25111
octopus さん 08/06/25 11:13
 
私も選択範囲を何回か置換したいので以下の方法を使ってます。

copy2;
newfile;
paste;
replaceall "<", "&lt;";
replaceall ">", "&gt;";
selectall;
copy2;

置換範囲をコピーして、
新しいファイルを開き、
そこにペーストします。
置換作業を何回か行い、
全体をコピーします。

結果が予想どうりならば、
手動で元のファイルに戻り、
結果をペーストします。

最後の部分もマクロにできると思いますが、
タブを扱うのが面倒なのでやめました。

以上

[ ]