秀丸エディタで一括「空白正規化」するマクロ(全角→半角 / 連続スペース→1 / タブ→スペース / 行末空白削除)

テキストって、見た目は普通でも中身が汚れてることがある。
全角スペース混入、タブ混在、行末に空白、無駄な連続スペース……。

こういう “地味な汚れ” は、あとから差分が見づらくなったり、コピペ先で崩れたり、地味に事故の元になる。
だから 一発で掃除する「空白正規化マクロ」 を作って、いつでも叩けるようにしようって話だ。


これで何ができる?

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

  • 全角スペース( )→ 半角スペース( )
  • タブ → スペース(幅は設定可)
  • 行末の空白(スペース/タブ)を削除
  • (オプション)連続スペースを1個に圧縮(※強めモード)

さらに便利ポイント:

  • 選択範囲があるなら選択だけ
  • 選択が無いならファイル全体

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

ファイル名:ws_normalize.mac

/*
  ws_normalize.mac
  空白正規化:
    - 全角スペース → 半角スペース
    - タブ → スペース(TAB幅指定)
    - 行末の空白(スペース/タブ)削除
    - 強めモード:連続スペースを1個へ圧縮(※コード/表形式には注意)

  仕様:
    - 選択範囲があれば「選択だけ」
    - 選択がなければ「全文」
*/

#mode = val(input("空白正規化モード: 0=安全(推奨) / 1=強め(連続スペースも圧縮)", "0"));
#tabw = val(input("タブを何個のスペースにする?(例: 2 / 4)", "4"));

if (#tabw < 1) #tabw = 4;

$TAB = char(9);
$FW  = " ";     // 全角スペース(U+3000)
$SP  = " ";

$tabs = "";
#i = 0;
while (#i < #tabw) {
    $tabs = $tabs + $SP;
    #i = #i + 1;
}

#useSel = selecting; // 0/1

// -------------------------------------
// 1) 全角スペース → 半角スペース
// -------------------------------------
if (#useSel) {
    replaceallfast $FW, $SP, inselect;
} else {
    replaceallfast $FW, $SP;
}

// -------------------------------------
// 2) タブ → スペース(#tabw個)
// -------------------------------------
if (#useSel) {
    replaceallfast $TAB, $tabs, inselect;
} else {
    replaceallfast $TAB, $tabs;
}

// -------------------------------------
// 3) 行末の空白(スペース/タブ)削除
//    ※ ^ $ は行単位を想定
// -------------------------------------
if (#useSel) {
    replaceallfast "[ \\t]+$", "", inselect, regular;
} else {
    replaceallfast "[ \\t]+$", "", regular;
}

// -------------------------------------
// 4) 強めモード:連続スペースを1個に圧縮
//    ※注意:コード/表/桁揃えを壊す可能性あり
// -------------------------------------
if (#mode == 1) {
    if (#useSel) {
        replaceallfast " {2,}", " ", inselect, regular;
    } else {
        replaceallfast " {2,}", " ", regular;
    }
}

message "空白正規化 完了";

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

1) マクロをファイル保存

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

2) 秀丸に登録

  1. [マクロ] → [マクロ登録] を開く
  2. 空いてる番号を選ぶ
  3. さっき保存した ws_normalize.mac を指定して登録

3) ショートカット割り当て(おすすめ)

  1. [その他] → [キー割り当て] を開く
  2. 登録したマクロにキーを割り当てる
  • 例:Ctrl + Shift + W(W=whitespace で覚えやすい)

使い方(安全モードが基本)

安全モード(0)=基本これ

  • 全角スペース→半角
  • タブ→スペース
  • 行末空白削除
    だけやる。
    コード・表・ログ、だいたい全部に安心して使える。

強めモード(1)=文章向け

上に加えて

  • 連続スペースを 1個に圧縮
    もやる。

※これ、Pythonのインデントとか、表形式の桁揃えとか、ログの整列を壊す可能性がある。
だから「文章だけ」とか「やっていいデータだけ」に使うのが筋。


カスタム(よく使う調整)

タブ幅を固定したい(毎回入力が面倒)

この行を:

#tabw = val(input("タブを何個のスペースにする?(例: 2 / 4)", "4"));

こう変える(例:常に4):

#tabw = 4;

入力を減らしたい(常に安全モードでいい)

この行を:

#mode = val(input("空白正規化モード: 0=安全(推奨) / 1=強め(連続スペースも圧縮)", "0"));

こう変える:

#mode = 0;

よくある質問

Q. 「全角→半角」って、英数字まで半角化するの?

A. このマクロは 全角スペース( ) を半角スペースにするタイプ。
英数字の全角(ABC、123)まで変換したいなら、別途「全角英数字→半角」の処理を追加するのが良い。
(必要なら、その拡張版も作れる)

Q. 連続スペース圧縮って、なぜ危ない?

A. “意味のあるスペース” まで潰すから。
コードのインデント、表の列揃え、ログの整形……こういうのはスペースが意味を持つ。

Q. 選択範囲だけにかけたい

A. そのまま範囲選択して実行すれば 選択だけに効く仕様にしてある。


まとめ:テキストの“汚れ”は先に潰す

空白は、見えないのに差分やコピペで悪さをする。
だから「気づいた時に掃除」じゃなくて、いつでも一発で掃除できる状態が強い。

このマクロをショートカットに入れておけば、
「なんか変だな」って時に迷わず叩ける。これが仕事を速くする。

コメント

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