// // 行連結 // Version 3.0 (2015/10/20) // by mobitan http://mobitan.org/ // $del = "[\\t  ]*\\n[\\t  ]*"; // 削除するパターン (改行と前後の空白類) $sep = "(?<=[!-~])\\v(?=[!-~])"; // 跡地 (\\v) にスペースを挿入するパターン //.----------------------------------------------------------------------------- setcompatiblemode 0x12020F; loaddll "hmjre.dll"; ##_ = dllfunc("SetUnicodeIndexAutoConvert", 1); begingroupundo; disabledraw; call Main; enabledraw; endgroupundo; freedll; endmacro; Main: $$z0 = currentmacrobasename + "#layer0"; $$z1 = currentmacrobasename + "#layer1"; $$z2 = currentmacrobasename + "#layer2"; // 元の選択範囲をマーク colormarker 0xFFFFFF, 0xCC6666, 11, 2, 0, $$z0; // 範囲内外の改行をマーク if (multiselecting || rectselecting) { gofiletop; nextcolormarker 0x09, 0, $$z0; ##al = lineno; while (result) { ##bl = lineno; nextcolormarker 0x0A, 0, $$z0; call Mark ##bl, lineno, column, $$z1, $$z2; nextcolormarker 0x01, 0, $$z0; } } else if (selecting) { ##al = seltoplineno; call Mark seltoplineno, selendlineno, selendcolumn, $$z1, $$z2; } else { ##al = lineno; call Mark lineno, lineno, column, $$z1, $$z2; } if (#inside || #outside) { // 連続実行時は元の選択範囲を残す if (!replay) { deletecolormarkerall $$z0; } // ターゲットを範囲選択 if (#inside) { selectcolormarker $$z1; } else if (#outside) { selectcolormarker $$z2; } deletecolormarkerall $$z1; deletecolormarkerall $$z2; // 垂直タブに置換 insert "\x0B"; // 垂直タブを削除して跡地をマーク call ReplacePaint ##al, $sep, " ", $$z0; call ReplacePaint ##al, "\\v", "", $$z0; } // 跡地を範囲選択 selectcolormarker $$z0; deletecolormarkerall $$z0; return; Mark: // 改行をマーク // ##1 = 範囲頭 lineno // ##2, ##3 = 範囲末 lineno, column // $$4 = 範囲内のレイヤ名 // $$5 = 範囲外のレイヤ名 // [in/out] // #inside = 範囲内処理数 // #outside = 範囲外処理数 escape; moveto2 0, ##1; ##el = ##2 - (##1 < ##2 && ##3 == 0); searchdown2 $del, regular, nohilight; while (result && lineno <= ##el) { if (lineno < ##el) { colormarker 0xFFFFFF, 0x6666FF, 11, 2, 0, $$4; #inside = #inside + 1; } else { colormarker 0xFFFFFF, 0x6699FF, 11, 2, 0, $$5; #outside = #outside + 1; } moveto2 0, lineno + 1; finddown; } if (!result) moveto2 ##3, ##2; // EOF 行で無限ループしないように return; ReplacePaint: // 全置換して塗る // ##1 = 範囲頭 lineno // $$2 = 検索パターン (正規表現) // $$3 = 置換文字列 (固定長、改行不可) // $$4 = レイヤ名 escape; moveto2 0, ##1; replacedown $$2, quote($$3), regular, nohilight; while (result) { colormarker 0xFFFFFF, 0x663333, 11, 2, 0, $$4, lineno, column - strlen($$3), lineno, column; finddown; } return; /* 行連結 v3.0 ◆改行を削除&跡地を全選択 joinlines30.zip http://mobitan.org/ カーソル行末または選択範囲内の改行を削除します。跡地がすべて選択されるので、改行をカンマに置き換えたりする作業にも便利です。 [動作]  ・2行以上を範囲選択した状態で実行すると、選択範囲内の改行がすべて削除されて1行になります。  ・それ以外の状態で実行すると、カーソル行のうしろの改行が削除されて次の行と繋がります。  ・行頭・行末の空白類も削除されます。※  ・改行があった場所が ASCII 文字に挟まれていたらスペースが挿入されます。※  ・実行後、改行があった場所がすべて範囲選択されます。 [ヒント]  ・マクロ実行後つづけて文字を入力すれば、改行を他の文字に置き換えることができます。  ・マクロ実行後つづけて Delete を押せば、各行頭にあった文字を1字ずつ削除できます。  ・※印の動作は正規表現で簡単にカスタマイズできます。 [必要なもの]  ・秀丸エディタ v8.56 以降 [主な更新]  v3.0 (2015/10/20) ← v2.1 (2015/03/02)   ・ほぼ完全に書き直し。シンプルな処理で高速化   ・秀丸 v8.56β1 の仕様変更に対応 (アンドゥしたときカラーマーカーが残らないように)  v2.1 (2015/03/02) ← v2.0 (2015/02/20)   ・連続実行で後続行を順次連結する   ・選択範囲が改行を含まないときは行末 (範囲外) の改行を削除する    ・改行を含む範囲と含まない範囲が混在するときは後者を無視する   ・マクロ実行前にあった複数選択予約をマクロ実行後も維持する  v2.0 (2015/02/20)   ・複数選択対応 */ /* 無選択時 hoge → fuga 範囲選択時 hoge → fuga  ほげ  ふが 実行結果 hoge fuga 実行結果 hoge fugaほげふが */ // (c) mobitan 2015