[ 新規に投稿する ]

2行にわたる文を1行に置換してつなぐNo.10713
popper さん 25/06/13 10:57 [ コメントを投稿する ]
  [置換前]

B/C

といった2行を

[置換後]
A B

と1度で1行に置換するマクロを作りたいのですが、やり方が分かりません。

※A、B、Cは1文字ではなく、文字列を表しています。
※置換後は、AとBの間に全角空白を入れています。
※置換後は、/Cは削除しています。

/Cを削除した後、Bを上の行のAの後につなごうとしているのですが、解決できません。


よろしくお願いいたします。
[ ]
RE:10713 2行にわたる文を1行に置換してつなぐNo.10714
おすぎ さん 25/06/13 11:54 [ コメントを投稿する ]
popper さん、こんにちは。
おすぎです。

こんな感じで良いと思いますが。

replacedown "^(.+)\n(.+)/(.+)$", "\\1 \\2", regular;
[ ]
RE:10714 2行にわたる文を1行に置換してつなぐNo.10715
おすぎ さん 25/06/13 11:56 [ コメントを投稿する ]
おすぎです。

バックスラッシュ「\」は、半角「¥」マークのことです。
[ ]
RE:10715 2行にわたる文を1行に置換してつなぐNo.10716
popper さん 25/06/13 12:29 [ コメントを投稿する ]
  おすぎさん、ありがとうございます。

希望通りの置換ができたのですが、カーソルの下にある1つの対象にしか、置換が行われません。

@ファイル全体にわたるすべての対象に対して
Aカーソルより下のすべての対象に対して
B選択した範囲のすべての対象に対して

この置換を行うにはどうすればよろしいでしょうか?

自分なりに調べても解決できませんでした。

※inselect といったオプションがあるので、付けてみましたが動作は変わらず、カーソルより下にある1つの対象しか置換されません。
範囲を選択後にやっても同様で、範囲内の最初の1つの対象しか置換されません。

ご教授よろしくお願いします。
[ ]
RE:10716 2行にわたる文を1行に置換してつなぐNo.10717
おすぎ さん 25/06/13 13:04 [ コメントを投稿する ]
  poper さん、こんにちは。
おすぎです。

こんな感じで良いと思います。


#curx = x;
#cury = y;

menu "・ ファイル全体で置換", "・ カーソルより下で置換", "・ 選択範囲で
置換";

if(result == 1) replaceall "^(.+)\n(.+)/(.+)$", "\\1 \\2", regular;

else if(result == 2){
while(1){
replacedown "^(.+)\n(.+)/(.+)$", "\\1 \\2", regular;
if(result!) break;
}
}

else if(result == 3){
if(selecting){
replaceall "^(.+)\n(.+)/(.+)$", "\\1 \\2", inselect, regular;
}
}
moveto #curx, #cury;

endmacro;
[ ]
RE:10717 2行にわたる文を1行に置換してつなぐNo.10718
popper さん 25/06/13 15:04 [ コメントを投稿する ]
  おすぎさん、ありがとうございます!

希望通りの機能が実現できました。
置換範囲もメニューで選択できるようにしていただいたので、希望以上の満足です。

迅速で丁寧な対応、本当にありがとうございました。

[ ]
RE:10718 2行にわたる文を1行に置換してつなぐNo.10719
igus さん 25/06/13 22:50 [ コメントを投稿する ]
  すでに解決済みですが別解を考えてみました。メニューを使わない方向で。

//2行にわたる文を1行に置換してつなぐよ.mac

//shiftを押しながら:カーソルより下
//選択なし:全範囲対象
//選択あり:選択範囲対象

//iskeydown(0x10)):shiftを押してる
//iskeydown(0x11)):ctrlを押してる
//iskeydown(0x12)):altを押してる

begingroupundo;
if(iskeydown(0x10)){
  escape:beginsel;gofileend;
}else if(!selecting){
  selectall;
}
replaceallfast "^(.+)\n(.+)/(.+)$", "\\1 \\2", regular,inselect2;
endgroupundo;endmacro;
[ ]

[ 新規に投稿する ]