秀丸エディタで一括「改行正規化」するマクロ(CRLF/LF統一+最終行改行の有無を揃える)

テキストの改行コードが混在すると、地味に地獄を見る。

  • Gitの差分が無駄に汚れる
  • コピペ先で表示が崩れる
  • ツールが「別ファイル扱い」してくる
  • 末尾の改行が無いせいで、結合や処理がコケることがある

だから 「改行を統一」+「最終行改行を揃える」 をワン発でやる秀丸マクロを用意しとく。


これで何ができる?

このマクロは次をまとめて実行する。

  • CRLF/LF/CR 混在 → 指定方式に統一(CRLF または LF)
  • ファイル末尾の改行を「あり/なし」で揃える
  • まとめて1回でUndoできる(やり直しがラク)

使いどころ(目安)

  • Windows中心 → だいたい CRLF が無難
  • Git/WSL/Linux系のツール中心LF が無難
  • 末尾改行は、迷ったら あり(多くのツールが前提にしてる)

マクロ本体(コピペで使える)

ファイル名:nl_normalize.mac

/*
  nl_normalize.mac
  改行正規化:
    - CRLF/LF/CR 混在を統一(CRLF or LF)
    - ファイル末尾の改行:あり/なし を揃える
    - まとめて1回Undo

  注意:
    - このマクロは「ファイル全体」を対象にする(改行はファイル属性みたいなもんだから)
*/

#style = val(input("改行を統一する: 0=CRLF(Windows向け) / 1=LF(Git/WSL向け)", "0"));
#final = val(input("最終行の改行: 0=なし / 1=あり(推奨)", "1"));

$CR   = char(13);
$LF   = char(10);
$CRLF = $CR + $LF;

$NL = $CRLF;
if (#style == 1) {
    $NL = $LF;
}

// カーソル位置を退避
#cx = x;
#cy = y;

begingroupundo;

//====================================================
// 1) すべての改行を統一(\n はどの改行にもマッチする前提)
//====================================================
replaceallfast "\n", $NL;

//====================================================
// 2) ファイル末尾の改行を「全部削除」→必要なら「1個だけ付ける」
//====================================================
gofileend;

// 末尾にある CR/LF を全部剥がす
while (1) {
    #x0 = x; #y0 = y;
    left;

    // もう左に動けない=先頭付近
    if (x == #x0 && y == #y0) break;

    #u = unicode;

    // LF(10) or CR(13) なら削除して続行
    if (#u == 10 || #u == 13) {
        beginsel;
        right;
        delete;
        gofileend;
    } else {
        // 改行じゃないなら元に戻して終了
        right;
        break;
    }
}

// 「最終行改行あり」なら 1個だけ付ける
if (#final == 1) {
    gofileend;
    insert $NL;
}

endgroupundo;

// カーソル位置を戻す(行数が変わったら多少ズレるのは勘弁な)
moveto #cx, #cy;

message "改行正規化 完了";
endmacro;

導入手順(3分で終わる)

1) マクロを保存

  1. 秀丸で新規ファイルを開く
  2. 上のマクロを貼り付ける
  3. nl_normalize.mac という名前で保存

2) マクロ登録

  1. [マクロ] → [マクロ登録]
  2. 空いてる番号を選ぶ
  3. nl_normalize.mac を指定して登録

3) キー割り当て(おすすめ)

  1. [その他] → [キー割り当て]
  2. 登録したマクロにキーを割り当て
  • 例:Ctrl + Shift + N(N = newline)

使い方

マクロ実行すると2回聞かれる。

1) 改行方式

  • 0 = CRLF
  • 1 = LF

2) 最終行改行

  • 0 = なし
  • 1 = あり(推奨)

終わり。ファイル全体が「統一状態」になる。


よくある注意(事故りやすいポイント)

1) 「¥」になってたら動かないことがある

マクロ内の \n\ は、見た目が ¥ に見える環境がある。
コピペで基本OKだが、もし置換が効かないなら バックスラッシュが別文字になってないか疑え。

2) 大きいファイルに使うならまず保存

置換系は一発で変わる。Undoできる設計にはしてるが、念のため保存してから叩け。


まとめ

改行が混ざると、あとで必ず面倒になる。
だから「気づいた時に一発で直せる」状態を作るのが勝ち。

このマクロをショートカットに入れとけ。地味だけど、効く。

コメント

タイトルとURLをコピーしました