秀丸エディタでMarkdown見出しが爆速になる「見出しサイクル」マクロ(H2→H3→…→H6→解除)

Markdownでブログを書くとき、意外と面倒なのが 見出しレベルの調整 だ。

  • ここは ## で良かったっけ?
  • いや ### だな……
  • でもセクション構成を変えたら #### に落としたい……
  • いちいち # を増減するのがダルい!

そこで秀丸マクロで、カーソル行の見出しをワンキーで循環(サイクル) させる。

  • 無し → ##(H2)
  • #####(H3)
  • #######(H4)
  • #########(H5)
  • ###########(H6)
  • ###### → 無し(解除)

この一本で、見出しレベル調整の手作業が消える。


何ができる?(このマクロの特徴)

このマクロは カーソルがある「その行だけ」 を対象にする。

  • 選択いらない(カーソル行を自動選択して処理)
  • 何もない行(空行)は何もしない(事故が少ない)
  • すでに ### 見出し みたいになってたら、# を増やす
  • H6まで行ったら解除して「普通の行」に戻す
  • # の後のスペースが無くてもなるべく崩さない(あったら剥がす)

完成品:見出しサイクルマクロ(コピペで使える)

ファイル名:md_heading_cycle.mac

/*
  md_heading_cycle.mac
  カーソル行の見出しを循環:
    無し -> ## -> ### -> ... -> ###### -> 無し
*/

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

// カーソル行を選択
golinetop;
beginsel;
golineend;

$s = gettext(seltopx, seltopy, selendx, selendy, 1);
#len = strlen($s);

// 空行なら終了
#i = 0;
#has = 0;
while (#i < #len) {
    $ch = midstr($s, #i + 1, 1);
    if ($ch != " " && $ch != "\t") { #has = 1; break; }
    #i = #i + 1;
}
if (!#has) endmacro;

// 先頭の # カウント(行頭想定)
#h = 0;
while (#h < #len) {
    if (midstr($s, #h + 1, 1) == "#") {
        #h = #h + 1;
    } else {
        break;
    }
}

// 本文取り出し(# の後に半角スペース1個あれば剥がす)
$body = $s;
if (#h > 0) {
    #pos = #h + 1;
    if (midstr($s, #pos, 1) == " ") {
        $body = midstr($s, #pos + 1, #len - #pos);
    } else {
        $body = midstr($s, #pos, #len - (#pos - 1));
    }
}

// 次のレベル決定:無しは H2(##)から
#next = 2;
if (#h > 0) {
    if (#h < 6) {
        #next = #h + 1;
    } else {
        #next = 0; // H6 まで行ったら解除
    }
}

// # を組み立て
$prefix = "";
if (#next > 0) {
    #k = 0;
    while (#k < #next) {
        $prefix = $prefix + "#";
        #k = #k + 1;
    }
    $prefix = $prefix + " ";
}

// 置き換え
#sx = seltopx;
#sy = seltopy;
delete;
moveto #sx, #sy;
insert $prefix + $body;

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

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

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

2) 秀丸に登録

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

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

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

見出し調整は頻度が高い。ショートカットに入れた瞬間に強さが分かる。


使い方(動作が一発で分かる例)

例1:普通の行 → 見出し化

カーソルを置いてマクロを連打するとこうなる。

実行前

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

1回目(H2)

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

2回目(H3)

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

3回目(H4)

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

…と上がっていき、最後は解除される。


例2:H6まで行ったら解除

実行前

###### 超細かい見出し

実行後

超細かい見出し

H6は“最終段”。そこまで行ったら普通の行に戻る。


なぜ「H1」から始めないのか?

ブログ(特にWordPressテーマ)だと、H1はタイトル側が持ってるケースが多い。
本文内は H2スタート の方が構造として安定する。

だからこのマクロは、見出し無し → ## から始める設計にしてある。
(ここは好みで変えられる)


カスタム:H1から始めたい場合

次の行:

#next = 2;

を、

#next = 1;

に変えるだけで「無し → #(H1)」から始まる。


仕組み(ざっくりでOK)

このマクロは単純に言うと、

  1. カーソル行を自動で選択
  2. 行頭の # の数(見出しレベル)を数える
  3. 本文部分(# とスペースの後ろ)だけ取り出す
  4. 次のレベル(+1、H6なら解除)を決める
  5. ## みたいなプレフィックスを作って置き換える

という流れで動く。


よくある質問

Q. 空行に実行したらどうなる?

A. 何もしない。空行は判定で弾いてる。

Q. ###見出し みたいにスペース無しでも動く?

A. なるべく崩さないようにしてる。スペースがあれば剥がして、無ければそのまま本文扱いに寄せる。

Q. 行頭に # があるだけの文字列は?

A. それも見出し扱いでカウントされる。用途が特殊なら「見出しは必ず # + 半角スペース」運用にしとくと事故が減る。


まとめ:構成が崩れなくなる

見出しレベル調整が速くなると、記事の構成を気軽にいじれる。
結果、読みやすい記事に仕上がる。

  • セクション分け → 迷わずH2
  • 補足の小見出し → 連打でH3/H4
  • 深掘りの中見出し → さらに連打
  • いらなくなった → H6まで回して解除

秀丸を「ブログ執筆環境」にするなら、このマクロは確実に入れとけ。

コメント

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